rmagick 5.4.4 → 5.5.0

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +15 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop_todo.yml +16 -8
  5. data/CHANGELOG.md +43 -0
  6. data/Gemfile +20 -0
  7. data/Rakefile +11 -0
  8. data/before_install_osx.sh +1 -1
  9. data/ext/RMagick/extconf.rb +24 -6
  10. data/ext/RMagick/rmagick.h +3 -1
  11. data/ext/RMagick/rmdraw.cpp +10 -10
  12. data/ext/RMagick/rmfill.cpp +4 -4
  13. data/ext/RMagick/rmilist.cpp +10 -2
  14. data/ext/RMagick/rmimage.cpp +321 -294
  15. data/ext/RMagick/rminfo.cpp +22 -21
  16. data/ext/RMagick/rmkinfo.cpp +5 -18
  17. data/ext/RMagick/rmmain.cpp +30 -64
  18. data/ext/RMagick/rmmontage.cpp +5 -5
  19. data/ext/RMagick/rmpixel.cpp +1 -1
  20. data/ext/RMagick/rmutil.cpp +31 -71
  21. data/lib/rmagick/version.rb +1 -1
  22. data/lib/rmagick_internal.rb +67 -65
  23. data/lib/rvg/embellishable.rb +6 -2
  24. data/lib/rvg/misc.rb +7 -7
  25. data/lib/rvg/rvg.rb +2 -0
  26. data/lib/rvg/stretchable.rb +2 -2
  27. data/lib/rvg/transformable.rb +1 -1
  28. data/rmagick.gemspec +1 -13
  29. data/sig/rmagick/_draw_common_methods.rbs +64 -0
  30. data/sig/rmagick/_image_common_methods.rbs +389 -0
  31. data/sig/rmagick/draw.rbs +38 -0
  32. data/sig/rmagick/draw_attribute.rbs +28 -0
  33. data/sig/rmagick/enum.rbs +814 -0
  34. data/sig/rmagick/error.rbs +11 -0
  35. data/sig/rmagick/fill.rbs +21 -0
  36. data/sig/rmagick/geometry.rbs +14 -0
  37. data/sig/rmagick/image.rbs +194 -0
  38. data/sig/rmagick/image_list.rbs +181 -0
  39. data/sig/rmagick/iptc.rbs +101 -0
  40. data/sig/rmagick/kernel_info.rbs +12 -0
  41. data/sig/rmagick/optional_method_arguments.rbs +10 -0
  42. data/sig/rmagick/pixel.rbs +46 -0
  43. data/sig/rmagick/struct.rbs +90 -0
  44. data/sig/rmagick.rbs +43 -0
  45. data/sig/rvg/clippath.rbs +34 -0
  46. data/sig/rvg/container.rbs +78 -0
  47. data/sig/rvg/deep_equal.rbs +48 -0
  48. data/sig/rvg/describable.rbs +30 -0
  49. data/sig/rvg/embellishable.rbs +226 -0
  50. data/sig/rvg/misc.rbs +145 -0
  51. data/sig/rvg/paint.rbs +55 -0
  52. data/sig/rvg/pathdata.rbs +77 -0
  53. data/sig/rvg/rvg.rbs +125 -0
  54. data/sig/rvg/stretchable.rbs +56 -0
  55. data/sig/rvg/stylable.rbs +66 -0
  56. data/sig/rvg/text.rbs +118 -0
  57. data/sig/rvg/transformable.rbs +59 -0
  58. data/sig/rvg/units.rbs +33 -0
  59. metadata +32 -128
@@ -226,6 +226,7 @@ module Magick
226
226
  private
227
227
 
228
228
  def enquote(str)
229
+ str = to_string(str)
229
230
  if str.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(str)
230
231
  str
231
232
  else
@@ -233,11 +234,21 @@ module Magick
233
234
  end
234
235
  end
235
236
 
236
- def check_opacity(opacity)
237
- return if opacity.is_a?(String) && opacity['%']
237
+ def to_opacity(opacity)
238
+ return opacity if opacity.is_a?(String) && opacity.end_with?('%')
238
239
 
239
240
  value = Float(opacity)
240
241
  Kernel.raise ArgumentError, 'opacity must be >= 0 and <= 1.0' if value < 0 || value > 1.0
242
+
243
+ value
244
+ end
245
+
246
+ def to_string(obj)
247
+ return obj if obj.is_a?(String)
248
+ return obj.to_s if obj.is_a?(Symbol)
249
+ return obj.to_str if obj.respond_to?(:to_str)
250
+
251
+ Kernel.raise TypeError, "no implicit conversion of #{obj.class} into String"
241
252
  end
242
253
 
243
254
  public
@@ -281,17 +292,19 @@ module Magick
281
292
 
282
293
  # Invoke a clip-path defined by def_clip_path.
283
294
  def clip_path(name)
284
- primitive "clip-path #{name}"
295
+ primitive "clip-path #{to_string(name)}"
285
296
  end
286
297
 
287
298
  # Define the clipping rule.
288
299
  def clip_rule(rule)
300
+ rule = to_string(rule)
289
301
  Kernel.raise ArgumentError, "Unknown clipping rule #{rule}" unless %w[evenodd nonzero].include?(rule.downcase)
290
302
  primitive "clip-rule #{rule}"
291
303
  end
292
304
 
293
305
  # Define the clip units
294
306
  def clip_units(unit)
307
+ unit = to_string(unit)
295
308
  Kernel.raise ArgumentError, "Unknown clip unit #{unit}" unless %w[userspace userspaceonuse objectboundingbox].include?(unit.downcase)
296
309
  primitive "clip-units #{unit}"
297
310
  end
@@ -320,7 +333,7 @@ module Magick
320
333
  # (pop) graphic-context".
321
334
  def define_clip_path(name)
322
335
  push('defs')
323
- push("clip-path \"#{name}\"")
336
+ push("clip-path #{enquote(name)}")
324
337
  push('graphic-context')
325
338
  yield
326
339
  ensure
@@ -340,7 +353,7 @@ module Magick
340
353
  # Let anything through, but the only defined argument
341
354
  # is "UTF-8". All others are apparently ignored.
342
355
  def encoding(encoding)
343
- primitive "encoding #{encoding}"
356
+ primitive "encoding #{to_string(encoding)}"
344
357
  end
345
358
 
346
359
  # Specify object fill, a color name or pattern name
@@ -352,22 +365,23 @@ module Magick
352
365
 
353
366
  # Specify fill opacity (use "xx%" to indicate percentage)
354
367
  def fill_opacity(opacity)
355
- check_opacity(opacity)
368
+ opacity = to_opacity(opacity)
356
369
  primitive "fill-opacity #{opacity}"
357
370
  end
358
371
 
359
372
  def fill_rule(rule)
373
+ rule = to_string(rule)
360
374
  Kernel.raise ArgumentError, "Unknown fill rule #{rule}" unless %w[evenodd nonzero].include?(rule.downcase)
361
375
  primitive "fill-rule #{rule}"
362
376
  end
363
377
 
364
378
  # Specify text drawing font
365
379
  def font(name)
366
- primitive "font \'#{name}\'"
380
+ primitive "font #{enquote(name)}"
367
381
  end
368
382
 
369
383
  def font_family(name)
370
- primitive "font-family \'#{name}\'"
384
+ primitive "font-family #{enquote(name)}"
371
385
  end
372
386
 
373
387
  def font_stretch(stretch)
@@ -405,38 +419,17 @@ module Magick
405
419
 
406
420
  # IM 6.5.5-8 and later
407
421
  def interline_spacing(space)
408
- begin
409
- Float(space)
410
- rescue ArgumentError
411
- Kernel.raise ArgumentError, 'invalid value for interline_spacing'
412
- rescue TypeError
413
- Kernel.raise TypeError, "can't convert #{space.class} into Float"
414
- end
415
- primitive "interline-spacing #{space}"
422
+ primitive "interline-spacing #{Float(space)}"
416
423
  end
417
424
 
418
425
  # IM 6.4.8-3 and later
419
426
  def interword_spacing(space)
420
- begin
421
- Float(space)
422
- rescue ArgumentError
423
- Kernel.raise ArgumentError, 'invalid value for interword_spacing'
424
- rescue TypeError
425
- Kernel.raise TypeError, "can't convert #{space.class} into Float"
426
- end
427
- primitive "interword-spacing #{space}"
427
+ primitive "interword-spacing #{Float(space)}"
428
428
  end
429
429
 
430
430
  # IM 6.4.8-3 and later
431
431
  def kerning(space)
432
- begin
433
- Float(space)
434
- rescue ArgumentError
435
- Kernel.raise ArgumentError, 'invalid value for kerning'
436
- rescue TypeError
437
- Kernel.raise TypeError, "can't convert #{space.class} into Float"
438
- end
439
- primitive "kerning #{space}"
432
+ primitive "kerning #{Float(space)}"
440
433
  end
441
434
 
442
435
  # Draw a line
@@ -447,7 +440,7 @@ module Magick
447
440
  # Specify drawing fill and stroke opacities. If the value is a string
448
441
  # ending with a %, the number will be multiplied by 0.01.
449
442
  def opacity(opacity)
450
- check_opacity(opacity)
443
+ opacity = to_opacity(opacity)
451
444
  primitive "opacity #{opacity}"
452
445
  end
453
446
 
@@ -455,7 +448,7 @@ module Magick
455
448
  # primitive requires that the commands be surrounded by quotes or
456
449
  # apostrophes. Here we simply use apostrophes.
457
450
  def path(cmds)
458
- primitive "path '" + cmds + "'"
451
+ primitive "path #{enquote(cmds)}"
459
452
  end
460
453
 
461
454
  # Define a pattern. In the block, call primitive methods to
@@ -463,7 +456,7 @@ module Magick
463
456
  # as the argument to the 'fill' or 'stroke' methods
464
457
  def pattern(name, x, y, width, height)
465
458
  push('defs')
466
- push("pattern #{name} " + sprintf('%g %g %g %g', x, y, width, height))
459
+ push("pattern #{to_string(name)} " + sprintf('%g %g %g %g', x, y, width, height))
467
460
  push('graphic-context')
468
461
  yield
469
462
  ensure
@@ -514,8 +507,7 @@ module Magick
514
507
  if what.length.zero?
515
508
  primitive 'pop graphic-context'
516
509
  else
517
- # to_s allows a Symbol to be used instead of a String
518
- primitive 'pop ' + what.map(&:to_s).join(' ')
510
+ primitive 'pop ' + what.map { |x| to_string(x) }.join(' ')
519
511
  end
520
512
  end
521
513
 
@@ -528,8 +520,7 @@ module Magick
528
520
  if what.length.zero?
529
521
  primitive 'push graphic-context'
530
522
  else
531
- # to_s allows a Symbol to be used instead of a String
532
- primitive 'push ' + what.map(&:to_s).join(' ')
523
+ primitive 'push ' + what.map { |x| to_string(x) }.join(' ')
533
524
  end
534
525
  end
535
526
 
@@ -585,7 +576,7 @@ module Magick
585
576
  if list.length.zero?
586
577
  primitive 'stroke-dasharray none'
587
578
  else
588
- list.each do |x|
579
+ list.map! { |x| Float(x) }.each do |x|
589
580
  Kernel.raise ArgumentError, "dash array elements must be > 0 (#{x} given)" if x <= 0
590
581
  end
591
582
  primitive "stroke-dasharray #{list.join(',')}"
@@ -598,16 +589,19 @@ module Magick
598
589
  end
599
590
 
600
591
  def stroke_linecap(value)
592
+ value = to_string(value)
601
593
  Kernel.raise ArgumentError, "Unknown linecap type: #{value}" unless %w[butt round square].include?(value.downcase)
602
594
  primitive "stroke-linecap #{value}"
603
595
  end
604
596
 
605
597
  def stroke_linejoin(value)
598
+ value = to_string(value)
606
599
  Kernel.raise ArgumentError, "Unknown linejoin type: #{value}" unless %w[round miter bevel].include?(value.downcase)
607
600
  primitive "stroke-linejoin #{value}"
608
601
  end
609
602
 
610
603
  def stroke_miterlimit(value)
604
+ value = Float(value)
611
605
  Kernel.raise ArgumentError, 'miterlimit must be >= 1' if value < 1
612
606
  primitive "stroke-miterlimit #{value}"
613
607
  end
@@ -615,7 +609,7 @@ module Magick
615
609
  # Specify opacity of stroke drawing color
616
610
  # (use "xx%" to indicate percentage)
617
611
  def stroke_opacity(opacity)
618
- check_opacity(opacity)
612
+ opacity = to_opacity(opacity)
619
613
  primitive "stroke-opacity #{opacity}"
620
614
  end
621
615
 
@@ -626,7 +620,8 @@ module Magick
626
620
 
627
621
  # Draw text at position x,y. Add quotes to text that is not already quoted.
628
622
  def text(x, y, text)
629
- Kernel.raise ArgumentError, 'missing text argument' if text.to_s.empty?
623
+ text = to_string(text)
624
+ Kernel.raise ArgumentError, 'missing text argument' if text.empty?
630
625
  if text.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(text)
631
626
  # text already quoted
632
627
  elsif !text['\'']
@@ -1080,13 +1075,13 @@ module Magick
1080
1075
  %i[red green blue opacity].each do |c|
1081
1076
  module_eval <<-END_EVAL, __FILE__, __LINE__ + 1
1082
1077
  def #{c}
1083
- return collect { |p| p.#{c} }
1078
+ return collect { |p| p.#{c} }
1084
1079
  end
1085
1080
  def #{c}=(v)
1086
- each { |p| p.#{c} = v }
1087
- changed
1088
- notify_observers(self)
1089
- nil
1081
+ each { |p| p.#{c} = v }
1082
+ changed
1083
+ notify_observers(self)
1084
+ v
1090
1085
  end
1091
1086
  END_EVAL
1092
1087
  end
@@ -1310,17 +1305,11 @@ module Magick
1310
1305
  %w[& + - |].each do |op|
1311
1306
  module_eval <<-END_BINOPS, __FILE__, __LINE__ + 1
1312
1307
  def #{op}(other)
1308
+ assert_image_array(other)
1313
1309
  ilist = self.class.new
1314
- begin
1315
- a = other #{op} @images
1316
- rescue TypeError
1317
- Kernel.raise ArgumentError, "Magick::ImageList expected, got " + other.class.to_s
1318
- end
1310
+ a = other #{op} @images
1319
1311
  current = get_current()
1320
- a.each do |image|
1321
- assert_image image
1322
- ilist << image
1323
- end
1312
+ a.each { |image| ilist << image }
1324
1313
  ilist.set_current current
1325
1314
  return ilist
1326
1315
  end
@@ -1349,16 +1338,18 @@ module Magick
1349
1338
  # return if A.scene != B.scene
1350
1339
  # return A.length <=> B.length
1351
1340
  def <=>(other)
1352
- Kernel.raise TypeError, "#{self.class} required (#{other.class} given)" unless other.is_a? self.class
1341
+ return unless other.is_a? self.class
1342
+
1353
1343
  size = [length, other.length].min
1354
1344
  size.times do |x|
1355
1345
  r = self[x] <=> other[x]
1356
1346
  return r unless r.zero?
1357
1347
  end
1348
+
1358
1349
  return 0 if @scene.nil? && other.scene.nil?
1350
+ return if @scene.nil? && !other.scene.nil?
1351
+ return if !@scene.nil? && other.scene.nil?
1359
1352
 
1360
- Kernel.raise TypeError, "cannot convert nil into #{other.scene.class}" if @scene.nil? && !other.scene.nil?
1361
- Kernel.raise TypeError, "cannot convert nil into #{scene.class}" if !@scene.nil? && other.scene.nil?
1362
1353
  r = scene <=> other.scene
1363
1354
  return r unless r.zero?
1364
1355
 
@@ -1390,7 +1381,7 @@ module Magick
1390
1381
 
1391
1382
  %i[
1392
1383
  at each each_index empty? fetch
1393
- first hash include? index length rindex sort!
1384
+ first hash include? index length rindex
1394
1385
  ].each do |mth|
1395
1386
  module_eval <<-END_SIMPLE_DELEGATES, __FILE__, __LINE__ + 1
1396
1387
  def #{mth}(*args, &block)
@@ -1400,6 +1391,11 @@ module Magick
1400
1391
  end
1401
1392
  alias size length
1402
1393
 
1394
+ def sort!(*args, &block)
1395
+ @images.sort!(*args, &block)
1396
+ self
1397
+ end
1398
+
1403
1399
  def clear
1404
1400
  @scene = nil
1405
1401
  @images.clear
@@ -1447,7 +1443,7 @@ module Magick
1447
1443
  alias map! collect!
1448
1444
  alias __map__! collect!
1449
1445
 
1450
- # ImageMagic used affinity in 6.4.3, switch to remap in 6.4.4.
1446
+ # ImageMagick used affinity in 6.4.3, switch to remap in 6.4.4.
1451
1447
  alias affinity remap
1452
1448
 
1453
1449
  def compact
@@ -1510,7 +1506,12 @@ module Magick
1510
1506
  end
1511
1507
 
1512
1508
  def eql?(other)
1513
- assert_image_array other
1509
+ begin
1510
+ assert_image_array other
1511
+ rescue ArgumentError
1512
+ return false
1513
+ end
1514
+
1514
1515
  eql = other.eql?(@images)
1515
1516
  begin # "other" is another ImageList
1516
1517
  eql &&= @scene == other.scene
@@ -1614,7 +1615,9 @@ module Magick
1614
1615
  # it up the line. Catch a NameError and emit a useful message.
1615
1616
  def method_missing(meth_id, *args, &block)
1616
1617
  if @scene
1617
- @images[@scene].send(meth_id, *args, &block)
1618
+ img = @images[@scene]
1619
+ new_img = img.send(meth_id, *args, &block)
1620
+ img.object_id == new_img.object_id ? self : new_img
1618
1621
  else
1619
1622
  super
1620
1623
  end
@@ -1801,7 +1804,6 @@ module Magick
1801
1804
  end
1802
1805
 
1803
1806
  def values_at(*args)
1804
- a = @images.values_at(*args)
1805
1807
  a = self.class.new
1806
1808
  @images.values_at(*args).each { |image| a << image }
1807
1809
  a.scene = a.length - 1
@@ -1852,7 +1854,7 @@ module Magick
1852
1854
  class HatchFill
1853
1855
  def initialize(bgcolor, hatchcolor = 'white', dist = 10)
1854
1856
  @bgcolor = bgcolor
1855
- @hatchpixel = Pixel.from_color(hatchcolor)
1857
+ @hatchpixel = hatchcolor.is_a?(Pixel) ? hatchcolor : Pixel.from_color(hatchcolor)
1856
1858
  @dist = dist
1857
1859
  end
1858
1860
 
@@ -162,6 +162,8 @@ module Magick
162
162
  (@width - @image.columns * scale) / 2.0
163
163
  when /\AxMax/
164
164
  @width - @image.columns * scale
165
+ else
166
+ 0
165
167
  end
166
168
 
167
169
  ty = case @align
@@ -171,6 +173,8 @@ module Magick
171
173
  (@height - @image.rows * scale) / 2.0
172
174
  when /YMax\z/
173
175
  @height - @image.rows * scale
176
+ else
177
+ 0
174
178
  end
175
179
  [tx, ty]
176
180
  end
@@ -182,7 +186,7 @@ module Magick
182
186
  width = @width
183
187
  height = @height
184
188
  elsif @meet_or_slice == 'meet'
185
- scale = [@width / @image.columns, @height / @image.rows].min
189
+ scale = [@width / @image.columns, @height / @image.rows].min || 1.0
186
190
  width = @image.columns
187
191
  height = @image.rows
188
192
  else
@@ -193,7 +197,7 @@ module Magick
193
197
  end
194
198
 
195
199
  gc.clip_path(name)
196
- scale = [@width / @image.columns, @height / @image.rows].max
200
+ scale = [@width / @image.columns, @height / @image.rows].max || 1.0
197
201
  width = @image.columns
198
202
  height = @image.rows
199
203
  end
data/lib/rvg/misc.rb CHANGED
@@ -452,10 +452,10 @@ module Magick
452
452
  }
453
453
 
454
454
  FONT_WEIGHT = {
455
- 'normal' => Magick::NormalWeight,
456
- 'bold' => Magick::BoldWeight,
457
- 'bolder' => Magick::BolderWeight,
458
- 'lighter' => Magick::LighterWeight
455
+ normal: Magick::NormalWeight,
456
+ bold: Magick::BoldWeight,
457
+ bolder: Magick::BolderWeight,
458
+ lighter: Magick::LighterWeight
459
459
  }
460
460
 
461
461
  TEXT_ANCHOR = {
@@ -579,7 +579,7 @@ module Magick
579
579
 
580
580
  def font_weight(weight)
581
581
  # If the arg is not in the hash use it directly. Handles numeric values.
582
- weight = FONT_WEIGHT.fetch(weight) { |key| key }
582
+ weight = weight.is_a?(Numeric) ? weight : FONT_WEIGHT.fetch(weight.to_sym, Magick::NormalWeight)
583
583
  @gc.font_weight(weight)
584
584
  @shadow[-1].font_weight = weight
585
585
  nil
@@ -646,7 +646,7 @@ module Magick
646
646
 
647
647
  def skewX(degrees)
648
648
  degrees = Magick::RVG.convert_one_to_float(degrees)
649
- @gc.skewX(degrees)
649
+ @gc.skewx(degrees)
650
650
  @ry = Math.tan(GraphicContext.degrees_to_radians(degrees))
651
651
  concat_matrix
652
652
  nil
@@ -654,7 +654,7 @@ module Magick
654
654
 
655
655
  def skewY(degrees)
656
656
  degrees = Magick::RVG.convert_one_to_float(degrees)
657
- @gc.skewY(degrees)
657
+ @gc.skewy(degrees)
658
658
  @rx = Math.tan(GraphicContext.degrees_to_radians(degrees))
659
659
  concat_matrix
660
660
  nil
data/lib/rvg/rvg.rb CHANGED
@@ -90,6 +90,8 @@ module Magick
90
90
  end
91
91
  bg_image
92
92
  end
93
+ else
94
+ @background_image.copy
93
95
  end
94
96
  else
95
97
  @background_image.copy
@@ -137,8 +137,8 @@ module Magick
137
137
  rescue ArgumentError
138
138
  raise ArgumentError, "arguments must be convertable to float (got #{x.class}, #{y.class}, #{width.class}, #{height.class})"
139
139
  end
140
- raise(ArgumentError, "viewbox width must be > 0 (#{width} given)") unless width >= 0
141
- raise(ArgumentError, "viewbox height must be > 0 (#{height} given)") unless height >= 0
140
+ raise(ArgumentError, "viewbox width must be > 0 (#{@vbx_width} given)") unless @vbx_width >= 0
141
+ raise(ArgumentError, "viewbox height must be > 0 (#{@vbx_height} given)") unless @vbx_height >= 0
142
142
 
143
143
  # return the user-coordinate space attributes if defined
144
144
  class << self
@@ -89,7 +89,7 @@ module Magick
89
89
  cx = Float(args[0])
90
90
  cy = Float(args[1])
91
91
  @transforms << [:translate, [cx, cy]]
92
- @transforms << [:rotate, [angle]]
92
+ @transforms << [:rotate, [Float(angle)]]
93
93
  @transforms << [:translate, [-cx, -cy]]
94
94
  else
95
95
  raise ArgumentError, "wrong number of arguments (#{args.length} for 1 or 3)"
data/rmagick.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.license = 'MIT'
15
15
 
16
16
  tracked_files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
17
- file_exclusion_regex = %r{\A(doc|benchmarks|examples|spec|lib/rvg/to_c.rb)}
17
+ file_exclusion_regex = /\A(doc|benchmarks|examples|spec|Steepfile)/
18
18
  files = tracked_files.reject { |file| file[file_exclusion_regex] }
19
19
 
20
20
  s.files = files
@@ -26,16 +26,4 @@ Gem::Specification.new do |s|
26
26
 
27
27
  s.add_runtime_dependency 'pkg-config', '~> 1.4'
28
28
  s.add_runtime_dependency 'observer', '~> 0.1'
29
-
30
- s.add_development_dependency 'pry', '~> 0.14'
31
- s.add_development_dependency 'rake-compiler', '~> 1.0'
32
- s.add_development_dependency 'rspec', '~> 3.8'
33
- s.add_development_dependency 'rspec_junit_formatter', '~> 0.6.0'
34
- if RUBY_PLATFORM !~ /mswin|mingw/
35
- s.add_development_dependency 'rubocop', '~> 0.81.0'
36
- s.add_development_dependency 'rubocop-rspec', '~> 1.38.1'
37
- s.add_development_dependency 'rubocop-performance', '~> 1.5.2'
38
- end
39
- s.add_development_dependency 'simplecov', '~> 0.16.1'
40
- s.add_development_dependency 'yard', '~> 0.9.24'
41
29
  end
@@ -0,0 +1,64 @@
1
+ module Magick
2
+ interface _DrawCommonMethods
3
+ def affine: (magick_real sx, magick_real rx, magick_real ry, magick_real sy, magick_real tx, magick_real ty) -> self
4
+ def alpha: (magick_real x, magick_real y, PaintMethod method) -> self
5
+ def arc: (magick_real start_x, magick_real start_y, magick_real end_x, magick_real end_y, magick_real start_degrees, magick_real end_degrees) -> self
6
+ def bezier: (*magick_real points) -> self
7
+ def circle: (magick_real origin_x, magick_real origin_y, magick_real perim_x, magick_real perim_y) -> self
8
+ def clip_path: (interned name) -> self
9
+ def clip_rule: (interned rule) -> self
10
+ def clip_units: (interned unit) -> self
11
+ def color: (magick_real x, magick_real y, PaintMethod method) -> self
12
+ def decorate: (DecorationType decoration) -> self
13
+ def define_clip_path: (interned name) { () -> void } -> void
14
+ def ellipse: (magick_real origin_x, magick_real origin_y, magick_real width, magick_real height, magick_real arc_start, magick_real arc_end) -> self
15
+ def encoding: (interned encoding) -> self
16
+ def fill: (interned colorspec) -> self
17
+ alias fill_color fill
18
+ alias fill_pattern fill
19
+ def fill_opacity: (magick_percentage opacity) -> self
20
+ def fill_rule: (interned rule) -> self
21
+ def gravity: (GravityType grav) -> self
22
+ def image: (CompositeOperator composite, magick_real x, magick_real y, magick_real width, magick_real height, String image_file_path) -> self
23
+ def interline_spacing: (magick_real space) -> self
24
+ def interword_spacing: (magick_real space) -> self
25
+ def kerning: (magick_real space) -> self
26
+ def line: (magick_real start_x, magick_real start_y, magick_real end_x, magick_real end_y) -> self
27
+ def opacity: (magick_percentage opacity) -> self
28
+ def path: (interned cmds) -> self
29
+ def pattern: (interned name, magick_real x, magick_real y, magick_real width, magick_real height) { () -> void } -> void
30
+ def point: (magick_real x, magick_real y) -> self
31
+ def pointsize: (magick_real points) -> self
32
+ def polygon: (*magick_real points) -> self
33
+ def polyline: (*magick_real points) -> self
34
+ def rectangle: (magick_real upper_left_x, magick_real upper_left_y, magick_real lower_right_x, magick_real lower_right_y) -> self
35
+ def roundrectangle: (magick_real center_x, magick_real center_y, magick_real width, magick_real height, magick_real corner_width, magick_real corner_height) -> self
36
+ def skewx: (magick_real angle) -> self
37
+ def skewy: (magick_real angle) -> self
38
+ def stroke: (interned colorspec) -> self
39
+ alias stroke_color stroke
40
+ alias stroke_pattern stroke
41
+ def stroke_antialias: (bool `bool`) -> self
42
+ def stroke_dasharray: (*magick_real list) -> self
43
+ def stroke_dashoffset: (?magick_real value) -> self
44
+ def stroke_linecap: (interned value) -> self
45
+ def stroke_linejoin: (interned value) -> self
46
+ def stroke_miterlimit: (magick_real value) -> self
47
+ def stroke_opacity: (magick_percentage opacity) -> self
48
+ def text_align: (AlignType alignment) -> self
49
+ def text_antialias: (bool boolean) -> self
50
+ def text_undercolor: (String color) -> self
51
+
52
+ def annotate: (magick_image image_arg, int width_arg, int height_arg, int x_arg, int y_arg, string text) -> self
53
+ | (magick_image image_arg, int width_arg, int height_arg, int x_arg, int y_arg, string text) { (self) -> void } -> self
54
+ def composite: (magick_real x, magick_real y, magick_real width, magick_real height, magick_image image, ?CompositeOperator composite_op) -> self
55
+ def draw: (magick_image image_arg) -> self
56
+ def get_type_metrics: (magick_image image, string text) -> TypeMetric
57
+ | (string text) -> TypeMetric
58
+ def get_multiline_type_metrics: (magick_image image, string text) -> TypeMetric
59
+ | (string text) -> TypeMetric
60
+ def marshal_dump: () -> Hash[Symbol, untyped]
61
+ def marshal_load: (Hash[Symbol, untyped] ddraw) -> self
62
+ def primitive: (string primitive) -> self
63
+ end
64
+ end