rmagick 2.14.0 → 2.15.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/.rubocop.yml +79 -45
- data/CODE_OF_CONDUCT.md +13 -0
- data/CONTRIBUTING.md +21 -3
- data/ChangeLog +6 -1
- data/Rakefile +6 -3
- data/ext/RMagick/extconf.rb +2 -1
- data/ext/RMagick/rmagick.c +11 -4
- data/ext/RMagick/rmagick.h +4 -0
- data/ext/RMagick/rmdraw.c +35 -11
- data/ext/RMagick/rmenum.c +13 -4
- data/ext/RMagick/rmfill.c +4 -1
- data/ext/RMagick/rmilist.c +44 -13
- data/ext/RMagick/rmimage.c +196 -59
- data/ext/RMagick/rminfo.c +33 -10
- data/ext/RMagick/rmmain.c +10 -3
- data/ext/RMagick/rmmontage.c +12 -4
- data/ext/RMagick/rmpixel.c +18 -5
- data/ext/RMagick/rmstruct.c +108 -31
- data/ext/RMagick/rmutil.c +48 -24
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +8 -5
- data/rmagick.gemspec +4 -3
- data/spec/rmagick/draw_spec.rb +156 -0
- data/spec/spec_helper.rb +1 -0
- data/test/Magick.rb +0 -1
- data/test/test_all_basic.rb +0 -1
- metadata +25 -7
- data/test/Draw.rb +0 -119
data/ext/RMagick/rmutil.c
CHANGED
@@ -585,13 +585,15 @@ rm_fuzz_to_dbl(VALUE fuzz_arg)
|
|
585
585
|
Quantum
|
586
586
|
rm_app2quantum(VALUE obj)
|
587
587
|
{
|
588
|
-
|
588
|
+
VALUE v = obj;
|
589
589
|
|
590
590
|
if (TYPE(obj) == T_FLOAT)
|
591
591
|
{
|
592
592
|
v = rb_funcall(obj, rm_ID_to_i, 0);
|
593
593
|
}
|
594
594
|
|
595
|
+
RB_GC_GUARD(v);
|
596
|
+
|
595
597
|
return NUM2QUANTUM(v);
|
596
598
|
}
|
597
599
|
|
@@ -661,7 +663,7 @@ rm_pixelpacket_to_color_name_info(Info *info, PixelPacket *color)
|
|
661
663
|
{
|
662
664
|
Image *image;
|
663
665
|
Info *my_info;
|
664
|
-
|
666
|
+
VALUE color_name;
|
665
667
|
|
666
668
|
my_info = info ? info : CloneImageInfo(NULL);
|
667
669
|
|
@@ -674,6 +676,8 @@ rm_pixelpacket_to_color_name_info(Info *info, PixelPacket *color)
|
|
674
676
|
(void) DestroyImageInfo(my_info);
|
675
677
|
}
|
676
678
|
|
679
|
+
RB_GC_GUARD(color_name);
|
680
|
+
|
677
681
|
return color_name;
|
678
682
|
}
|
679
683
|
|
@@ -699,7 +703,7 @@ rm_write_temp_image(Image *image, char *temp_name)
|
|
699
703
|
|
700
704
|
MagickBooleanType okay;
|
701
705
|
ExceptionInfo *exception;
|
702
|
-
|
706
|
+
VALUE id_value;
|
703
707
|
int id;
|
704
708
|
|
705
709
|
exception = AcquireExceptionInfo();
|
@@ -730,6 +734,7 @@ rm_write_temp_image(Image *image, char *temp_name)
|
|
730
734
|
rb_raise(rb_eRuntimeError, "SetImageRegistry failed.");
|
731
735
|
}
|
732
736
|
|
737
|
+
RB_GC_GUARD(id_value);
|
733
738
|
}
|
734
739
|
|
735
740
|
|
@@ -789,13 +794,17 @@ rm_not_implemented(void)
|
|
789
794
|
void
|
790
795
|
rm_magick_error(const char *msg, const char *loc)
|
791
796
|
{
|
792
|
-
|
797
|
+
VALUE exc, mesg, extra;
|
793
798
|
|
794
799
|
mesg = rb_str_new2(msg);
|
795
800
|
extra = loc ? rb_str_new2(loc) : Qnil;
|
796
801
|
|
797
802
|
exc = rb_funcall(Class_ImageMagickError, rm_ID_new, 2, mesg, extra);
|
798
803
|
(void) rb_funcall(rb_cObject, rb_intern("raise"), 1, exc);
|
804
|
+
|
805
|
+
RB_GC_GUARD(exc);
|
806
|
+
RB_GC_GUARD(mesg);
|
807
|
+
RB_GC_GUARD(extra);
|
799
808
|
}
|
800
809
|
|
801
810
|
|
@@ -820,7 +829,7 @@ ImageMagickError_initialize(int argc, VALUE *argv, VALUE self)
|
|
820
829
|
{
|
821
830
|
VALUE super_argv[1] = {(VALUE)0};
|
822
831
|
int super_argc = 0;
|
823
|
-
|
832
|
+
VALUE extra = Qnil;
|
824
833
|
|
825
834
|
switch(argc)
|
826
835
|
{
|
@@ -838,6 +847,7 @@ ImageMagickError_initialize(int argc, VALUE *argv, VALUE self)
|
|
838
847
|
(void) rb_call_super(super_argc, (const VALUE *)super_argv);
|
839
848
|
(void) rb_iv_set(self, "@"MAGICK_LOC, extra);
|
840
849
|
|
850
|
+
RB_GC_GUARD(extra);
|
841
851
|
|
842
852
|
return self;
|
843
853
|
}
|
@@ -922,21 +932,24 @@ void rm_set_user_artifact(Image *images, Info *info)
|
|
922
932
|
void
|
923
933
|
rm_get_optional_arguments(VALUE img)
|
924
934
|
{
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
935
|
+
VALUE optional_method_arguments;
|
936
|
+
VALUE opt_args;
|
937
|
+
VALUE argv[1];
|
938
|
+
|
939
|
+
// opt_args = Magick::OptionalMethodArguments.new(img)
|
940
|
+
// opt_args.instance_eval { block }
|
941
|
+
if (rb_block_given_p())
|
942
|
+
{
|
943
|
+
optional_method_arguments = rb_const_get_from(Module_Magick, rb_intern("OptionalMethodArguments"));
|
944
|
+
argv[0] = img;
|
945
|
+
opt_args = rb_class_new_instance(1, argv, optional_method_arguments);
|
946
|
+
(void) rb_obj_instance_eval(0, NULL, opt_args);
|
947
|
+
}
|
948
|
+
|
949
|
+
RB_GC_GUARD(optional_method_arguments);
|
950
|
+
RB_GC_GUARD(opt_args);
|
951
|
+
|
952
|
+
return;
|
940
953
|
}
|
941
954
|
|
942
955
|
|
@@ -1159,7 +1172,7 @@ rm_exif_by_entry(Image *image)
|
|
1159
1172
|
const char *property, *value;
|
1160
1173
|
char *str;
|
1161
1174
|
size_t len = 0, property_l, value_l;
|
1162
|
-
|
1175
|
+
VALUE v;
|
1163
1176
|
|
1164
1177
|
(void) GetImageProperty(image, "exif:*");
|
1165
1178
|
ResetImagePropertyIterator(image);
|
@@ -1223,6 +1236,9 @@ rm_exif_by_entry(Image *image)
|
|
1223
1236
|
|
1224
1237
|
v = rb_str_new(str, len);
|
1225
1238
|
xfree(str);
|
1239
|
+
|
1240
|
+
RB_GC_GUARD(v);
|
1241
|
+
|
1226
1242
|
return v;
|
1227
1243
|
}
|
1228
1244
|
|
@@ -1245,7 +1261,7 @@ rm_exif_by_number(Image *image)
|
|
1245
1261
|
const char *property, *value;
|
1246
1262
|
char *str;
|
1247
1263
|
size_t len = 0, property_l, value_l;
|
1248
|
-
|
1264
|
+
VALUE v;
|
1249
1265
|
|
1250
1266
|
(void) GetImageProperty(image, "exif:!");
|
1251
1267
|
ResetImagePropertyIterator(image);
|
@@ -1309,6 +1325,9 @@ rm_exif_by_number(Image *image)
|
|
1309
1325
|
|
1310
1326
|
v = rb_str_new(str, len);
|
1311
1327
|
xfree(str);
|
1328
|
+
|
1329
|
+
RB_GC_GUARD(v);
|
1330
|
+
|
1312
1331
|
return v;
|
1313
1332
|
}
|
1314
1333
|
|
@@ -1426,8 +1445,8 @@ rm_progress_monitor(
|
|
1426
1445
|
const MagickSizeType sp,
|
1427
1446
|
void *client_data)
|
1428
1447
|
{
|
1429
|
-
|
1430
|
-
|
1448
|
+
VALUE rval;
|
1449
|
+
VALUE method, offset, span;
|
1431
1450
|
|
1432
1451
|
tag = tag; // defeat gcc message
|
1433
1452
|
|
@@ -1443,6 +1462,11 @@ rm_progress_monitor(
|
|
1443
1462
|
|
1444
1463
|
rval = rb_funcall((VALUE)client_data, rm_ID_call, 3, method, offset, span);
|
1445
1464
|
|
1465
|
+
RB_GC_GUARD(rval);
|
1466
|
+
RB_GC_GUARD(method);
|
1467
|
+
RB_GC_GUARD(offset);
|
1468
|
+
RB_GC_GUARD(span);
|
1469
|
+
|
1446
1470
|
return RTEST(rval) ? MagickTrue : MagickFalse;
|
1447
1471
|
}
|
1448
1472
|
|
data/lib/rmagick/version.rb
CHANGED
data/lib/rmagick_internal.rb
CHANGED
@@ -30,12 +30,15 @@ module Magick
|
|
30
30
|
|
31
31
|
# remove reference to the proc at exit
|
32
32
|
def trace_proc=(p)
|
33
|
-
|
34
|
-
|
35
|
-
@
|
36
|
-
|
33
|
+
m = Mutex.new
|
34
|
+
m.synchronize do
|
35
|
+
if @trace_proc.nil? && !p.nil? && !@exit_block_set_up
|
36
|
+
at_exit { @trace_proc = nil }
|
37
|
+
@exit_block_set_up = true
|
38
|
+
end
|
37
39
|
|
38
|
-
|
40
|
+
@trace_proc = p
|
41
|
+
end
|
39
42
|
end
|
40
43
|
end
|
41
44
|
|
data/rmagick.gemspec
CHANGED
@@ -30,12 +30,13 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.required_ruby_version = ">= #{Magick::MIN_RUBY_VERSION}"
|
31
31
|
s.requirements << "ImageMagick #{Magick::MIN_IM_VERSION} or later"
|
32
32
|
s.add_development_dependency 'rake-compiler'
|
33
|
+
s.add_development_dependency 'rspec', '~> 3.2.0'
|
33
34
|
|
34
|
-
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('1.9.2')
|
35
|
-
s.add_development_dependency 'rubocop'
|
35
|
+
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('1.9.2')
|
36
|
+
s.add_development_dependency 'rubocop'
|
36
37
|
end
|
37
38
|
|
38
|
-
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
|
39
|
+
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.0')
|
39
40
|
s.add_development_dependency 'test-unit', '~> 2'
|
40
41
|
end
|
41
42
|
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
class Magick::Draw
|
2
|
+
def self._dummy_img_
|
3
|
+
@@_dummy_img_
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
RSpec.describe Magick::Draw do
|
8
|
+
let(:draw) { Magick::Draw.new }
|
9
|
+
|
10
|
+
describe '._dummy_img_' do
|
11
|
+
it 'works' do
|
12
|
+
# initially this variable is not defined.
|
13
|
+
expect { Magick::Draw._dummy_img_ }.to raise_error(NameError)
|
14
|
+
|
15
|
+
# cause it to become defined. save the object id.
|
16
|
+
draw.get_type_metrics('ABCDEF')
|
17
|
+
dummy = nil
|
18
|
+
expect { dummy = Magick::Draw._dummy_img_ }.not_to raise_error
|
19
|
+
|
20
|
+
expect(dummy).to be_instance_of(Magick::Image)
|
21
|
+
|
22
|
+
# ensure that it is always the same object
|
23
|
+
draw.get_type_metrics('ABCDEF')
|
24
|
+
dummy2 = nil
|
25
|
+
expect { dummy2 = Magick::Draw._dummy_img_ }.not_to raise_error
|
26
|
+
expect(dummy).to eq dummy2
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#kerning=' do
|
31
|
+
it 'assigns without raising an error' do
|
32
|
+
expect { draw.kerning = 1 }.not_to raise_error
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#kerning' do
|
37
|
+
it 'accepts a valid parameter without raising an error' do
|
38
|
+
expect { draw.kerning(1) }.not_to raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'raises an error when given an invalid parameter' do
|
42
|
+
expect { draw.kerning('a') }.to raise_error(ArgumentError)
|
43
|
+
expect { draw.kerning([]) }.to raise_error(TypeError)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#interline_spacing=' do
|
48
|
+
it 'assigns without raising an error' do
|
49
|
+
expect { draw.interline_spacing = 1 }.not_to raise_error
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#interline_spacing' do
|
54
|
+
it 'accepts a valid parameter without raising an error' do
|
55
|
+
expect { draw.interline_spacing(1) }.not_to raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'raises an error when given an invalid parameter' do
|
59
|
+
expect { draw.interline_spacing('a') }.to raise_error(ArgumentError)
|
60
|
+
expect { draw.interline_spacing([]) }.to raise_error(TypeError)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#interword_spacing=' do
|
65
|
+
it 'assigns without raising an error' do
|
66
|
+
expect { draw.interword_spacing = 1 }.not_to raise_error
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#interword_spacing' do
|
71
|
+
it 'accepts a valid parameter without raising an error' do
|
72
|
+
expect { draw.interword_spacing(1) }.not_to raise_error
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'raises an error when given an invalid parameter' do
|
76
|
+
expect { draw.interword_spacing('a') }.to raise_error(ArgumentError)
|
77
|
+
expect { draw.interword_spacing([]) }.to raise_error(TypeError)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#marshal_dump', '#marshal_load' do
|
82
|
+
it 'marshals without an error' do
|
83
|
+
skip 'this spec fails on some versions of ImageMagick'
|
84
|
+
rose = Magick::Image.read('rose:').first
|
85
|
+
granite = Magick::Image.read('granite:').first
|
86
|
+
s = granite.to_blob { self.format = 'miff' }
|
87
|
+
granite = Magick::Image.from_blob(s).first
|
88
|
+
blue_stroke = Magick::Image.new(20,20) { self.background_color = 'blue' }
|
89
|
+
s = blue_stroke.to_blob { self.format = 'miff' }
|
90
|
+
blue_stroke = Magick::Image.from_blob(s).first
|
91
|
+
|
92
|
+
draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
|
93
|
+
draw.decorate = Magick::LineThroughDecoration
|
94
|
+
draw.encoding = 'AdobeCustom'
|
95
|
+
draw.gravity = Magick::CenterGravity
|
96
|
+
draw.fill = Magick::Pixel.from_color('red')
|
97
|
+
draw.stroke = Magick::Pixel.from_color('blue')
|
98
|
+
draw.stroke_width = 5
|
99
|
+
draw.fill_pattern = granite
|
100
|
+
draw.stroke_pattern = blue_stroke
|
101
|
+
draw.text_antialias = true
|
102
|
+
draw.font = 'Arial-Bold'
|
103
|
+
draw.font_family = 'arial'
|
104
|
+
draw.font_style = Magick::ItalicStyle
|
105
|
+
draw.font_stretch = Magick::CondensedStretch
|
106
|
+
draw.font_weight = Magick::BoldWeight
|
107
|
+
draw.pointsize = 12
|
108
|
+
draw.density = '72x72'
|
109
|
+
draw.align = Magick::CenterAlign
|
110
|
+
draw.undercolor = Magick::Pixel.from_color('green')
|
111
|
+
draw.kerning = 10.5
|
112
|
+
draw.interword_spacing = 3.75
|
113
|
+
|
114
|
+
draw.circle(20, 25, 20, 28)
|
115
|
+
dumped = nil
|
116
|
+
expect { dumped = Marshal.dump(draw) }.not_to raise_error
|
117
|
+
expect { Marshal.load(dumped) }.not_to raise_error
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '#fill_pattern' do
|
122
|
+
it 'accepts an Image argument' do
|
123
|
+
img = Magick::Image.new(20,20)
|
124
|
+
expect { draw.fill_pattern = img }.not_to raise_error
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'accepts an ImageList argument' do
|
128
|
+
img = Magick::Image.new(20,20)
|
129
|
+
ilist = Magick::ImageList.new
|
130
|
+
ilist << img
|
131
|
+
expect { draw.fill_pattern = ilist }.not_to raise_error
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'does not accept arbitrary arguments' do
|
135
|
+
expect { draw.fill_pattern = 1 }.to raise_error(NoMethodError)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe '#stroke_pattern' do
|
140
|
+
it 'accepts an Image argument' do
|
141
|
+
img = Magick::Image.new(20,20)
|
142
|
+
expect { draw.stroke_pattern = img }.not_to raise_error
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'accepts an ImageList argument' do
|
146
|
+
img = Magick::Image.new(20,20)
|
147
|
+
ilist = Magick::ImageList.new
|
148
|
+
ilist << img
|
149
|
+
expect { draw.stroke_pattern = ilist }.not_to raise_error
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'does not accept arbitrary arguments' do
|
153
|
+
expect { draw.stroke_pattern = 1 }.to raise_error(NoMethodError)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'rmagick'
|
data/test/Magick.rb
CHANGED
data/test/test_all_basic.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmagick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Hunter
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake-compiler
|
@@ -28,19 +28,33 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: rspec
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
36
|
+
version: 3.2.0
|
37
37
|
type: :development
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 3.2.0
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: rubocop
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
44
58
|
description: RMagick is an interface between Ruby and ImageMagick.
|
45
59
|
email: github@benjaminfleischer.com
|
46
60
|
executables: []
|
@@ -50,9 +64,11 @@ extra_rdoc_files: []
|
|
50
64
|
files:
|
51
65
|
- ".gitignore"
|
52
66
|
- ".hound.yml"
|
67
|
+
- ".rspec"
|
53
68
|
- ".rubocop.yml"
|
54
69
|
- ".simplecov"
|
55
70
|
- ".travis.yml"
|
71
|
+
- CODE_OF_CONDUCT.md
|
56
72
|
- CONTRIBUTING.md
|
57
73
|
- ChangeLog
|
58
74
|
- Doxyfile
|
@@ -410,7 +426,8 @@ files:
|
|
410
426
|
- lib/rvg/transformable.rb
|
411
427
|
- lib/rvg/units.rb
|
412
428
|
- rmagick.gemspec
|
413
|
-
-
|
429
|
+
- spec/rmagick/draw_spec.rb
|
430
|
+
- spec/spec_helper.rb
|
414
431
|
- test/Image1.rb
|
415
432
|
- test/Image2.rb
|
416
433
|
- test/Image3.rb
|
@@ -454,7 +471,8 @@ signing_key:
|
|
454
471
|
specification_version: 4
|
455
472
|
summary: Ruby binding to ImageMagick
|
456
473
|
test_files:
|
457
|
-
-
|
474
|
+
- spec/rmagick/draw_spec.rb
|
475
|
+
- spec/spec_helper.rb
|
458
476
|
- test/Image1.rb
|
459
477
|
- test/Image2.rb
|
460
478
|
- test/Image3.rb
|