rmagick 4.2.5 → 5.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +14 -0
  3. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  4. data/.devcontainer/devcontainer.json +11 -0
  5. data/.devcontainer/setup-repo.sh +10 -0
  6. data/.devcontainer/setup-user.sh +45 -0
  7. data/.editorconfig +1 -1
  8. data/.github/workflows/ci.yml +90 -9
  9. data/.gitignore +4 -0
  10. data/.rubocop_todo.yml +16 -9
  11. data/.yardopts +1 -1
  12. data/CHANGELOG.md +141 -0
  13. data/Gemfile +20 -0
  14. data/README.md +12 -17
  15. data/Rakefile +63 -80
  16. data/before_install_linux.sh +4 -4
  17. data/before_install_osx.sh +7 -6
  18. data/ext/RMagick/extconf.rb +113 -52
  19. data/ext/RMagick/{rmagick.c → rmagick.cpp} +19 -22
  20. data/ext/RMagick/rmagick.h +88 -59
  21. data/ext/RMagick/rmagick_gvl.h +224 -0
  22. data/ext/RMagick/{rmdraw.c → rmdraw.cpp} +170 -159
  23. data/ext/RMagick/{rmenum.c → rmenum.cpp} +69 -50
  24. data/ext/RMagick/{rmfill.c → rmfill.cpp} +85 -24
  25. data/ext/RMagick/{rmilist.c → rmilist.cpp} +191 -93
  26. data/ext/RMagick/{rmimage.c → rmimage.cpp} +1544 -989
  27. data/ext/RMagick/{rminfo.c → rminfo.cpp} +140 -152
  28. data/ext/RMagick/{rmkinfo.c → rmkinfo.cpp} +46 -34
  29. data/ext/RMagick/rmmain.cpp +1923 -0
  30. data/ext/RMagick/{rmmontage.c → rmmontage.cpp} +50 -29
  31. data/ext/RMagick/{rmpixel.c → rmpixel.cpp} +108 -83
  32. data/ext/RMagick/{rmstruct.c → rmstruct.cpp} +6 -6
  33. data/ext/RMagick/{rmutil.c → rmutil.cpp} +62 -161
  34. data/lib/rmagick/version.rb +3 -1
  35. data/lib/rmagick.rb +2 -0
  36. data/lib/rmagick_internal.rb +76 -110
  37. data/lib/rvg/embellishable.rb +6 -2
  38. data/lib/rvg/misc.rb +7 -7
  39. data/lib/rvg/rvg.rb +2 -0
  40. data/lib/rvg/stretchable.rb +2 -2
  41. data/lib/rvg/transformable.rb +1 -1
  42. data/rmagick.gemspec +6 -17
  43. data/sig/rmagick/_draw_common_methods.rbs +64 -0
  44. data/sig/rmagick/_image_common_methods.rbs +389 -0
  45. data/sig/rmagick/draw.rbs +38 -0
  46. data/sig/rmagick/draw_attribute.rbs +28 -0
  47. data/sig/rmagick/enum.rbs +814 -0
  48. data/sig/rmagick/error.rbs +11 -0
  49. data/sig/rmagick/fill.rbs +21 -0
  50. data/sig/rmagick/geometry.rbs +14 -0
  51. data/sig/rmagick/image.rbs +194 -0
  52. data/sig/rmagick/image_list.rbs +181 -0
  53. data/sig/rmagick/iptc.rbs +101 -0
  54. data/sig/rmagick/kernel_info.rbs +12 -0
  55. data/sig/rmagick/optional_method_arguments.rbs +10 -0
  56. data/sig/rmagick/pixel.rbs +46 -0
  57. data/sig/rmagick/struct.rbs +90 -0
  58. data/sig/rmagick.rbs +43 -0
  59. data/sig/rvg/clippath.rbs +34 -0
  60. data/sig/rvg/container.rbs +78 -0
  61. data/sig/rvg/deep_equal.rbs +48 -0
  62. data/sig/rvg/describable.rbs +30 -0
  63. data/sig/rvg/embellishable.rbs +226 -0
  64. data/sig/rvg/misc.rbs +145 -0
  65. data/sig/rvg/paint.rbs +55 -0
  66. data/sig/rvg/pathdata.rbs +77 -0
  67. data/sig/rvg/rvg.rbs +125 -0
  68. data/sig/rvg/stretchable.rbs +56 -0
  69. data/sig/rvg/stylable.rbs +66 -0
  70. data/sig/rvg/text.rbs +118 -0
  71. data/sig/rvg/transformable.rbs +59 -0
  72. data/sig/rvg/units.rbs +33 -0
  73. metadata +63 -128
  74. data/.codeclimate.yml +0 -63
  75. data/deprecated/RMagick.rb +0 -6
  76. 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 rmpixel.c
9
- * @version $Id: rmpixel.c,v 1.7 2009/12/21 10:34:58 baror Exp $
8
+ * @file rmpixel.cpp
9
+ * @version $Id: rmpixel.cpp,v 1.7 2009/12/21 10:34:58 baror Exp $
10
10
  * @author Tim Hunter
11
11
  ******************************************************************************/
12
12
 
@@ -19,6 +19,15 @@
19
19
 
20
20
  static VALUE color_arg_rescue(VALUE, VALUE ATTRIBUTE_UNUSED) ATTRIBUTE_NORETURN;
21
21
  static void Color_Name_to_PixelColor(PixelColor *, VALUE);
22
+ static void Pixel_destroy(void *);
23
+ static size_t Pixel_memsize(const void *);
24
+
25
+ const rb_data_type_t rm_pixel_data_type = {
26
+ "Magick::Pixel",
27
+ { NULL, Pixel_destroy, Pixel_memsize, },
28
+ 0, 0,
29
+ RUBY_TYPED_FROZEN_SHAREABLE,
30
+ };
22
31
 
23
32
 
24
33
  /**
@@ -26,15 +35,30 @@ static void Color_Name_to_PixelColor(PixelColor *, VALUE);
26
35
  *
27
36
  * No Ruby usage (internal function)
28
37
  *
29
- * @param pixel the Pixel object to destroy
38
+ * @param ptr the Pixel object to destroy
30
39
  */
31
- void
32
- destroy_Pixel(Pixel *pixel)
40
+ static void
41
+ Pixel_destroy(void *ptr)
33
42
  {
43
+ Pixel *pixel = (Pixel *)ptr;
34
44
  xfree(pixel);
35
45
  }
36
46
 
37
47
 
48
+ /**
49
+ * Get Pixel object size.
50
+ *
51
+ * No Ruby usage (internal function)
52
+ *
53
+ * @param ptr pointer to the Pixel object
54
+ */
55
+ static size_t
56
+ Pixel_memsize(const void *ptr)
57
+ {
58
+ return sizeof(Pixel);
59
+ }
60
+
61
+
38
62
  /**
39
63
  * Get Pixel red value.
40
64
  *
@@ -43,7 +67,7 @@ destroy_Pixel(Pixel *pixel)
43
67
  VALUE
44
68
  Pixel_red(VALUE self)
45
69
  {
46
- IMPLEMENT_ATTR_READER(Pixel, red, int);
70
+ IMPLEMENT_TYPED_ATTR_READER(Pixel, red, int, &rm_pixel_data_type);
47
71
  }
48
72
 
49
73
  /**
@@ -54,7 +78,7 @@ Pixel_red(VALUE self)
54
78
  VALUE
55
79
  Pixel_green(VALUE self)
56
80
  {
57
- IMPLEMENT_ATTR_READER(Pixel, green, int);
81
+ IMPLEMENT_TYPED_ATTR_READER(Pixel, green, int, &rm_pixel_data_type);
58
82
  }
59
83
 
60
84
  /**
@@ -65,7 +89,7 @@ Pixel_green(VALUE self)
65
89
  VALUE
66
90
  Pixel_blue(VALUE self)
67
91
  {
68
- IMPLEMENT_ATTR_READER(Pixel, blue, int);
92
+ IMPLEMENT_TYPED_ATTR_READER(Pixel, blue, int, &rm_pixel_data_type);
69
93
  }
70
94
 
71
95
  /**
@@ -77,7 +101,7 @@ VALUE
77
101
  Pixel_alpha(VALUE self)
78
102
  {
79
103
  Pixel *pixel;
80
- Data_Get_Struct(self, Pixel, pixel);
104
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
81
105
  #if defined(IMAGEMAGICK_7)
82
106
  return C_int_to_R_int(pixel->alpha);
83
107
  #else
@@ -102,7 +126,7 @@ Pixel_red_eq(VALUE self, VALUE v)
102
126
  Pixel *pixel;
103
127
 
104
128
  rb_check_frozen(self);
105
- Data_Get_Struct(self, Pixel, pixel);
129
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
106
130
  pixel->red = APP2QUANTUM(v);
107
131
  rb_funcall(self, rm_ID_changed, 0);
108
132
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -126,7 +150,7 @@ Pixel_green_eq(VALUE self, VALUE v)
126
150
  Pixel *pixel;
127
151
 
128
152
  rb_check_frozen(self);
129
- Data_Get_Struct(self, Pixel, pixel);
153
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
130
154
  pixel->green = APP2QUANTUM(v);
131
155
  rb_funcall(self, rm_ID_changed, 0);
132
156
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -150,7 +174,7 @@ Pixel_blue_eq(VALUE self, VALUE v)
150
174
  Pixel *pixel;
151
175
 
152
176
  rb_check_frozen(self);
153
- Data_Get_Struct(self, Pixel, pixel);
177
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
154
178
  pixel->blue = APP2QUANTUM(v);
155
179
  rb_funcall(self, rm_ID_changed, 0);
156
180
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -174,7 +198,7 @@ Pixel_alpha_eq(VALUE self, VALUE v)
174
198
  Pixel *pixel;
175
199
 
176
200
  rb_check_frozen(self);
177
- Data_Get_Struct(self, Pixel, pixel);
201
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
178
202
  #if defined(IMAGEMAGICK_7)
179
203
  pixel->alpha = APP2QUANTUM(v);
180
204
  rb_funcall(self, rm_ID_changed, 0);
@@ -198,7 +222,7 @@ Pixel_cyan(VALUE self)
198
222
  {
199
223
  Pixel *pixel;
200
224
 
201
- Data_Get_Struct(self, Pixel, pixel);
225
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
202
226
  return INT2NUM(pixel->red);
203
227
  }
204
228
 
@@ -219,7 +243,7 @@ Pixel_cyan_eq(VALUE self, VALUE v)
219
243
  Pixel *pixel;
220
244
 
221
245
  rb_check_frozen(self);
222
- Data_Get_Struct(self, Pixel, pixel);
246
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
223
247
  pixel->red = APP2QUANTUM(v);
224
248
  rb_funcall(self, rm_ID_changed, 0);
225
249
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -236,7 +260,7 @@ Pixel_magenta(VALUE self)
236
260
  {
237
261
  Pixel *pixel;
238
262
 
239
- Data_Get_Struct(self, Pixel, pixel);
263
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
240
264
  return INT2NUM(pixel->green);
241
265
  }
242
266
 
@@ -257,7 +281,7 @@ Pixel_magenta_eq(VALUE self, VALUE v)
257
281
  Pixel *pixel;
258
282
 
259
283
  rb_check_frozen(self);
260
- Data_Get_Struct(self, Pixel, pixel);
284
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
261
285
  pixel->green = APP2QUANTUM(v);
262
286
  rb_funcall(self, rm_ID_changed, 0);
263
287
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -274,7 +298,7 @@ Pixel_yellow(VALUE self)
274
298
  {
275
299
  Pixel *pixel;
276
300
 
277
- Data_Get_Struct(self, Pixel, pixel);
301
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
278
302
  return INT2NUM(pixel->blue);
279
303
  }
280
304
 
@@ -295,7 +319,7 @@ Pixel_yellow_eq(VALUE self, VALUE v)
295
319
  Pixel *pixel;
296
320
 
297
321
  rb_check_frozen(self);
298
- Data_Get_Struct(self, Pixel, pixel);
322
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
299
323
  pixel->blue = APP2QUANTUM(v);
300
324
  rb_funcall(self, rm_ID_changed, 0);
301
325
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -312,7 +336,7 @@ Pixel_black(VALUE self)
312
336
  {
313
337
  Pixel *pixel;
314
338
 
315
- Data_Get_Struct(self, Pixel, pixel);
339
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
316
340
  return INT2NUM(pixel->black);
317
341
  }
318
342
 
@@ -333,7 +357,7 @@ Pixel_black_eq(VALUE self, VALUE v)
333
357
  Pixel *pixel;
334
358
 
335
359
  rb_check_frozen(self);
336
- Data_Get_Struct(self, Pixel, pixel);
360
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
337
361
  pixel->black = APP2QUANTUM(v);
338
362
  rb_funcall(self, rm_ID_changed, 0);
339
363
  rb_funcall(self, rm_ID_notify_observers, 1, self);
@@ -376,7 +400,7 @@ Color_to_PixelColor(PixelColor *pp, VALUE color)
376
400
  if (CLASS_OF(color) == Class_Pixel)
377
401
  {
378
402
  memset(pp, 0, sizeof(*pp));
379
- Data_Get_Struct(color, Pixel, pixel);
403
+ TypedData_Get_Struct(color, Pixel, &rm_pixel_data_type, pixel);
380
404
  pp->red = pixel->red;
381
405
  pp->green = pixel->green;
382
406
  pp->blue = pixel->blue;
@@ -390,7 +414,7 @@ Color_to_PixelColor(PixelColor *pp, VALUE color)
390
414
  else
391
415
  {
392
416
  // require 'to_str' here instead of just 'to_s'.
393
- color = rb_rescue(rb_str_to_str, color, color_arg_rescue, color);
417
+ color = rb_rescue(RESCUE_FUNC(rb_str_to_str), color, RESCUE_EXCEPTION_HANDLER_FUNC(color_arg_rescue), color);
394
418
  Color_Name_to_PixelColor(pp, color);
395
419
  }
396
420
  }
@@ -415,7 +439,7 @@ Color_to_Pixel(Pixel *pp, VALUE color)
415
439
  {
416
440
  Pixel *pixel;
417
441
 
418
- Data_Get_Struct(color, Pixel, pixel);
442
+ TypedData_Get_Struct(color, Pixel, &rm_pixel_data_type, pixel);
419
443
  memcpy(pp, pixel, sizeof(Pixel));
420
444
  }
421
445
  else
@@ -468,13 +492,13 @@ Color_Name_to_PixelColor(PixelColor *color, VALUE name_arg)
468
492
  * @return [Magick::Pixel] a new Magick::Pixel object
469
493
  */
470
494
  VALUE
471
- Pixel_alloc(VALUE class)
495
+ Pixel_alloc(VALUE klass)
472
496
  {
473
497
  Pixel *pixel;
474
498
 
475
499
  pixel = ALLOC(Pixel);
476
500
  memset(pixel, '\0', sizeof(Pixel));
477
- return Data_Wrap_Struct(class, NULL, destroy_Pixel, pixel);
501
+ return TypedData_Wrap_Struct(klass, &rm_pixel_data_type, pixel);
478
502
  }
479
503
 
480
504
 
@@ -490,17 +514,17 @@ Pixel_case_eq(VALUE self, VALUE other)
490
514
  {
491
515
  if (CLASS_OF(self) == CLASS_OF(other))
492
516
  {
493
- Pixel *this, *that;
517
+ Pixel *self_pixel, *other_pixel;
494
518
 
495
- Data_Get_Struct(self, Pixel, this);
496
- Data_Get_Struct(other, Pixel, that);
497
- return (this->red == that->red
498
- && this->blue == that->blue
499
- && this->green == that->green
519
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, self_pixel);
520
+ TypedData_Get_Struct(other, Pixel, &rm_pixel_data_type, other_pixel);
521
+ return (self_pixel->red == other_pixel->red
522
+ && self_pixel->blue == other_pixel->blue
523
+ && self_pixel->green == other_pixel->green
500
524
  #if defined(IMAGEMAGICK_7)
501
- && this->alpha == that->alpha) ? Qtrue : Qfalse;
525
+ && self_pixel->alpha == other_pixel->alpha) ? Qtrue : Qfalse;
502
526
  #else
503
- && this->opacity == that->opacity) ? Qtrue : Qfalse;
527
+ && self_pixel->opacity == other_pixel->opacity) ? Qtrue : Qfalse;
504
528
  #endif
505
529
  }
506
530
 
@@ -547,7 +571,7 @@ Pixel_dup(VALUE self)
547
571
 
548
572
  pixel = ALLOC(Pixel);
549
573
  memset(pixel, '\0', sizeof(Pixel));
550
- dup = Data_Wrap_Struct(CLASS_OF(self), NULL, destroy_Pixel, pixel);
574
+ dup = TypedData_Wrap_Struct(CLASS_OF(self), &rm_pixel_data_type, pixel);
551
575
  RB_GC_GUARD(dup);
552
576
 
553
577
  return rb_funcall(dup, rm_ID_initialize_copy, 1, self);
@@ -571,8 +595,8 @@ Pixel_eql_q(VALUE self, VALUE other)
571
595
  * Compare pixel values for equality.
572
596
  *
573
597
  * @overload fcmp(other, fuzz = 0.0, colorspace = Magick::RGBColorspace)
574
- * @param other [Magick::Pixel] The pixel to which the receiver is compared
575
- * @param fuzz [Float] The amount of fuzz to allow before the colors are considered to be different
598
+ * @param other [Magick::Pixel, String] The pixel to which the receiver is compared
599
+ * @param fuzz [Numeric] The amount of fuzz to allow before the colors are considered to be different
576
600
  * @param colorspace [Magick::ColorspaceType] The colorspace
577
601
  * @return [Boolean] true if equal, otherwise false
578
602
  */
@@ -582,7 +606,7 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
582
606
  double fuzz = 0.0;
583
607
  unsigned int equal;
584
608
  ColorspaceType colorspace = RGBColorspace;
585
- PixelColor this, that;
609
+ PixelColor self_pixel_color, other_pixel_color;
586
610
  #if defined(IMAGEMAGICK_6)
587
611
  Image *image;
588
612
  Info *info;
@@ -602,15 +626,15 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
602
626
  break;
603
627
  }
604
628
 
605
- Color_to_PixelColor(&this, self);
606
- Color_to_PixelColor(&that, argv[0]);
629
+ Color_to_PixelColor(&self_pixel_color, self);
630
+ Color_to_PixelColor(&other_pixel_color, argv[0]);
607
631
 
608
632
  #if defined(IMAGEMAGICK_7)
609
- this.fuzz = fuzz;
610
- this.colorspace = colorspace;
611
- that.fuzz = fuzz;
612
- that.colorspace = colorspace;
613
- equal = IsFuzzyEquivalencePixelInfo(&this, &that);
633
+ self_pixel_color.fuzz = fuzz;
634
+ self_pixel_color.colorspace = colorspace;
635
+ other_pixel_color.fuzz = fuzz;
636
+ other_pixel_color.colorspace = colorspace;
637
+ equal = IsFuzzyEquivalencePixelInfo(&self_pixel_color, &other_pixel_color);
614
638
  #else
615
639
  // The IsColorSimilar function expects to get the
616
640
  // colorspace and fuzz parameters from an Image structure.
@@ -634,7 +658,7 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
634
658
  image->colorspace = colorspace;
635
659
  image->fuzz = fuzz;
636
660
 
637
- equal = IsColorSimilar(image, &this, &that);
661
+ equal = IsColorSimilar(image, &self_pixel_color, &other_pixel_color);
638
662
  DestroyImage(image);
639
663
  #endif
640
664
 
@@ -655,7 +679,7 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
655
679
  * @see Magick::Pixel#to_color
656
680
  */
657
681
  VALUE
658
- Pixel_from_color(VALUE class ATTRIBUTE_UNUSED, VALUE name)
682
+ Pixel_from_color(VALUE klass ATTRIBUTE_UNUSED, VALUE name)
659
683
  {
660
684
  PixelColor pp;
661
685
  ExceptionInfo *exception;
@@ -687,11 +711,11 @@ Pixel_from_color(VALUE class ATTRIBUTE_UNUSED, VALUE name)
687
711
  * @param hue [Numeric, String] A value in the range.
688
712
  * @param saturation [Numeric, String] A value in the range.
689
713
  * @param lightness [Numeric, String] A value in the range.
690
- * @param alpha [Numeric] The alpha value.
714
+ * @param alpha [Numeric, String] The alpha value.
691
715
  * @return [Magick::Pixel] a new Magick::Pixel object
692
716
  */
693
717
  VALUE
694
- Pixel_from_hsla(int argc, VALUE *argv, VALUE class ATTRIBUTE_UNUSED)
718
+ Pixel_from_hsla(int argc, VALUE *argv, VALUE klass ATTRIBUTE_UNUSED)
695
719
  {
696
720
  double h, s, l, a = 1.0;
697
721
  MagickPixel pp;
@@ -785,7 +809,7 @@ Pixel_from_MagickPixel(const MagickPixel *pp)
785
809
  #endif
786
810
  pixel->black = pp->index;
787
811
 
788
- return Data_Wrap_Struct(Class_Pixel, NULL, destroy_Pixel, pixel);
812
+ return TypedData_Wrap_Struct(Class_Pixel, &rm_pixel_data_type, pixel);
789
813
  }
790
814
 
791
815
 
@@ -817,7 +841,7 @@ Pixel_from_PixelPacket(const PixelPacket *pp)
817
841
  pixel->black = 0;
818
842
  #endif
819
843
 
820
- return Data_Wrap_Struct(Class_Pixel, NULL, destroy_Pixel, pixel);
844
+ return TypedData_Wrap_Struct(Class_Pixel, &rm_pixel_data_type, pixel);
821
845
  }
822
846
 
823
847
 
@@ -849,7 +873,7 @@ Pixel_from_PixelColor(const PixelColor *pp)
849
873
  pixel->black = 0;
850
874
  #endif
851
875
 
852
- return Data_Wrap_Struct(Class_Pixel, NULL, destroy_Pixel, pixel);
876
+ return TypedData_Wrap_Struct(Class_Pixel, &rm_pixel_data_type, pixel);
853
877
  }
854
878
 
855
879
 
@@ -864,7 +888,7 @@ Pixel_hash(VALUE self)
864
888
  Pixel *pixel;
865
889
  unsigned int hash;
866
890
 
867
- Data_Get_Struct(self, Pixel, pixel);
891
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
868
892
 
869
893
  hash = ScaleQuantumToChar(pixel->red) << 24;
870
894
  hash += ScaleQuantumToChar(pixel->green) << 16;
@@ -892,8 +916,8 @@ Pixel_init_copy(VALUE self, VALUE orig)
892
916
  {
893
917
  Pixel *copy, *original;
894
918
 
895
- Data_Get_Struct(orig, Pixel, original);
896
- Data_Get_Struct(self, Pixel, copy);
919
+ TypedData_Get_Struct(orig, Pixel, &rm_pixel_data_type, original);
920
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, copy);
897
921
 
898
922
  *copy = *original;
899
923
 
@@ -916,7 +940,7 @@ Pixel_initialize(int argc, VALUE *argv, VALUE self)
916
940
  {
917
941
  Pixel *pixel;
918
942
 
919
- Data_Get_Struct(self, Pixel, pixel);
943
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
920
944
 
921
945
  #if defined(IMAGEMAGICK_7)
922
946
  pixel->alpha = OpaqueAlpha;
@@ -972,7 +996,7 @@ Pixel_intensity(VALUE self)
972
996
  Pixel *pixel;
973
997
  Quantum intensity;
974
998
 
975
- Data_Get_Struct(self, Pixel, pixel);
999
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
976
1000
 
977
1001
  intensity = ROUND_TO_QUANTUM((0.299*pixel->red)
978
1002
  + (0.587*pixel->green)
@@ -993,7 +1017,7 @@ Pixel_marshal_dump(VALUE self)
993
1017
  Pixel *pixel;
994
1018
  VALUE dpixel;
995
1019
 
996
- Data_Get_Struct(self, Pixel, pixel);
1020
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
997
1021
  dpixel = rb_hash_new();
998
1022
  rb_hash_aset(dpixel, CSTR2SYM("red"), QUANTUM2NUM(pixel->red));
999
1023
  rb_hash_aset(dpixel, CSTR2SYM("green"), QUANTUM2NUM(pixel->green));
@@ -1021,7 +1045,7 @@ Pixel_marshal_load(VALUE self, VALUE dpixel)
1021
1045
  {
1022
1046
  Pixel *pixel;
1023
1047
 
1024
- Data_Get_Struct(self, Pixel, pixel);
1048
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
1025
1049
  pixel->red = NUM2QUANTUM(rb_hash_aref(dpixel, CSTR2SYM("red")));
1026
1050
  pixel->green = NUM2QUANTUM(rb_hash_aref(dpixel, CSTR2SYM("green")));
1027
1051
  pixel->blue = NUM2QUANTUM(rb_hash_aref(dpixel, CSTR2SYM("blue")));
@@ -1043,39 +1067,41 @@ Pixel_marshal_load(VALUE self, VALUE dpixel)
1043
1067
  VALUE
1044
1068
  Pixel_spaceship(VALUE self, VALUE other)
1045
1069
  {
1046
- Pixel *this, *that;
1070
+ Pixel *self_pixel, *other_pixel;
1071
+
1072
+ if (CLASS_OF(self) != CLASS_OF(other)) {
1073
+ return Qnil;
1074
+ }
1047
1075
 
1048
- Data_Get_Struct(self, Pixel, this);
1049
- Data_Get_Struct(other, Pixel, that);
1076
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, self_pixel);
1077
+ TypedData_Get_Struct(other, Pixel, &rm_pixel_data_type, other_pixel);
1050
1078
 
1051
- if (this->red != that->red)
1079
+ if (self_pixel->red != other_pixel->red)
1052
1080
  {
1053
- return INT2NUM((this->red - that->red)/abs((int)(this->red - that->red)));
1081
+ return INT2NUM((self_pixel->red - other_pixel->red)/abs((int)(self_pixel->red - other_pixel->red)));
1054
1082
  }
1055
- else if(this->green != that->green)
1083
+ else if(self_pixel->green != other_pixel->green)
1056
1084
  {
1057
- return INT2NUM((this->green - that->green)/abs((int)(this->green - that->green)));
1085
+ return INT2NUM((self_pixel->green - other_pixel->green)/abs((int)(self_pixel->green - other_pixel->green)));
1058
1086
  }
1059
- else if(this->blue != that->blue)
1087
+ else if(self_pixel->blue != other_pixel->blue)
1060
1088
  {
1061
- return INT2NUM((this->blue - that->blue)/abs((int)(this->blue - that->blue)));
1089
+ return INT2NUM((self_pixel->blue - other_pixel->blue)/abs((int)(self_pixel->blue - other_pixel->blue)));
1062
1090
  }
1063
1091
  #if defined(IMAGEMAGICK_7)
1064
- else if(this->alpha != that->alpha)
1092
+ else if(self_pixel->alpha != other_pixel->alpha)
1065
1093
  {
1066
- return INT2NUM((this->alpha - that->alpha)/abs((int)(this->alpha - that->alpha)));
1094
+ return INT2NUM((self_pixel->alpha - other_pixel->alpha)/abs((int)(self_pixel->alpha - other_pixel->alpha)));
1067
1095
  }
1068
1096
  #else
1069
- else if(this->opacity != that->opacity)
1097
+ else if(self_pixel->opacity != other_pixel->opacity)
1070
1098
  {
1071
- return INT2NUM(((QuantumRange - this->opacity) - (QuantumRange - that->opacity))/abs((int)((QuantumRange - this->opacity) - (QuantumRange - that->opacity))));
1099
+ return INT2NUM(((QuantumRange - self_pixel->opacity) - (QuantumRange - other_pixel->opacity))/abs((int)((QuantumRange - self_pixel->opacity) - (QuantumRange - other_pixel->opacity))));
1072
1100
  }
1073
1101
  #endif
1074
1102
 
1075
- // Values are equal, check class.
1076
-
1077
- return rb_funcall(CLASS_OF(self), rb_intern("<=>"), 1, CLASS_OF(other));
1078
-
1103
+ // Values are equal.
1104
+ return INT2NUM(0);
1079
1105
  }
1080
1106
 
1081
1107
 
@@ -1093,7 +1119,7 @@ Pixel_to_hsla(VALUE self)
1093
1119
  Pixel *pixel;
1094
1120
  VALUE hsla;
1095
1121
 
1096
- Data_Get_Struct(self, Pixel, pixel);
1122
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
1097
1123
 
1098
1124
  ConvertRGBToHSL(pixel->red, pixel->green, pixel->blue, &hue, &sat, &lum);
1099
1125
  hue *= 360.0;
@@ -1183,13 +1209,13 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
1183
1209
  char name[MaxTextExtent];
1184
1210
  ExceptionInfo *exception;
1185
1211
  ComplianceType compliance = AllCompliance;
1186
- unsigned int alpha = MagickFalse;
1212
+ MagickBooleanType alpha = MagickFalse;
1187
1213
  unsigned int depth = MAGICKCORE_QUANTUM_DEPTH;
1188
1214
 
1189
1215
  switch (argc)
1190
1216
  {
1191
1217
  case 4:
1192
- hex = RTEST(argv[3]);
1218
+ hex = (MagickBooleanType)RTEST(argv[3]);
1193
1219
  case 3:
1194
1220
  depth = NUM2UINT(argv[2]);
1195
1221
 
@@ -1209,7 +1235,7 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
1209
1235
  break;
1210
1236
  }
1211
1237
  case 2:
1212
- alpha = RTEST(argv[1]);
1238
+ alpha = (MagickBooleanType)RTEST(argv[1]);
1213
1239
  case 1:
1214
1240
  VALUE_TO_ENUM(argv[0], compliance, ComplianceType);
1215
1241
  case 0:
@@ -1218,7 +1244,7 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
1218
1244
  rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 to 2)", argc);
1219
1245
  }
1220
1246
 
1221
- Data_Get_Struct(self, Pixel, pixel);
1247
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
1222
1248
 
1223
1249
  info = CloneImageInfo(NULL);
1224
1250
  image = rm_acquire_image(info);
@@ -1284,7 +1310,7 @@ Pixel_to_s(VALUE self)
1284
1310
  Pixel *pixel;
1285
1311
  char buff[100];
1286
1312
 
1287
- Data_Get_Struct(self, Pixel, pixel);
1313
+ TypedData_Get_Struct(self, Pixel, &rm_pixel_data_type, pixel);
1288
1314
  snprintf(buff, sizeof(buff), "red=" QuantumFormat ", green=" QuantumFormat ", blue=" QuantumFormat ", alpha=" QuantumFormat,
1289
1315
  pixel->red, pixel->green, pixel->blue,
1290
1316
  #if defined(IMAGEMAGICK_7)
@@ -1294,4 +1320,3 @@ Pixel_to_s(VALUE self)
1294
1320
  #endif
1295
1321
  return rb_str_new2(buff);
1296
1322
  }
1297
-
@@ -5,8 +5,8 @@
5
5
  *
6
6
  * Changes since Nov. 2009 copyright &copy; by Benjamin Thomas and Omer Bar-or
7
7
  *
8
- * @file rmstruct.c
9
- * @version $Id: rmstruct.c,v 1.5 2009/12/20 02:33:34 baror Exp $
8
+ * @file rmstruct.cpp
9
+ * @version $Id: rmstruct.cpp,v 1.5 2009/12/20 02:33:34 baror Exp $
10
10
  * @author Tim Hunter
11
11
  ******************************************************************************/
12
12
 
@@ -456,8 +456,8 @@ Export_TypeInfo(TypeInfo *ti, VALUE st)
456
456
  {
457
457
  CloneString((char **)&(ti->family), StringValueCStr(m));
458
458
  }
459
- m = rb_ary_entry(members, 3); ti->style = m == Qnil ? 0 : FIX2INT(Enum_to_i(m));
460
- m = rb_ary_entry(members, 4); ti->stretch = m == Qnil ? 0 : FIX2INT(Enum_to_i(m));
459
+ m = rb_ary_entry(members, 3); ti->style = m == Qnil ? UndefinedStyle : (StyleType)FIX2INT(Enum_to_i(m));
460
+ m = rb_ary_entry(members, 4); ti->stretch = m == Qnil ? UndefinedStretch : (StretchType)FIX2INT(Enum_to_i(m));
461
461
  m = rb_ary_entry(members, 5); ti->weight = m == Qnil ? 0 : FIX2INT(m);
462
462
 
463
463
  m = rb_ary_entry(members, 6);
@@ -524,7 +524,7 @@ Font_to_s(VALUE self)
524
524
  strcpy(weight, "BoldWeight");
525
525
  break;
526
526
  default:
527
- snprintf(weight, sizeof(weight), "%"RMIuSIZE"", ti.weight);
527
+ snprintf(weight, sizeof(weight), "%" RMIuSIZE "", ti.weight);
528
528
  break;
529
529
  }
530
530
 
@@ -732,7 +732,7 @@ RectangleInfo_to_s(VALUE self)
732
732
  char buff[100];
733
733
 
734
734
  Export_RectangleInfo(&rect, self);
735
- snprintf(buff, sizeof(buff), "width=%"RMIuSIZE", height=%"RMIuSIZE", x=%"RMIdSIZE", y=%"RMIdSIZE"",
735
+ snprintf(buff, sizeof(buff), "width=%" RMIuSIZE ", height=%" RMIuSIZE ", x=%" RMIdSIZE ", y=%" RMIdSIZE "",
736
736
  rect.width, rect.height, rect.x, rect.y);
737
737
  return rb_str_new2(buff);
738
738
  }