rmagick 4.2.2 → 5.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.devcontainer/Dockerfile +14 -0
- data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
- data/.devcontainer/devcontainer.json +11 -0
- data/.devcontainer/setup-repo.sh +10 -0
- data/.devcontainer/setup-user.sh +45 -0
- data/.editorconfig +1 -1
- data/.github/workflows/ci.yml +59 -24
- data/.gitignore +3 -0
- data/.rubocop_todo.yml +0 -1
- data/.yardopts +1 -1
- data/CHANGELOG.md +131 -0
- data/README.md +12 -17
- data/Rakefile +53 -81
- data/before_install_linux.sh +4 -4
- data/before_install_osx.sh +7 -6
- data/ext/RMagick/extconf.rb +94 -45
- data/ext/RMagick/{rmagick.c → rmagick.cpp} +19 -22
- data/ext/RMagick/rmagick.h +90 -60
- data/ext/RMagick/rmagick_gvl.h +224 -0
- data/ext/RMagick/{rmdraw.c → rmdraw.cpp} +160 -146
- data/ext/RMagick/{rmenum.c → rmenum.cpp} +69 -50
- data/ext/RMagick/{rmfill.c → rmfill.cpp} +81 -20
- data/ext/RMagick/{rmilist.c → rmilist.cpp} +184 -93
- data/ext/RMagick/{rmimage.c → rmimage.cpp} +1276 -731
- data/ext/RMagick/{rminfo.c → rminfo.cpp} +119 -131
- data/ext/RMagick/{rmkinfo.c → rmkinfo.cpp} +41 -16
- data/ext/RMagick/rmmain.cpp +1957 -0
- data/ext/RMagick/{rmmontage.c → rmmontage.cpp} +49 -28
- data/ext/RMagick/{rmpixel.c → rmpixel.cpp} +109 -84
- data/ext/RMagick/{rmstruct.c → rmstruct.cpp} +12 -12
- data/ext/RMagick/{rmutil.c → rmutil.cpp} +52 -91
- data/lib/rmagick/version.rb +3 -1
- data/lib/rmagick.rb +2 -0
- data/lib/rmagick_internal.rb +9 -48
- data/lib/rvg/rvg.rb +2 -2
- data/rmagick.gemspec +8 -7
- metadata +54 -23
- data/.codeclimate.yml +0 -63
- data/deprecated/RMagick.rb +0 -6
- data/ext/RMagick/rmmain.c +0 -1951
@@ -5,8 +5,8 @@
|
|
5
5
|
*
|
6
6
|
* Changes since Nov. 2009 copyright © by Benjamin Thomas and Omer Bar-or
|
7
7
|
*
|
8
|
-
* @file rmutil.
|
9
|
-
* @version $Id: rmutil.
|
8
|
+
* @file rmutil.cpp
|
9
|
+
* @version $Id: rmutil.cpp,v 1.182 2009/12/21 10:34:58 baror Exp $
|
10
10
|
* @author Tim Hunter
|
11
11
|
******************************************************************************/
|
12
12
|
|
@@ -22,6 +22,9 @@ static VALUE rescue_not_str(VALUE, VALUE ATTRIBUTE_UNUSED) ATTRIBUTE_NORETURN;
|
|
22
22
|
static void handle_exception(ExceptionInfo *, Image *, ErrorRetention);
|
23
23
|
|
24
24
|
|
25
|
+
DEFINE_GVL_STUB5(CloneImage, const Image *, const size_t, const size_t, const MagickBooleanType, ExceptionInfo *);
|
26
|
+
|
27
|
+
|
25
28
|
/**
|
26
29
|
* ImageMagick safe version of malloc.
|
27
30
|
*
|
@@ -249,7 +252,7 @@ rm_check_ary_type(VALUE ary)
|
|
249
252
|
VALUE checked = rb_check_array_type(ary);
|
250
253
|
if (NIL_P(checked))
|
251
254
|
{
|
252
|
-
rb_raise(rb_eTypeError, "wrong argument type %"RMIsVALUE" was given. (must respond to :to_ary)", rb_obj_class(ary));
|
255
|
+
rb_raise(rb_eTypeError, "wrong argument type %" RMIsVALUE " was given. (must respond to :to_ary)", rb_obj_class(ary));
|
253
256
|
}
|
254
257
|
return checked;
|
255
258
|
}
|
@@ -269,7 +272,7 @@ rm_check_destroyed(VALUE obj)
|
|
269
272
|
{
|
270
273
|
Image *image;
|
271
274
|
|
272
|
-
|
275
|
+
TypedData_Get_Struct(obj, Image, &rm_image_data_type, image);
|
273
276
|
if (!image)
|
274
277
|
{
|
275
278
|
rb_raise(Class_DestroyedImageError, "destroyed image");
|
@@ -316,16 +319,16 @@ rm_no_freeze(VALUE obj)
|
|
316
319
|
* No Ruby usage (internal function)
|
317
320
|
*
|
318
321
|
* @param str the Ruby string
|
319
|
-
* @param len pointer to a
|
322
|
+
* @param len pointer to a size_t in which to store the number of characters
|
320
323
|
* @return a C string version of str
|
321
324
|
*/
|
322
325
|
char *
|
323
|
-
rm_str2cstr(VALUE str,
|
326
|
+
rm_str2cstr(VALUE str, size_t *len)
|
324
327
|
{
|
325
328
|
StringValue(str);
|
326
329
|
if (len)
|
327
330
|
{
|
328
|
-
*len = RSTRING_LEN(str);
|
331
|
+
*len = (size_t)RSTRING_LEN(str);
|
329
332
|
}
|
330
333
|
return RSTRING_PTR(str);
|
331
334
|
}
|
@@ -370,7 +373,7 @@ rm_percentage(VALUE arg, double max)
|
|
370
373
|
char *pct_str;
|
371
374
|
long pct_long;
|
372
375
|
|
373
|
-
arg = rb_rescue(rb_str_to_str, arg, rescue_not_str, arg);
|
376
|
+
arg = rb_rescue(RESCUE_FUNC(rb_str_to_str), arg, RESCUE_EXCEPTION_HANDLER_FUNC(rescue_not_str), arg);
|
374
377
|
pct_str = StringValueCStr(arg);
|
375
378
|
errno = 0;
|
376
379
|
pct_long = strtol(pct_str, &end, 10);
|
@@ -451,7 +454,7 @@ rescue_not_dbl(VALUE ignored ATTRIBUTE_UNUSED, VALUE raised_exc ATTRIBUTE_UNUSED
|
|
451
454
|
int
|
452
455
|
rm_check_num2dbl(VALUE obj)
|
453
456
|
{
|
454
|
-
return FIX2INT(rb_rescue(check_num2dbl, obj, rescue_not_dbl, (VALUE)0));
|
457
|
+
return FIX2INT(rb_rescue(RESCUE_FUNC(check_num2dbl), obj, RESCUE_EXCEPTION_HANDLER_FUNC(rescue_not_dbl), (VALUE)0));
|
455
458
|
}
|
456
459
|
|
457
460
|
|
@@ -469,7 +472,7 @@ rm_str_to_pct(VALUE str)
|
|
469
472
|
long pct;
|
470
473
|
char *pct_str, *end;
|
471
474
|
|
472
|
-
str = rb_rescue(rb_str_to_str, str, rescue_not_str, str);
|
475
|
+
str = rb_rescue(RESCUE_FUNC(rb_str_to_str), str, RESCUE_EXCEPTION_HANDLER_FUNC(rescue_not_str), str);
|
473
476
|
pct_str = StringValueCStr(str);
|
474
477
|
errno = 0;
|
475
478
|
pct = strtol(pct_str, &end, 10);
|
@@ -513,7 +516,7 @@ rm_fuzz_to_dbl(VALUE fuzz_arg)
|
|
513
516
|
char *fuzz_str;
|
514
517
|
|
515
518
|
// Convert to string, issue error message if failure.
|
516
|
-
fuzz_arg = rb_rescue(rb_str_to_str, fuzz_arg, rescue_not_str, fuzz_arg);
|
519
|
+
fuzz_arg = rb_rescue(RESCUE_FUNC(rb_str_to_str), fuzz_arg, RESCUE_EXCEPTION_HANDLER_FUNC(rescue_not_str), fuzz_arg);
|
517
520
|
fuzz_str = StringValueCStr(fuzz_arg);
|
518
521
|
errno = 0;
|
519
522
|
fuzz = strtod(fuzz_str, &end);
|
@@ -780,7 +783,7 @@ rm_write_temp_image(Image *image, char *temp_name, size_t temp_name_l)
|
|
780
783
|
snprintf(temp_name, temp_name_l, "mpri:%d", id);
|
781
784
|
|
782
785
|
// Omit "mpri:" from filename to form the key
|
783
|
-
okay = SetImageRegistry(ImageRegistryType, temp_name+5, image, exception);
|
786
|
+
okay = (MagickBooleanType)SetImageRegistry(ImageRegistryType, temp_name+5, image, exception);
|
784
787
|
CHECK_EXCEPTION();
|
785
788
|
DestroyExceptionInfo(exception);
|
786
789
|
if (!okay)
|
@@ -858,6 +861,25 @@ rm_magick_error(const char *msg)
|
|
858
861
|
RB_GC_GUARD(mesg);
|
859
862
|
}
|
860
863
|
|
864
|
+
#if defined(IMAGEMAGICK_7)
|
865
|
+
/**
|
866
|
+
* Sets the alpha channel of a pixel color
|
867
|
+
*
|
868
|
+
* No Ruby usage (internal function)
|
869
|
+
*
|
870
|
+
* @param pixel the Pixel
|
871
|
+
* @param value the value
|
872
|
+
*/
|
873
|
+
void
|
874
|
+
rm_set_pixelinfo_alpha(PixelInfo *pixel, const MagickRealType value)
|
875
|
+
{
|
876
|
+
pixel->alpha = value;
|
877
|
+
if (value != (MagickRealType) OpaqueAlpha)
|
878
|
+
{
|
879
|
+
pixel->alpha_trait = BlendPixelTrait;
|
880
|
+
}
|
881
|
+
}
|
882
|
+
#endif
|
861
883
|
|
862
884
|
/**
|
863
885
|
* Initialize a new ImageMagickError object - store the "loc" string in the
|
@@ -889,7 +911,7 @@ ImageMagickError_initialize(int argc, VALUE *argv, VALUE self)
|
|
889
911
|
}
|
890
912
|
|
891
913
|
rb_call_super(super_argc, (const VALUE *)super_argv);
|
892
|
-
rb_iv_set(self, "@"MAGICK_LOC, extra);
|
914
|
+
rb_iv_set(self, "@" MAGICK_LOC, extra);
|
893
915
|
|
894
916
|
RB_GC_GUARD(extra);
|
895
917
|
|
@@ -1006,14 +1028,7 @@ rm_get_optional_arguments(VALUE img)
|
|
1006
1028
|
argv[0] = img;
|
1007
1029
|
opt_args = rb_class_new_instance(1, argv, optional_method_arguments);
|
1008
1030
|
|
1009
|
-
|
1010
|
-
{
|
1011
|
-
rb_obj_instance_eval(0, NULL, opt_args);
|
1012
|
-
}
|
1013
|
-
else
|
1014
|
-
{
|
1015
|
-
rb_yield(opt_args);
|
1016
|
-
}
|
1031
|
+
rb_yield(opt_args);
|
1017
1032
|
}
|
1018
1033
|
|
1019
1034
|
RB_GC_GUARD(optional_method_arguments);
|
@@ -1253,7 +1268,7 @@ void rm_sync_image_options(Image *image, Info *info)
|
|
1253
1268
|
/**
|
1254
1269
|
* Replicate old (ImageMagick < 6.3.2) EXIF:* functionality using
|
1255
1270
|
* GetImageProperty by returning the exif entries as a single string, separated
|
1256
|
-
* by \n's. Do this so that RMagick
|
1271
|
+
* by \n's. Do this so that RMagick works no matter which version of
|
1257
1272
|
* ImageMagick is in use.
|
1258
1273
|
*
|
1259
1274
|
* No Ruby usage (internal function)
|
@@ -1317,7 +1332,7 @@ rm_exif_by_entry(Image *image)
|
|
1317
1332
|
return Qnil;
|
1318
1333
|
}
|
1319
1334
|
|
1320
|
-
str = xmalloc(len);
|
1335
|
+
str = (char *)xmalloc(len);
|
1321
1336
|
len = 0;
|
1322
1337
|
|
1323
1338
|
// Copy the exif properties and values into the string.
|
@@ -1372,7 +1387,7 @@ rm_exif_by_entry(Image *image)
|
|
1372
1387
|
/**
|
1373
1388
|
* Replicate old (ImageMagick < 6.3.2) EXIF:! functionality using
|
1374
1389
|
* GetImageProperty by returning the exif entries as a single string, separated
|
1375
|
-
* by \n's. Do this so that RMagick
|
1390
|
+
* by \n's. Do this so that RMagick works no matter which version of
|
1376
1391
|
* ImageMagick is in use.
|
1377
1392
|
*
|
1378
1393
|
* No Ruby usage (internal function)
|
@@ -1435,7 +1450,7 @@ rm_exif_by_number(Image *image)
|
|
1435
1450
|
return Qnil;
|
1436
1451
|
}
|
1437
1452
|
|
1438
|
-
str = xmalloc(len);
|
1453
|
+
str = (char *)xmalloc(len);
|
1439
1454
|
len = 0;
|
1440
1455
|
|
1441
1456
|
// Copy the exif properties and values into the string.
|
@@ -1506,7 +1521,8 @@ rm_clone_image(Image *image)
|
|
1506
1521
|
ExceptionInfo *exception;
|
1507
1522
|
|
1508
1523
|
exception = AcquireExceptionInfo();
|
1509
|
-
|
1524
|
+
GVL_STRUCT_TYPE(CloneImage) args = { image, 0, 0, MagickTrue, exception };
|
1525
|
+
clone = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CloneImage), &args);
|
1510
1526
|
if (!clone)
|
1511
1527
|
{
|
1512
1528
|
rb_raise(rb_eNoMemError, "not enough memory to continue");
|
@@ -1518,64 +1534,6 @@ rm_clone_image(Image *image)
|
|
1518
1534
|
}
|
1519
1535
|
|
1520
1536
|
|
1521
|
-
/**
|
1522
|
-
* SetImage(Info)ProgressMonitor exit.
|
1523
|
-
*
|
1524
|
-
* No Ruby usage (internal function)
|
1525
|
-
*
|
1526
|
-
* Notes:
|
1527
|
-
* - ImageMagick's "tag" argument is unused. We pass along the method name
|
1528
|
-
* instead.
|
1529
|
-
*
|
1530
|
-
* @param tag ImageMagick argument (unused)
|
1531
|
-
* @param of the offset type
|
1532
|
-
* @param sp the size type
|
1533
|
-
* @param client_data pointer to the progress method to call
|
1534
|
-
* @return true if calling client_data returns a non-nil value, otherwise false
|
1535
|
-
*/
|
1536
|
-
MagickBooleanType
|
1537
|
-
rm_progress_monitor(
|
1538
|
-
const char *tag ATTRIBUTE_UNUSED,
|
1539
|
-
const MagickOffsetType of,
|
1540
|
-
const MagickSizeType sp,
|
1541
|
-
void *client_data)
|
1542
|
-
{
|
1543
|
-
VALUE rval;
|
1544
|
-
VALUE method, offset, span;
|
1545
|
-
|
1546
|
-
// Check running thread.
|
1547
|
-
if (rm_current_thread_id() != rm_main_thread_id)
|
1548
|
-
{
|
1549
|
-
// ImageMagick might call back in a different thread than Ruby is running in.
|
1550
|
-
// If it is a different thread, it would not have a Ruby GVL and
|
1551
|
-
// it could not retrieve properly Ruby stack.
|
1552
|
-
|
1553
|
-
// Unfortunately, there is no API available to check if the current thread has a GVL,
|
1554
|
-
// so the thread id was checked in here.
|
1555
|
-
return MagickTrue;
|
1556
|
-
}
|
1557
|
-
|
1558
|
-
#if defined(HAVE_LONG_LONG) // defined in Ruby's defines.h
|
1559
|
-
offset = rb_ll2inum(of);
|
1560
|
-
span = rb_ull2inum(sp);
|
1561
|
-
#else
|
1562
|
-
offset = rb_int2big((long)of);
|
1563
|
-
span = rb_uint2big((unsigned long)sp);
|
1564
|
-
#endif
|
1565
|
-
|
1566
|
-
method = rb_id2str(rb_frame_this_func());
|
1567
|
-
|
1568
|
-
rval = rb_funcall((VALUE)client_data, rm_ID_call, 3, method, offset, span);
|
1569
|
-
|
1570
|
-
RB_GC_GUARD(rval);
|
1571
|
-
RB_GC_GUARD(method);
|
1572
|
-
RB_GC_GUARD(offset);
|
1573
|
-
RB_GC_GUARD(span);
|
1574
|
-
|
1575
|
-
return RTEST(rval) ? MagickTrue : MagickFalse;
|
1576
|
-
}
|
1577
|
-
|
1578
|
-
|
1579
1537
|
/**
|
1580
1538
|
* Remove the ImageMagick links between images in an scene sequence.
|
1581
1539
|
*
|
@@ -1883,18 +1841,21 @@ rm_raise_exception(ExceptionInfo *exception)
|
|
1883
1841
|
}
|
1884
1842
|
|
1885
1843
|
/**
|
1886
|
-
* Get
|
1844
|
+
* Get IO path.
|
1887
1845
|
*
|
1888
1846
|
* No Ruby usage (internal function)
|
1889
1847
|
*
|
1890
|
-
* @
|
1848
|
+
* @param io An IO object
|
1849
|
+
* @return string of the path
|
1891
1850
|
*/
|
1892
|
-
|
1893
|
-
|
1851
|
+
VALUE
|
1852
|
+
rm_io_path(VALUE io)
|
1894
1853
|
{
|
1895
|
-
#
|
1896
|
-
return (
|
1854
|
+
#ifdef HAVE_RB_IO_PATH
|
1855
|
+
return rb_io_path(io);
|
1897
1856
|
#else
|
1898
|
-
|
1857
|
+
rb_io_t *fptr;
|
1858
|
+
GetOpenFile(io, fptr);
|
1859
|
+
return fptr->pathv;
|
1899
1860
|
#endif
|
1900
1861
|
}
|
data/lib/rmagick/version.rb
CHANGED
data/lib/rmagick.rb
CHANGED
data/lib/rmagick_internal.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# $Id: RMagick.rb,v 1.84 2009/09/15 22:08:41 rmagick Exp $
|
2
4
|
#==============================================================================
|
3
5
|
# Copyright (C) 2009 by Timothy P. Hunter
|
@@ -12,7 +14,7 @@ if RUBY_PLATFORM =~ /mingw/i
|
|
12
14
|
begin
|
13
15
|
require 'ruby_installer'
|
14
16
|
ENV['PATH'].split(File::PATH_SEPARATOR).grep(/ImageMagick/i).each do |path|
|
15
|
-
RubyInstaller::Runtime.add_dll_directory(path)
|
17
|
+
RubyInstaller::Runtime.add_dll_directory(path) if File.exist?(File.join(path, 'CORE_RL_magick_.dll')) || File.exist?(File.join(path, 'CORE_RL_MagickCore_.dll'))
|
16
18
|
end
|
17
19
|
rescue LoadError
|
18
20
|
end
|
@@ -23,9 +25,6 @@ require 'observer'
|
|
23
25
|
require 'RMagick2.so'
|
24
26
|
|
25
27
|
module Magick
|
26
|
-
@formats = nil
|
27
|
-
@trace_proc = nil
|
28
|
-
@exit_block_set_up = nil
|
29
28
|
IMAGEMAGICK_VERSION = Magick::Magick_version.split[1].split('-').first
|
30
29
|
|
31
30
|
class << self
|
@@ -53,45 +52,13 @@ module Magick
|
|
53
52
|
# => {"3FR"=>" r-+", "3G2"=>" r-+", "3GP"=>" r-+", "A"=>"*rw+",
|
54
53
|
# ...
|
55
54
|
def formats
|
56
|
-
|
55
|
+
formats = init_formats
|
57
56
|
|
58
57
|
if block_given?
|
59
|
-
|
58
|
+
formats.each { |k, v| yield k, v }
|
60
59
|
self
|
61
60
|
else
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# If the Magick module attribute +trace_proc+ is set to a Proc object,
|
67
|
-
# RMagick calls the proc whenever an image is created or destroyed.
|
68
|
-
#
|
69
|
-
# You can use this proc to keep track of which images your program has created
|
70
|
-
# and which have been destroyed.
|
71
|
-
#
|
72
|
-
# @param p [Proc] The proc object.
|
73
|
-
# The following value will be passed into the proc object.
|
74
|
-
# - +which+ - A symbol that indicates which operation the proc is being called for.
|
75
|
-
# If the proc is called for an image creation, the value is +:c+.
|
76
|
-
# If called for an image destruction, the value is +:d+.
|
77
|
-
# - +description+ - A string describing the image. This is the same string that
|
78
|
-
# would be returned by calling the image's inspect method.
|
79
|
-
# - +id+ - A unique identifier for the image. This identifier is not the same as the object's +object_id+.
|
80
|
-
# - +method+ - The name of the method responsible for creating or destroying the image.
|
81
|
-
#
|
82
|
-
# @example
|
83
|
-
# Magick.trace_proc = proc do |which, description, id, method|
|
84
|
-
# ...
|
85
|
-
# end
|
86
|
-
def trace_proc=(p)
|
87
|
-
m = Mutex.new
|
88
|
-
m.synchronize do
|
89
|
-
if @trace_proc.nil? && !p.nil? && !@exit_block_set_up
|
90
|
-
at_exit { @trace_proc = nil }
|
91
|
-
@exit_block_set_up = true
|
92
|
-
end
|
93
|
-
|
94
|
-
@trace_proc = p
|
61
|
+
formats
|
95
62
|
end
|
96
63
|
end
|
97
64
|
end
|
@@ -109,7 +76,7 @@ module Magick
|
|
109
76
|
MinimumGeometry = GeometryValue.new(:MinimumGeometry, 6).freeze
|
110
77
|
|
111
78
|
class Geometry
|
112
|
-
FLAGS = ['', '%', '!', '<', '>', '@', '^']
|
79
|
+
FLAGS = ['', '%', '!', '<', '>', '@', '^'].freeze
|
113
80
|
RFLAGS = {
|
114
81
|
'%' => PercentGeometry,
|
115
82
|
'!' => AspectGeometry,
|
@@ -117,7 +84,7 @@ module Magick
|
|
117
84
|
'>' => GreaterGeometry,
|
118
85
|
'@' => AreaGeometry,
|
119
86
|
'^' => MinimumGeometry
|
120
|
-
}
|
87
|
+
}.freeze
|
121
88
|
|
122
89
|
attr_accessor :width, :height, :x, :y, :flag
|
123
90
|
|
@@ -173,7 +140,7 @@ module Magick
|
|
173
140
|
|
174
141
|
# Convert object to a geometry string
|
175
142
|
def to_s
|
176
|
-
str =
|
143
|
+
str = String.new
|
177
144
|
if @width > 0
|
178
145
|
fmt = @width.truncate == @width ? '%d' : '%.2f'
|
179
146
|
str << sprintf(fmt, @width)
|
@@ -804,12 +771,6 @@ module Magick
|
|
804
771
|
module Post_ObjectData_Descriptor
|
805
772
|
Confirmed_ObjectData_Size = '9:10'
|
806
773
|
end
|
807
|
-
|
808
|
-
# Make all constants above immutable
|
809
|
-
constants.each do |record|
|
810
|
-
rec = const_get(record)
|
811
|
-
rec.constants.each { |ds| rec.const_get(ds).freeze }
|
812
|
-
end
|
813
774
|
end # module Magick::IPTC
|
814
775
|
|
815
776
|
# Ruby-level Magick::Image methods
|
data/lib/rvg/rvg.rb
CHANGED
@@ -85,7 +85,7 @@ module Magick
|
|
85
85
|
@background_image.change_geometry(Magick::Geometry.new(width, height)) do |new_cols, new_rows|
|
86
86
|
bg_image = @background_image.resize(new_cols, new_rows)
|
87
87
|
if bg_image.columns != width || bg_image.rows != height
|
88
|
-
bg = Magick::Image.new(width, height) {
|
88
|
+
bg = Magick::Image.new(width, height) { |options| options.background_color = bgcolor }
|
89
89
|
bg_image = bg.composite!(bg_image, Magick::CenterGravity, Magick::OverCompositeOp)
|
90
90
|
end
|
91
91
|
bg_image
|
@@ -96,7 +96,7 @@ module Magick
|
|
96
96
|
end
|
97
97
|
else
|
98
98
|
bgcolor = bgfill
|
99
|
-
canvas = Magick::Image.new(Integer(@width), Integer(@height)) {
|
99
|
+
canvas = Magick::Image.new(Integer(@width), Integer(@height)) { |options| options.background_color = bgcolor }
|
100
100
|
end
|
101
101
|
canvas[:desc] = @desc if @desc
|
102
102
|
canvas[:title] = @title if @title
|
data/rmagick.gemspec
CHANGED
@@ -15,21 +15,22 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
tracked_files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
17
17
|
file_exclusion_regex = %r{\A(doc|benchmarks|examples|spec|lib/rvg/to_c.rb)}
|
18
|
-
files
|
19
|
-
test_files = files.grep(%r{^(test|spec|features)/})
|
18
|
+
files = tracked_files.reject { |file| file[file_exclusion_regex] }
|
20
19
|
|
21
|
-
s.files
|
22
|
-
s.
|
23
|
-
s.require_paths << 'ext' << 'deprecated'
|
20
|
+
s.files = files
|
21
|
+
s.require_paths << 'ext'
|
24
22
|
|
25
23
|
s.extensions = %w[ext/RMagick/extconf.rb]
|
26
24
|
s.required_ruby_version = ">= #{Magick::MIN_RUBY_VERSION}"
|
27
25
|
s.requirements << "ImageMagick #{Magick::MIN_IM_VERSION} or later"
|
28
26
|
|
29
|
-
s.
|
27
|
+
s.add_runtime_dependency 'pkg-config', '~> 1.4'
|
28
|
+
s.add_runtime_dependency 'observer', '~> 0.1'
|
29
|
+
|
30
|
+
s.add_development_dependency 'pry', '~> 0.14'
|
30
31
|
s.add_development_dependency 'rake-compiler', '~> 1.0'
|
31
32
|
s.add_development_dependency 'rspec', '~> 3.8'
|
32
|
-
s.add_development_dependency 'rspec_junit_formatter', '~> 0.
|
33
|
+
s.add_development_dependency 'rspec_junit_formatter', '~> 0.6.0'
|
33
34
|
if RUBY_PLATFORM !~ /mswin|mingw/
|
34
35
|
s.add_development_dependency 'rubocop', '~> 0.81.0'
|
35
36
|
s.add_development_dependency 'rubocop-rspec', '~> 1.38.1'
|
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: 4.
|
4
|
+
version: 5.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Hunter
|
@@ -11,22 +11,50 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2024-02-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: pkg-config
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.4'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.4'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: observer
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0.1'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0.1'
|
16
44
|
- !ruby/object:Gem::Dependency
|
17
45
|
name: pry
|
18
46
|
requirement: !ruby/object:Gem::Requirement
|
19
47
|
requirements:
|
20
48
|
- - "~>"
|
21
49
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
50
|
+
version: '0.14'
|
23
51
|
type: :development
|
24
52
|
prerelease: false
|
25
53
|
version_requirements: !ruby/object:Gem::Requirement
|
26
54
|
requirements:
|
27
55
|
- - "~>"
|
28
56
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
57
|
+
version: '0.14'
|
30
58
|
- !ruby/object:Gem::Dependency
|
31
59
|
name: rake-compiler
|
32
60
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,14 +89,14 @@ dependencies:
|
|
61
89
|
requirements:
|
62
90
|
- - "~>"
|
63
91
|
- !ruby/object:Gem::Version
|
64
|
-
version: 0.
|
92
|
+
version: 0.6.0
|
65
93
|
type: :development
|
66
94
|
prerelease: false
|
67
95
|
version_requirements: !ruby/object:Gem::Requirement
|
68
96
|
requirements:
|
69
97
|
- - "~>"
|
70
98
|
- !ruby/object:Gem::Version
|
71
|
-
version: 0.
|
99
|
+
version: 0.6.0
|
72
100
|
- !ruby/object:Gem::Dependency
|
73
101
|
name: rubocop
|
74
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,7 +174,11 @@ extensions:
|
|
146
174
|
- ext/RMagick/extconf.rb
|
147
175
|
extra_rdoc_files: []
|
148
176
|
files:
|
149
|
-
- ".
|
177
|
+
- ".devcontainer/Dockerfile"
|
178
|
+
- ".devcontainer/ImageMagick6/devcontainer.json"
|
179
|
+
- ".devcontainer/devcontainer.json"
|
180
|
+
- ".devcontainer/setup-repo.sh"
|
181
|
+
- ".devcontainer/setup-user.sh"
|
150
182
|
- ".editorconfig"
|
151
183
|
- ".github/ISSUE_TEMPLATE.md"
|
152
184
|
- ".github/workflows/ci.yml"
|
@@ -164,22 +196,22 @@ files:
|
|
164
196
|
- Rakefile
|
165
197
|
- before_install_linux.sh
|
166
198
|
- before_install_osx.sh
|
167
|
-
- deprecated/RMagick.rb
|
168
199
|
- ext/RMagick/extconf.rb
|
169
|
-
- ext/RMagick/rmagick.
|
200
|
+
- ext/RMagick/rmagick.cpp
|
170
201
|
- ext/RMagick/rmagick.h
|
171
|
-
- ext/RMagick/
|
172
|
-
- ext/RMagick/
|
173
|
-
- ext/RMagick/
|
174
|
-
- ext/RMagick/
|
175
|
-
- ext/RMagick/
|
176
|
-
- ext/RMagick/
|
177
|
-
- ext/RMagick/
|
178
|
-
- ext/RMagick/
|
179
|
-
- ext/RMagick/
|
180
|
-
- ext/RMagick/
|
181
|
-
- ext/RMagick/
|
182
|
-
- ext/RMagick/
|
202
|
+
- ext/RMagick/rmagick_gvl.h
|
203
|
+
- ext/RMagick/rmdraw.cpp
|
204
|
+
- ext/RMagick/rmenum.cpp
|
205
|
+
- ext/RMagick/rmfill.cpp
|
206
|
+
- ext/RMagick/rmilist.cpp
|
207
|
+
- ext/RMagick/rmimage.cpp
|
208
|
+
- ext/RMagick/rminfo.cpp
|
209
|
+
- ext/RMagick/rmkinfo.cpp
|
210
|
+
- ext/RMagick/rmmain.cpp
|
211
|
+
- ext/RMagick/rmmontage.cpp
|
212
|
+
- ext/RMagick/rmpixel.cpp
|
213
|
+
- ext/RMagick/rmstruct.cpp
|
214
|
+
- ext/RMagick/rmutil.cpp
|
183
215
|
- lib/rmagick.rb
|
184
216
|
- lib/rmagick/version.rb
|
185
217
|
- lib/rmagick_internal.rb
|
@@ -207,7 +239,6 @@ rdoc_options: []
|
|
207
239
|
require_paths:
|
208
240
|
- lib
|
209
241
|
- ext
|
210
|
-
- deprecated
|
211
242
|
required_ruby_version: !ruby/object:Gem::Requirement
|
212
243
|
requirements:
|
213
244
|
- - ">="
|
@@ -220,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
251
|
version: '0'
|
221
252
|
requirements:
|
222
253
|
- ImageMagick 6.7.7 or later
|
223
|
-
rubygems_version: 3.
|
254
|
+
rubygems_version: 3.4.10
|
224
255
|
signing_key:
|
225
256
|
specification_version: 4
|
226
257
|
summary: Ruby binding to ImageMagick
|
data/.codeclimate.yml
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
engines:
|
2
|
-
cppcheck:
|
3
|
-
enabled: true
|
4
|
-
checks:
|
5
|
-
variableScope:
|
6
|
-
enabled: false
|
7
|
-
toomanyconfigs:
|
8
|
-
enabled: false
|
9
|
-
invalidPrintfArgType_sint:
|
10
|
-
enabled: false
|
11
|
-
redundantAssignment:
|
12
|
-
enabled: false
|
13
|
-
selfAssignment:
|
14
|
-
enabled: false
|
15
|
-
unreachableCode:
|
16
|
-
enabled: false
|
17
|
-
unsignedLessThanZero:
|
18
|
-
enabled: false
|
19
|
-
toomanyconfigs:
|
20
|
-
enabled: false
|
21
|
-
complex-definition:
|
22
|
-
enabled: false
|
23
|
-
|
24
|
-
markdownlint:
|
25
|
-
enabled: true
|
26
|
-
checks:
|
27
|
-
# Line length
|
28
|
-
MD013:
|
29
|
-
enabled: false
|
30
|
-
# Emphasis used instead of a header
|
31
|
-
MD036:
|
32
|
-
enabled: false
|
33
|
-
# Hard tabs
|
34
|
-
MD010:
|
35
|
-
enabled: false
|
36
|
-
# Dollar signs used before commands without showing output
|
37
|
-
MD014:
|
38
|
-
enabled: false
|
39
|
-
# Headers should be surrounded by blank lines
|
40
|
-
MD022:
|
41
|
-
enabled: false
|
42
|
-
# Multiple consecutive blank lines
|
43
|
-
MD012:
|
44
|
-
enabled: false
|
45
|
-
# Bare URL used
|
46
|
-
MD034:
|
47
|
-
enabled: false
|
48
|
-
# Ordered list item prefix
|
49
|
-
MD029:
|
50
|
-
enabled: false
|
51
|
-
# Lists should be surrounded by blank lines
|
52
|
-
MD032:
|
53
|
-
enabled: false
|
54
|
-
# Code block style
|
55
|
-
MD046:
|
56
|
-
enabled: false
|
57
|
-
# Header style
|
58
|
-
MD003:
|
59
|
-
enabled: false
|
60
|
-
# Spaces after list markers
|
61
|
-
MD030:
|
62
|
-
enabled: false
|
63
|
-
|