win32-clipboard 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +4 -0
- data/Rakefile +6 -0
- data/lib/win32/clipboard.rb +23 -10
- data/lib/win32/windows/constants.rb +2 -0
- data/test/img/16bit.bmp +0 -0
- data/test/img/16bit_bitfields.bmp +0 -0
- data/test/img/16bit_bitfields1.bmp +0 -0
- data/test/img/16bit_bitfields2.bmp +0 -0
- data/test/img/1bit.bmp +0 -0
- data/test/img/24bit.bmp +0 -0
- data/test/img/32bit.bmp +0 -0
- data/test/img/32bit_bitfields.bmp +0 -0
- data/test/img/32bit_bitfields1.bmp +0 -0
- data/test/img/32bit_bitfields2.bmp +0 -0
- data/test/img/4bit.bmp +0 -0
- data/test/img/8bit.bmp +0 -0
- data/test/test_clipboard.rb +1 -1
- data/test/test_image_clipboard.rb +51 -0
- data/win32-clipboard.gemspec +1 -1
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1e9d66dee40bab2644c326883aa740d9cda4c7a
|
4
|
+
data.tar.gz: a35a610cd2d18dd40fdc04486b9492c41df6a065
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 019a82dd2e1110b082fa59c815f551b53a1620db009112d5d506889c88527f78d8cd84692112627ebb1f725406cd258a60d22c07552377922e68a8502c845c19
|
7
|
+
data.tar.gz: 22c2fad73246cd26eedca03248e5a3f0afc2d28bea15350341807ee4c57102f5c9089ae175a1cf47e016886df1f3c473afa197200796d0164b6d6e3afdfd5fa3
|
data/CHANGES
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== 0.6.2 - 27-Jan-2014
|
2
|
+
* Fix and more tests for the internal get_image_data. Thanks go to u338steven
|
3
|
+
for the spot and patches.
|
4
|
+
|
1
5
|
== 0.6.1 - 20-Jan-2014
|
2
6
|
* Use 32-bit versions of GetWindowLong and SetWindowLong functions on 32-bit
|
3
7
|
versions of Ruby. Thanks go to Orgad Shaneh for the spot.
|
data/Rakefile
CHANGED
@@ -45,6 +45,12 @@ namespace :test do
|
|
45
45
|
t.verbose = true
|
46
46
|
t.test_files = FileList['test/test_clipboard.rb']
|
47
47
|
end
|
48
|
+
|
49
|
+
Rake::TestTask.new(:image) do |t|
|
50
|
+
t.warning = true
|
51
|
+
t.verbose = true
|
52
|
+
t.test_files = FileList['test/test_image_clipboard.rb']
|
53
|
+
end
|
48
54
|
end
|
49
55
|
|
50
56
|
task :default => 'test:all'
|
data/lib/win32/clipboard.rb
CHANGED
@@ -16,7 +16,7 @@ module Win32
|
|
16
16
|
extend Windows::Structs
|
17
17
|
|
18
18
|
# The version of this library
|
19
|
-
VERSION = '0.6.
|
19
|
+
VERSION = '0.6.2'
|
20
20
|
|
21
21
|
# Clipboard formats
|
22
22
|
|
@@ -162,7 +162,7 @@ module Win32
|
|
162
162
|
buf = clip_data
|
163
163
|
extra = 4
|
164
164
|
when BITMAP, DIB
|
165
|
-
buf = clip_data[
|
165
|
+
buf = clip_data[BITMAP_FILE_HEADER_SIZE..clip_data.length]
|
166
166
|
extra = 0
|
167
167
|
end
|
168
168
|
|
@@ -320,6 +320,14 @@ module Win32
|
|
320
320
|
|
321
321
|
private
|
322
322
|
|
323
|
+
# sizeof(BITMAPFILEHEADER)
|
324
|
+
|
325
|
+
BITMAP_FILE_HEADER_SIZE = 14
|
326
|
+
|
327
|
+
# sizeof(BITMAPINFOHEADER)
|
328
|
+
|
329
|
+
BITMAP_INFO_HEADER_SIZE = 40
|
330
|
+
|
323
331
|
# Opens the clipboard and prevents other applications from modifying
|
324
332
|
# the clipboard content until it is closed.
|
325
333
|
#
|
@@ -357,8 +365,7 @@ module Win32
|
|
357
365
|
|
358
366
|
bmi = BITMAPINFO.new(ptr)
|
359
367
|
|
360
|
-
|
361
|
-
size_image = buf_size + 16 if size_image == 0
|
368
|
+
file_size = buf_size + BITMAP_FILE_HEADER_SIZE
|
362
369
|
|
363
370
|
# Calculate the header size
|
364
371
|
case bmi[:bmiHeader][:biBitCount]
|
@@ -369,10 +376,14 @@ module Win32
|
|
369
376
|
when 8
|
370
377
|
table_size = 256
|
371
378
|
when 16, 32
|
372
|
-
if bmi[:bmiHeader][:biCompression] ==
|
379
|
+
if bmi[:bmiHeader][:biCompression] == BI_RGB
|
380
|
+
table_size = bmi[:bmiHeader][:biClrUsed]
|
381
|
+
elsif bmi[:bmiHeader][:biCompression] == BI_BITFIELDS
|
373
382
|
table_size = bmi[:bmiHeader][:biClrUsed]
|
374
|
-
|
375
|
-
|
383
|
+
if bmi[:bmiHeader][:biSize] == BITMAP_INFO_HEADER_SIZE
|
384
|
+
# Add bit fields size
|
385
|
+
table_size += 3
|
386
|
+
end
|
376
387
|
else
|
377
388
|
raise "invalid bit/compression combination"
|
378
389
|
end
|
@@ -382,10 +393,12 @@ module Win32
|
|
382
393
|
raise "invalid bit count"
|
383
394
|
end # case
|
384
395
|
|
385
|
-
#
|
386
|
-
|
396
|
+
# offset = sizeof(BITMAPFILEHEADER)
|
397
|
+
# + sizeof(BITMAPINFOHEADER or BITMAPV4HEADER or BITMAPV5HEADER)
|
398
|
+
# + (color table size)
|
399
|
+
offset = BITMAP_FILE_HEADER_SIZE + bmi[:bmiHeader][:biSize] + (table_size * 4)
|
387
400
|
|
388
|
-
buf = "\x42\x4D" + [
|
401
|
+
buf = "\x42\x4D" + [file_size].pack('L') + 0.chr * 4 + [offset].pack('L') + ptr.read_bytes(buf_size)
|
389
402
|
ensure
|
390
403
|
GlobalUnlock(handle) if handle
|
391
404
|
end
|
data/test/img/16bit.bmp
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/img/1bit.bmp
ADDED
Binary file
|
data/test/img/24bit.bmp
ADDED
Binary file
|
data/test/img/32bit.bmp
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/img/4bit.bmp
ADDED
Binary file
|
data/test/img/8bit.bmp
ADDED
Binary file
|
data/test/test_clipboard.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
###########################################################################
|
3
|
+
# test_image_clipboard.rb
|
4
|
+
#
|
5
|
+
# Test suite for the win32-clipboard library(only get_image_data).
|
6
|
+
###########################################################################
|
7
|
+
require 'test-unit'
|
8
|
+
require 'win32/clipboard'
|
9
|
+
include Win32
|
10
|
+
|
11
|
+
class TC_Image_ClipBoard < Test::Unit::TestCase
|
12
|
+
class << self
|
13
|
+
def startup
|
14
|
+
$is_ready = false
|
15
|
+
@t = Thread.new do
|
16
|
+
begin
|
17
|
+
Win32::Clipboard.notify_change {$is_ready = true}
|
18
|
+
rescue => e
|
19
|
+
puts $!
|
20
|
+
puts e.backtrace
|
21
|
+
end
|
22
|
+
end
|
23
|
+
# wait for notify_change running
|
24
|
+
until $is_ready
|
25
|
+
Clipboard.set_data('foo')
|
26
|
+
sleep 0.1
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def shutdown
|
31
|
+
@t.kill
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
dir = File.join(File.dirname(__FILE__), 'img')
|
36
|
+
Dir.glob("#{dir}/*.bmp") do |file|
|
37
|
+
test "get_image_data file: " + File.basename(file) do
|
38
|
+
$is_ready = false
|
39
|
+
|
40
|
+
bmp = File.open(file, "rb").read
|
41
|
+
Clipboard.set_data(bmp, Clipboard::DIB)
|
42
|
+
|
43
|
+
until $is_ready
|
44
|
+
sleep 0.1
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_equal(Clipboard.data(Clipboard::DIB), bmp)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/win32-clipboard.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-clipboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -75,8 +75,21 @@ files:
|
|
75
75
|
- lib/win32/windows/constants.rb
|
76
76
|
- lib/win32/windows/functions.rb
|
77
77
|
- lib/win32/windows/structs.rb
|
78
|
+
- test/img/16bit.bmp
|
79
|
+
- test/img/16bit_bitfields.bmp
|
80
|
+
- test/img/16bit_bitfields1.bmp
|
81
|
+
- test/img/16bit_bitfields2.bmp
|
82
|
+
- test/img/1bit.bmp
|
83
|
+
- test/img/24bit.bmp
|
84
|
+
- test/img/32bit.bmp
|
85
|
+
- test/img/32bit_bitfields.bmp
|
86
|
+
- test/img/32bit_bitfields1.bmp
|
87
|
+
- test/img/32bit_bitfields2.bmp
|
88
|
+
- test/img/4bit.bmp
|
89
|
+
- test/img/8bit.bmp
|
78
90
|
- test/test_clipboard.rb
|
79
91
|
- test/test_html_clipboard.rb
|
92
|
+
- test/test_image_clipboard.rb
|
80
93
|
- win32-clipboard.gemspec
|
81
94
|
homepage: http://github.com/djberg96/win32-clipboard
|
82
95
|
licenses:
|