rmagick 4.1.0.rc2 → 4.2.1
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/.codeclimate.yml +63 -0
- data/.editorconfig +3 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +108 -0
- data/.gitignore +3 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +151 -297
- data/.yardopts +5 -0
- data/CHANGELOG.md +96 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +14 -10
- data/README.md +324 -0
- data/Rakefile +16 -22
- data/before_install_linux.sh +22 -32
- data/before_install_osx.sh +57 -2
- data/ext/RMagick/extconf.rb +108 -95
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +77 -70
- data/ext/RMagick/rmdraw.c +289 -446
- data/ext/RMagick/rmenum.c +96 -113
- data/ext/RMagick/rmfill.c +49 -77
- data/ext/RMagick/rmilist.c +144 -244
- data/ext/RMagick/rmimage.c +3407 -4166
- data/ext/RMagick/rminfo.c +540 -738
- data/ext/RMagick/rmkinfo.c +21 -87
- data/ext/RMagick/rmmain.c +419 -246
- data/ext/RMagick/rmmontage.c +60 -126
- data/ext/RMagick/rmpixel.c +401 -345
- data/ext/RMagick/rmstruct.c +62 -88
- data/ext/RMagick/rmutil.c +151 -228
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +128 -77
- data/lib/rvg/clippath.rb +2 -1
- data/lib/rvg/container.rb +10 -5
- data/lib/rvg/describable.rb +1 -1
- data/lib/rvg/embellishable.rb +5 -4
- data/lib/rvg/misc.rb +15 -12
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +12 -11
- data/lib/rvg/rvg.rb +8 -4
- data/lib/rvg/stylable.rb +9 -7
- data/lib/rvg/text.rb +11 -6
- data/lib/rvg/transformable.rb +3 -2
- data/lib/rvg/units.rb +1 -1
- data/rmagick.gemspec +8 -6
- metadata +46 -421
- data/.appveyor.yml +0 -57
- data/.circleci/config.yml +0 -56
- data/.ruby-version +0 -1
- data/.simplecov +0 -27
- data/.travis.yml +0 -64
- data/Doxyfile +0 -1514
- data/README.textile +0 -259
- data/benchmarks/memory/README.md +0 -50
- data/benchmarks/memory/image_new.rb +0 -8
- data/benchmarks/memory/rmagick.gnuplot +0 -16
- data/doc/.cvsignore +0 -1
- data/doc/comtasks.html +0 -287
- data/doc/constants.html +0 -1581
- data/doc/css/doc.css +0 -299
- data/doc/css/popup.css +0 -34
- data/doc/css/ref.css +0 -67
- data/doc/draw.html +0 -3272
- data/doc/ex/InitialCoords.rb +0 -22
- data/doc/ex/NewCoordSys.rb +0 -30
- data/doc/ex/OrigCoordSys.rb +0 -16
- data/doc/ex/PreserveAspectRatio.rb +0 -204
- data/doc/ex/RotateScale.rb +0 -36
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -15
- data/doc/ex/Use02.rb +0 -20
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -31
- data/doc/ex/adaptive_threshold.rb +0 -9
- data/doc/ex/add_noise.rb +0 -16
- data/doc/ex/affine.rb +0 -48
- data/doc/ex/affine_transform.rb +0 -20
- data/doc/ex/arc.rb +0 -49
- data/doc/ex/arcpath.rb +0 -32
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -59
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -17
- data/doc/ex/bilevel_channel.rb +0 -8
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -42
- data/doc/ex/cbezier1.rb +0 -41
- data/doc/ex/cbezier2.rb +0 -41
- data/doc/ex/cbezier3.rb +0 -41
- data/doc/ex/cbezier4.rb +0 -42
- data/doc/ex/cbezier5.rb +0 -42
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -25
- data/doc/ex/charcoal.rb +0 -12
- data/doc/ex/chop.rb +0 -29
- data/doc/ex/circle.rb +0 -33
- data/doc/ex/circle01.rb +0 -16
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -57
- data/doc/ex/color_fill_to_border.rb +0 -29
- data/doc/ex/color_floodfill.rb +0 -28
- data/doc/ex/color_histogram.rb +0 -47
- data/doc/ex/color_reset.rb +0 -11
- data/doc/ex/colorize.rb +0 -16
- data/doc/ex/colors.rb +0 -64
- data/doc/ex/compose_mask.rb +0 -22
- data/doc/ex/composite.rb +0 -133
- data/doc/ex/composite_layers.rb +0 -52
- data/doc/ex/composite_tiled.rb +0 -21
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -42
- data/doc/ex/cubic01.rb +0 -43
- data/doc/ex/cubic02.rb +0 -91
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -12
- data/doc/ex/drawcomp.rb +0 -41
- data/doc/ex/drop_shadow.rb +0 -60
- data/doc/ex/edge.rb +0 -11
- data/doc/ex/ellipse.rb +0 -45
- data/doc/ex/ellipse01.rb +0 -21
- data/doc/ex/emboss.rb +0 -11
- data/doc/ex/enhance.rb +0 -28
- data/doc/ex/equalize.rb +0 -11
- data/doc/ex/evenodd.rb +0 -42
- data/doc/ex/fill_pattern.rb +0 -23
- data/doc/ex/flatten_images.rb +0 -36
- data/doc/ex/flip.rb +0 -11
- data/doc/ex/flop.rb +0 -11
- data/doc/ex/font_styles.rb +0 -32
- data/doc/ex/fonts.rb +0 -16
- data/doc/ex/frame.rb +0 -12
- data/doc/ex/gaussian_blur.rb +0 -11
- data/doc/ex/get_multiline_type_metrics.rb +0 -41
- data/doc/ex/get_pixels.rb +0 -45
- data/doc/ex/get_type_metrics.rb +0 -142
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -78
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -44
- data/doc/ex/images/Apple.miff +0 -0
- data/doc/ex/images/Ballerina.jpg +0 -0
- data/doc/ex/images/Ballerina3.jpg +0 -0
- data/doc/ex/images/Button_0.gif +0 -0
- data/doc/ex/images/Button_1.gif +0 -0
- data/doc/ex/images/Button_2.gif +0 -0
- data/doc/ex/images/Button_3.gif +0 -0
- data/doc/ex/images/Button_4.gif +0 -0
- data/doc/ex/images/Button_5.gif +0 -0
- data/doc/ex/images/Button_6.gif +0 -0
- data/doc/ex/images/Button_7.gif +0 -0
- data/doc/ex/images/Button_8.gif +0 -0
- data/doc/ex/images/Button_9.gif +0 -0
- data/doc/ex/images/Button_A.gif +0 -0
- data/doc/ex/images/Button_B.gif +0 -0
- data/doc/ex/images/Button_C.gif +0 -0
- data/doc/ex/images/Button_D.gif +0 -0
- data/doc/ex/images/Button_E.gif +0 -0
- data/doc/ex/images/Button_F.gif +0 -0
- data/doc/ex/images/Button_G.gif +0 -0
- data/doc/ex/images/Button_H.gif +0 -0
- data/doc/ex/images/Button_I.gif +0 -0
- data/doc/ex/images/Button_J.gif +0 -0
- data/doc/ex/images/Button_K.gif +0 -0
- data/doc/ex/images/Button_L.gif +0 -0
- data/doc/ex/images/Button_M.gif +0 -0
- data/doc/ex/images/Button_N.gif +0 -0
- data/doc/ex/images/Button_O.gif +0 -0
- data/doc/ex/images/Button_P.gif +0 -0
- data/doc/ex/images/Button_Q.gif +0 -0
- data/doc/ex/images/Button_R.gif +0 -0
- data/doc/ex/images/Button_S.gif +0 -0
- data/doc/ex/images/Button_T.gif +0 -0
- data/doc/ex/images/Button_U.gif +0 -0
- data/doc/ex/images/Button_V.gif +0 -0
- data/doc/ex/images/Button_W.gif +0 -0
- data/doc/ex/images/Button_X.gif +0 -0
- data/doc/ex/images/Button_Y.gif +0 -0
- data/doc/ex/images/Button_Z.gif +0 -0
- data/doc/ex/images/Cheetah.jpg +0 -0
- data/doc/ex/images/Coffee.png +0 -0
- data/doc/ex/images/Flower_Hat.jpg +0 -0
- data/doc/ex/images/Gold_Statue.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
- data/doc/ex/images/Leaf.miff +0 -0
- data/doc/ex/images/No.png +0 -0
- data/doc/ex/images/Polynesia.jpg +0 -0
- data/doc/ex/images/Red_Rocks.jpg +0 -0
- data/doc/ex/images/Rocks_On_Beach.miff +0 -0
- data/doc/ex/images/Shorts.jpg +0 -0
- data/doc/ex/images/Snake.png +0 -0
- data/doc/ex/images/Violin.jpg +0 -0
- data/doc/ex/images/Yellow_Rose.miff +0 -0
- data/doc/ex/images/big-duck.gif +0 -0
- data/doc/ex/images/duck.gif +0 -0
- data/doc/ex/images/duck0.gif +0 -0
- data/doc/ex/images/duck1.gif +0 -0
- data/doc/ex/images/duck10.gif +0 -0
- data/doc/ex/images/duck11.gif +0 -0
- data/doc/ex/images/duck12.gif +0 -0
- data/doc/ex/images/duck13.gif +0 -0
- data/doc/ex/images/duck14.gif +0 -0
- data/doc/ex/images/duck15.gif +0 -0
- data/doc/ex/images/duck2.gif +0 -0
- data/doc/ex/images/duck3.gif +0 -0
- data/doc/ex/images/duck4.gif +0 -0
- data/doc/ex/images/duck5.gif +0 -0
- data/doc/ex/images/duck6.gif +0 -0
- data/doc/ex/images/duck7.gif +0 -0
- data/doc/ex/images/duck8.gif +0 -0
- data/doc/ex/images/duck9.gif +0 -0
- data/doc/ex/images/graydient230x6.gif +0 -0
- data/doc/ex/images/image_with_profile.jpg +0 -0
- data/doc/ex/images/logo400x83.gif +0 -0
- data/doc/ex/images/model.miff +0 -0
- data/doc/ex/images/notimplemented.gif +0 -0
- data/doc/ex/images/smile.miff +0 -0
- data/doc/ex/images/spin.gif +0 -0
- data/doc/ex/implode.rb +0 -34
- data/doc/ex/level.rb +0 -11
- data/doc/ex/level_colors.rb +0 -11
- data/doc/ex/line.rb +0 -41
- data/doc/ex/line01.rb +0 -21
- data/doc/ex/mask.rb +0 -35
- data/doc/ex/matte_fill_to_border.rb +0 -39
- data/doc/ex/matte_floodfill.rb +0 -32
- data/doc/ex/matte_replace.rb +0 -39
- data/doc/ex/median_filter.rb +0 -28
- data/doc/ex/modulate.rb +0 -11
- data/doc/ex/mono.rb +0 -23
- data/doc/ex/morph.rb +0 -25
- data/doc/ex/mosaic.rb +0 -37
- data/doc/ex/motion_blur.rb +0 -11
- data/doc/ex/negate.rb +0 -11
- data/doc/ex/negate_channel.rb +0 -9
- data/doc/ex/nested_rvg.rb +0 -21
- data/doc/ex/nonzero.rb +0 -42
- data/doc/ex/normalize.rb +0 -11
- data/doc/ex/oil_paint.rb +0 -11
- data/doc/ex/opacity.rb +0 -37
- data/doc/ex/ordered_dither.rb +0 -11
- data/doc/ex/path.rb +0 -63
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -26
- data/doc/ex/polygon.rb +0 -23
- data/doc/ex/polygon01.rb +0 -21
- data/doc/ex/polyline.rb +0 -22
- data/doc/ex/polyline01.rb +0 -21
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -8
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -34
- data/doc/ex/quantize-m.rb +0 -25
- data/doc/ex/radial_blur.rb +0 -9
- data/doc/ex/raise.rb +0 -8
- data/doc/ex/random_threshold_channel.rb +0 -13
- data/doc/ex/rect01.rb +0 -14
- data/doc/ex/rect02.rb +0 -20
- data/doc/ex/rectangle.rb +0 -34
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -11
- data/doc/ex/remap_images.rb +0 -19
- data/doc/ex/resize_to_fill.rb +0 -8
- data/doc/ex/resize_to_fit.rb +0 -8
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -44
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -33
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -12
- data/doc/ex/rvg_linecap.rb +0 -42
- data/doc/ex/rvg_linejoin.rb +0 -40
- data/doc/ex/rvg_opacity.rb +0 -18
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -11
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -7
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -30
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -17
- data/doc/ex/skewx.rb +0 -51
- data/doc/ex/skewy.rb +0 -47
- data/doc/ex/smile.rb +0 -126
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -54
- data/doc/ex/stroke_dasharray.rb +0 -42
- data/doc/ex/stroke_fill.rb +0 -10
- data/doc/ex/stroke_linecap.rb +0 -44
- data/doc/ex/stroke_linejoin.rb +0 -48
- data/doc/ex/stroke_width.rb +0 -49
- data/doc/ex/swirl.rb +0 -17
- data/doc/ex/text.rb +0 -37
- data/doc/ex/text01.rb +0 -16
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -37
- data/doc/ex/text_styles.rb +0 -19
- data/doc/ex/text_undercolor.rb +0 -28
- data/doc/ex/texture_fill_to_border.rb +0 -34
- data/doc/ex/texture_floodfill.rb +0 -32
- data/doc/ex/texturefill.rb +0 -24
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -13
- data/doc/ex/translate.rb +0 -39
- data/doc/ex/transparent.rb +0 -38
- data/doc/ex/transpose.rb +0 -9
- data/doc/ex/transverse.rb +0 -9
- data/doc/ex/tref01.rb +0 -24
- data/doc/ex/triangle01.rb +0 -15
- data/doc/ex/trim.rb +0 -23
- data/doc/ex/tspan01.rb +0 -17
- data/doc/ex/tspan02.rb +0 -17
- data/doc/ex/tspan03.rb +0 -19
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -33
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -27
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -58
- data/doc/ex/writing_mode01.rb +0 -26
- data/doc/ex/writing_mode02.rb +0 -26
- data/doc/ilist.html +0 -2056
- data/doc/image1.html +0 -4680
- data/doc/image2.html +0 -3665
- data/doc/image3.html +0 -4522
- data/doc/imageattrs.html +0 -1638
- data/doc/imusage.html +0 -514
- data/doc/index.html +0 -416
- data/doc/info.html +0 -1499
- data/doc/magick.html +0 -570
- data/doc/optequiv.html +0 -2435
- data/doc/rvg.html +0 -975
- data/doc/rvgclip.html +0 -248
- data/doc/rvggroup.html +0 -305
- data/doc/rvgimage.html +0 -289
- data/doc/rvgpattern.html +0 -475
- data/doc/rvgshape.html +0 -406
- data/doc/rvgstyle.html +0 -270
- data/doc/rvgtext.html +0 -465
- data/doc/rvgtspan.html +0 -238
- data/doc/rvgtut.html +0 -530
- data/doc/rvguse.html +0 -145
- data/doc/rvgxform.html +0 -294
- data/doc/scripts/doc.js +0 -22
- data/doc/scripts/stripeTables.js +0 -23
- data/doc/struct.html +0 -1339
- data/doc/usage.html +0 -1621
- data/examples/constitute.rb +0 -7
- data/examples/crop_with_gravity.rb +0 -43
- data/examples/demo.rb +0 -323
- data/examples/describe.rb +0 -41
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -312
- data/examples/identify.rb +0 -174
- data/examples/image_opacity.rb +0 -28
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -37
- data/examples/rotating_text.rb +0 -45
- data/examples/spinner.rb +0 -49
- data/examples/thumbnail.rb +0 -64
- data/examples/vignette.rb +0 -78
- data/spec/rmagick/ImageList1_spec.rb +0 -24
- data/spec/rmagick/draw_spec.rb +0 -155
- data/spec/rmagick/image/blue_shift_spec.rb +0 -14
- data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
- data/spec/rmagick/image/composite_spec.rb +0 -72
- data/spec/rmagick/image/constitute_spec.rb +0 -13
- data/spec/rmagick/image/dispatch_spec.rb +0 -16
- data/spec/rmagick/image/dissolve_spec.rb +0 -54
- data/spec/rmagick/image/from_blob_spec.rb +0 -12
- data/spec/rmagick/image/ping_spec.rb +0 -12
- data/spec/rmagick/image/properties_spec.rb +0 -27
- data/spec/rmagick/image/read_spec.rb +0 -28
- data/spec/spec_helper.rb +0 -9
- data/spec/support/issue_200/app.rb +0 -8
- data/test/Draw.rb +0 -351
- data/test/Enum.rb +0 -228
- data/test/Fill.rb +0 -93
- data/test/Image1.rb +0 -606
- data/test/Image2.rb +0 -1408
- data/test/Image3.rb +0 -1086
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -375
- data/test/Image_attributes.rb +0 -635
- data/test/Import_Export.rb +0 -111
- data/test/Info.rb +0 -436
- data/test/KernelInfo.rb +0 -59
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -259
- data/test/PolaroidOptions.rb +0 -23
- data/test/Preview.rb +0 -26
- data/test/Struct.rb +0 -45
- data/test/appearance/Montage.rb +0 -26
- data/test/appearance/appearance_assertion.rb +0 -13
- data/test/appearance/expected/montage_border_color.jpg +0 -0
- data/test/cmyk.icm +0 -0
- data/test/lib/internal/Draw.rb +0 -811
- data/test/lib/internal/Geometry.rb +0 -98
- data/test/lib/internal/Magick.rb +0 -40
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -49
- data/test/tmpnam_test.rb +0 -50
data/ext/RMagick/rmagick.c
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
static VALUE rm_yield_handle_exception(VALUE, VALUE) ATTRIBUTE_NORETURN;
|
17
18
|
|
18
19
|
static VALUE
|
19
20
|
rm_yield_body(VALUE object)
|
@@ -26,22 +27,19 @@ rm_yield_handle_exception(VALUE allocated_area, VALUE exc)
|
|
26
27
|
{
|
27
28
|
magick_free((void *)allocated_area);
|
28
29
|
rb_exc_raise(exc);
|
29
|
-
return Qnil; /* not reachable */
|
30
30
|
}
|
31
31
|
|
32
32
|
/**
|
33
33
|
* If called with the optional block, iterates over the colors, otherwise
|
34
|
-
* returns an array of Magick::Color objects.
|
34
|
+
* returns an array of {Magick::Color} objects.
|
35
35
|
*
|
36
|
-
*
|
37
|
-
*
|
38
|
-
* - @verbatim Magick::colors { |colorinfo| } @endverbatim
|
36
|
+
* @overload colors
|
37
|
+
* @return [Array<Magick::Color>] the array of {Magick::Color}
|
39
38
|
*
|
40
|
-
*
|
41
|
-
*
|
39
|
+
* @overload colors
|
40
|
+
* @yield [colorinfo]
|
41
|
+
* @yieldparam colorinfo [Magick::Color] the color
|
42
42
|
*
|
43
|
-
* @param class the class on which the method is run.
|
44
|
-
* @return either the input class (if a block was given) or the array of colors.
|
45
43
|
*/
|
46
44
|
VALUE
|
47
45
|
Magick_colors(VALUE class)
|
@@ -54,8 +52,8 @@ Magick_colors(VALUE class)
|
|
54
52
|
exception = AcquireExceptionInfo();
|
55
53
|
|
56
54
|
color_info_list = GetColorInfoList("*", &number_colors, exception);
|
57
|
-
CHECK_EXCEPTION()
|
58
|
-
|
55
|
+
CHECK_EXCEPTION();
|
56
|
+
DestroyExceptionInfo(exception);
|
59
57
|
|
60
58
|
|
61
59
|
if (rb_block_given_p())
|
@@ -72,7 +70,7 @@ Magick_colors(VALUE class)
|
|
72
70
|
ary = rb_ary_new2((long) number_colors);
|
73
71
|
for (x = 0; x < number_colors; x++)
|
74
72
|
{
|
75
|
-
|
73
|
+
rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
|
76
74
|
}
|
77
75
|
|
78
76
|
magick_free((void *)color_info_list);
|
@@ -84,14 +82,15 @@ Magick_colors(VALUE class)
|
|
84
82
|
|
85
83
|
/**
|
86
84
|
* If called with the optional block, iterates over the fonts, otherwise returns
|
87
|
-
* an array of Magick::Font objects.
|
85
|
+
* an array of {Magick::Font} objects.
|
88
86
|
*
|
89
|
-
*
|
90
|
-
*
|
91
|
-
*
|
87
|
+
* @overload fonts
|
88
|
+
* @return [Array<Magick::Font>] the array of {Magick::Font}
|
89
|
+
*
|
90
|
+
* @overload fonts
|
91
|
+
* @yield [fontinfo]
|
92
|
+
* @yieldparam fontinfo [Magick::Font] the font
|
92
93
|
*
|
93
|
-
* @param class the class on which the method is run.
|
94
|
-
* @return either the input class (if a block was given) or the array of fonts.
|
95
94
|
*/
|
96
95
|
VALUE
|
97
96
|
Magick_fonts(VALUE class)
|
@@ -103,8 +102,8 @@ Magick_fonts(VALUE class)
|
|
103
102
|
|
104
103
|
exception = AcquireExceptionInfo();
|
105
104
|
type_info = GetTypeInfoList("*", &number_types, exception);
|
106
|
-
CHECK_EXCEPTION()
|
107
|
-
|
105
|
+
CHECK_EXCEPTION();
|
106
|
+
DestroyExceptionInfo(exception);
|
108
107
|
|
109
108
|
if (rb_block_given_p())
|
110
109
|
{
|
@@ -120,7 +119,7 @@ Magick_fonts(VALUE class)
|
|
120
119
|
ary = rb_ary_new2((long)number_types);
|
121
120
|
for (x = 0; x < number_types; x++)
|
122
121
|
{
|
123
|
-
|
122
|
+
rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
|
124
123
|
}
|
125
124
|
magick_free((void *)type_info);
|
126
125
|
RB_GC_GUARD(ary);
|
@@ -138,7 +137,7 @@ Magick_fonts(VALUE class)
|
|
138
137
|
* - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
|
139
138
|
* - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
|
140
139
|
* - "A" is "+" if the format supports multi-image files, or "-" otherwise.
|
141
|
-
*
|
140
|
+
*
|
142
141
|
* No Ruby usage (internal function)
|
143
142
|
*
|
144
143
|
* @param magick_info a MagickInfo object.
|
@@ -162,21 +161,13 @@ MagickInfo_to_format(const MagickInfo *magick_info)
|
|
162
161
|
* Build the @@formats hash. The hash keys are image formats. The hash values
|
163
162
|
* specify the format "mode string", i.e. a description of what ImageMagick can
|
164
163
|
* do with that format. The mode string is in the form "BRWA", where
|
165
|
-
* - "B" is "*" if the format has native blob support, or " " otherwise.
|
166
|
-
* - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
|
167
|
-
* - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
|
168
|
-
* - "A" is "+" if the format supports multi-image files, or "-" otherwise.
|
169
|
-
*
|
170
|
-
* Ruby usage:
|
171
|
-
* - @verbatim Magick.init_formats @endverbatim
|
172
164
|
*
|
173
|
-
*
|
174
|
-
*
|
175
|
-
*
|
165
|
+
* - "B" is "*" if the format has native blob support, or " " otherwise.
|
166
|
+
* - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
|
167
|
+
* - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
|
168
|
+
* - "A" is "+" if the format supports multi-image files, or "-" otherwise.
|
176
169
|
*
|
177
|
-
* @
|
178
|
-
* @return the formats hash.
|
179
|
-
* @see MagickInfo_to_format
|
170
|
+
* @return [Hash] the formats hash.
|
180
171
|
*/
|
181
172
|
VALUE
|
182
173
|
Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
|
@@ -191,15 +182,15 @@ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
|
|
191
182
|
// IM 6.1.3 added an exception argument to GetMagickInfoList
|
192
183
|
exception = AcquireExceptionInfo();
|
193
184
|
magick_info = GetMagickInfoList("*", &number_formats, exception);
|
194
|
-
CHECK_EXCEPTION()
|
195
|
-
|
185
|
+
CHECK_EXCEPTION();
|
186
|
+
DestroyExceptionInfo(exception);
|
196
187
|
|
197
188
|
|
198
189
|
for (x = 0; x < number_formats; x++)
|
199
190
|
{
|
200
|
-
|
201
|
-
|
202
|
-
|
191
|
+
rb_hash_aset(formats,
|
192
|
+
rb_str_new2(magick_info[x]->name),
|
193
|
+
MagickInfo_to_format((const MagickInfo *)magick_info[x]));
|
203
194
|
}
|
204
195
|
magick_free((void *)magick_info);
|
205
196
|
RB_GC_GUARD(formats);
|
@@ -211,14 +202,16 @@ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
|
|
211
202
|
* Get/set resource limits. If a limit is specified the old limit is set to the
|
212
203
|
* new value. Either way the current/old limit is returned.
|
213
204
|
*
|
214
|
-
*
|
215
|
-
*
|
216
|
-
*
|
205
|
+
* @overload limit_resource(resource)
|
206
|
+
* Get resource limits.
|
207
|
+
* @param resource [String, Symbol] the type of resource
|
217
208
|
*
|
218
|
-
* @
|
219
|
-
*
|
220
|
-
*
|
221
|
-
*
|
209
|
+
* @overload limit_resource(resource, limit)
|
210
|
+
* Set resource limits.
|
211
|
+
* @param resource [String, Symbol] the type of resource
|
212
|
+
* @param limit [Numeric] the new limit number
|
213
|
+
*
|
214
|
+
* @return [Numeric] the old limit.
|
222
215
|
*/
|
223
216
|
VALUE
|
224
217
|
Magick_limit_resource(int argc, VALUE *argv, VALUE class)
|
@@ -269,7 +262,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
|
|
269
262
|
break;
|
270
263
|
|
271
264
|
default:
|
272
|
-
str =
|
265
|
+
str = StringValueCStr(resource);
|
273
266
|
if (*str == '\0')
|
274
267
|
{
|
275
268
|
return class;
|
@@ -311,7 +304,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
|
|
311
304
|
|
312
305
|
if (argc > 1)
|
313
306
|
{
|
314
|
-
|
307
|
+
SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
|
315
308
|
}
|
316
309
|
|
317
310
|
RB_GC_GUARD(limit);
|
@@ -325,22 +318,14 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
|
|
325
318
|
* threshold is exceeded, all subsequent pixels cache operations are to/from
|
326
319
|
* disk.
|
327
320
|
*
|
328
|
-
*
|
329
|
-
* - @verbatim Magick.set_cache_threshold(megabytes) @endverbatim
|
330
|
-
*
|
331
|
-
* Notes:
|
332
|
-
* - singleton method
|
333
|
-
*
|
334
|
-
* @param class the class on which the method is run.
|
335
|
-
* @param threshold the number of megabytes to set.
|
336
|
-
* @return the class.
|
321
|
+
* @param threshold [Numeric] the number of megabytes to set.
|
337
322
|
*/
|
338
323
|
VALUE
|
339
324
|
Magick_set_cache_threshold(VALUE class, VALUE threshold)
|
340
325
|
{
|
341
326
|
unsigned long thrshld = NUM2ULONG(threshold);
|
342
|
-
|
343
|
-
|
327
|
+
SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
|
328
|
+
SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
|
344
329
|
return class;
|
345
330
|
}
|
346
331
|
|
@@ -348,32 +333,25 @@ Magick_set_cache_threshold(VALUE class, VALUE threshold)
|
|
348
333
|
/**
|
349
334
|
* Set the log event mask.
|
350
335
|
*
|
351
|
-
*
|
352
|
-
* - @verbatim Magick.set_log_event_mask(event) @endverbatim
|
353
|
-
* - @verbatim Magick.set_log_event_mask(event,...) @endverbatim
|
336
|
+
* The arguments are one of:
|
354
337
|
*
|
355
|
-
*
|
356
|
-
*
|
357
|
-
*
|
358
|
-
*
|
359
|
-
*
|
360
|
-
*
|
361
|
-
*
|
362
|
-
*
|
363
|
-
*
|
364
|
-
*
|
365
|
-
*
|
366
|
-
*
|
367
|
-
*
|
368
|
-
* - "user"
|
369
|
-
* - "x11"
|
370
|
-
* - Multiple events can be specified.
|
371
|
-
* - Event names may be capitalized.
|
338
|
+
* - "all"
|
339
|
+
* - "annotate"
|
340
|
+
* - "blob"
|
341
|
+
* - "cache"
|
342
|
+
* - "coder"
|
343
|
+
* - "configure"
|
344
|
+
* - "deprecate"
|
345
|
+
* - "locale"
|
346
|
+
* - "none"
|
347
|
+
* - "render"
|
348
|
+
* - "transform"
|
349
|
+
* - "user"
|
350
|
+
* - "x11"
|
372
351
|
*
|
373
|
-
*
|
374
|
-
*
|
375
|
-
* @param
|
376
|
-
* @return the class.
|
352
|
+
* Multiple events can be specified as the aruments. Event names may be capitalized.
|
353
|
+
*
|
354
|
+
* @param args [String] the mask of log event.
|
377
355
|
*/
|
378
356
|
VALUE
|
379
357
|
Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
|
@@ -386,38 +364,33 @@ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
|
|
386
364
|
}
|
387
365
|
for (x = 0; x < argc; x++)
|
388
366
|
{
|
389
|
-
|
367
|
+
SetLogEventMask(StringValueCStr(argv[x]));
|
390
368
|
}
|
391
369
|
return class;
|
392
370
|
}
|
393
371
|
|
394
372
|
/**
|
395
373
|
* Set the format for log messages.
|
396
|
-
*
|
397
|
-
* Ruby usage:
|
398
|
-
* - @verbatim Magick.set_log_format(format) @endverbatim
|
399
374
|
*
|
400
|
-
*
|
401
|
-
*
|
402
|
-
*
|
403
|
-
*
|
404
|
-
*
|
405
|
-
*
|
406
|
-
*
|
407
|
-
*
|
408
|
-
*
|
409
|
-
*
|
410
|
-
*
|
411
|
-
*
|
375
|
+
* Format is a string containing one or more of:
|
376
|
+
*
|
377
|
+
* - %t - current time
|
378
|
+
* - %r - elapsed time
|
379
|
+
* - %u - user time
|
380
|
+
* - %p - pid
|
381
|
+
* - %m - module (source file name)
|
382
|
+
* - %f - function name
|
383
|
+
* - %l - line number
|
384
|
+
* - %d - event domain (one of the events listed above)
|
385
|
+
* - %e - event name
|
386
|
+
* - Plus other characters, including \\n, etc.
|
412
387
|
*
|
413
|
-
* @param
|
414
|
-
* @param format the format to set.
|
415
|
-
* @return the class.
|
388
|
+
* @param format [String] the format to set.
|
416
389
|
*/
|
417
390
|
VALUE
|
418
391
|
Magick_set_log_format(VALUE class, VALUE format)
|
419
392
|
{
|
420
|
-
SetLogFormat(
|
393
|
+
SetLogFormat(StringValueCStr(format));
|
421
394
|
return class;
|
422
395
|
}
|
423
396
|
|
data/ext/RMagick/rmagick.h
CHANGED
@@ -25,6 +25,33 @@
|
|
25
25
|
#include "ruby.h"
|
26
26
|
#include "ruby/io.h"
|
27
27
|
|
28
|
+
#if defined(__MINGW32__)
|
29
|
+
// Ruby defines wrong format specifiers for MinGW. So this defines original macro in here.
|
30
|
+
#if SIZEOF_SIZE_T == SIZEOF_LONG
|
31
|
+
#define RMIuSIZE "lu"
|
32
|
+
#define RMIdSIZE "ld"
|
33
|
+
#define RMIsVALUE "li\v"
|
34
|
+
#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
35
|
+
#define RMIuSIZE "I64u"
|
36
|
+
#define RMIdSIZE "I64d"
|
37
|
+
#define RMIsVALUE "I64i\v"
|
38
|
+
#endif
|
39
|
+
#else
|
40
|
+
// Use constants defined in Ruby
|
41
|
+
#define RMIuSIZE PRIuSIZE
|
42
|
+
#define RMIdSIZE PRIdSIZE
|
43
|
+
#define RMIsVALUE PRIsVALUE
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#if defined(__GNUC__)
|
47
|
+
#pragma GCC diagnostic push
|
48
|
+
#pragma GCC diagnostic ignored "-Wdeclaration-after-statement"
|
49
|
+
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
|
50
|
+
|
51
|
+
#if __GNUC__ > 6
|
52
|
+
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
53
|
+
#endif
|
54
|
+
#endif
|
28
55
|
|
29
56
|
// Undef Ruby's versions of these symbols
|
30
57
|
#undef PACKAGE_VERSION
|
@@ -54,9 +81,11 @@
|
|
54
81
|
#define Q(q) Q2(q)
|
55
82
|
|
56
83
|
#ifdef __GNUC__
|
57
|
-
#define ATTRIBUTE_UNUSED
|
84
|
+
#define ATTRIBUTE_UNUSED __attribute__((unused))
|
85
|
+
#define ATTRIBUTE_NORETURN __attribute__((__noreturn__))
|
58
86
|
#else
|
59
87
|
#define ATTRIBUTE_UNUSED
|
88
|
+
#define ATTRIBUTE_NORETURN
|
60
89
|
#endif
|
61
90
|
|
62
91
|
//! Trace new image creation in bang methods
|
@@ -90,11 +119,11 @@
|
|
90
119
|
#define PIXEL_INTENSITY(q) ((Quantum)(0.299*(q)->red + 0.587*(q)->green + 0.114*(q)->blue + 0.5))
|
91
120
|
|
92
121
|
//! find maximum of longs
|
93
|
-
#define LMAX(a,b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
|
122
|
+
#define LMAX(a, b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
|
94
123
|
//! find maximum of floats
|
95
|
-
#define FMAX(a,b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
|
124
|
+
#define FMAX(a, b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
|
96
125
|
//! find minimum of floats
|
97
|
-
#define FMIN(a,b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
|
126
|
+
#define FMIN(a, b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
|
98
127
|
|
99
128
|
#define RMAGICK_PI 3.14159265358979 /**< pi */
|
100
129
|
|
@@ -111,7 +140,10 @@
|
|
111
140
|
*/
|
112
141
|
#define OBJ_TO_MAGICK_STRING(f, obj) \
|
113
142
|
if ((obj) != Qnil)\
|
114
|
-
|
143
|
+
{\
|
144
|
+
VALUE str = rb_String(obj);\
|
145
|
+
magick_clone_string(&f, StringValueCStr(str));\
|
146
|
+
}\
|
115
147
|
else\
|
116
148
|
f = NULL;
|
117
149
|
|
@@ -134,7 +166,16 @@ typedef ImageInfo Info; /**< Make type name match class name */
|
|
134
166
|
typedef PixelInfo MagickPixel;
|
135
167
|
typedef PixelInfo PixelColor;
|
136
168
|
#else
|
137
|
-
typedef
|
169
|
+
typedef struct _RMagickPixelPacket
|
170
|
+
{
|
171
|
+
Quantum
|
172
|
+
red,
|
173
|
+
green,
|
174
|
+
blue,
|
175
|
+
opacity,
|
176
|
+
black;
|
177
|
+
} RMagickPixelPacket;
|
178
|
+
typedef RMagickPixelPacket Pixel;
|
138
179
|
typedef MagickPixelPacket MagickPixel;
|
139
180
|
typedef PixelPacket PixelColor;
|
140
181
|
typedef AlphaChannelType AlphaChannelOption;
|
@@ -361,61 +402,36 @@ EXTERN ID rm_ID_changed; /**< "changed" */
|
|
361
402
|
EXTERN ID rm_ID_cur_image; /**< "cur_image" */
|
362
403
|
EXTERN ID rm_ID_dup; /**< "dup" */
|
363
404
|
EXTERN ID rm_ID_fill; /**< "fill" */
|
364
|
-
EXTERN ID rm_ID_flag; /**< "flag" */
|
365
|
-
EXTERN ID rm_ID_from_s; /**< "from_s" */
|
366
405
|
EXTERN ID rm_ID_Geometry; /**< "Geometry" */
|
367
|
-
EXTERN ID rm_ID_GeometryValue; /**< "GeometryValue" */
|
368
|
-
EXTERN ID rm_ID_has_key_q; /**< "has_key?" */
|
369
406
|
EXTERN ID rm_ID_height; /**< "height" */
|
370
407
|
EXTERN ID rm_ID_initialize_copy; /**< "initialize_copy" */
|
371
|
-
EXTERN ID rm_ID_length; /**< "length" */
|
372
408
|
EXTERN ID rm_ID_notify_observers; /**< "notify_observers" */
|
373
409
|
EXTERN ID rm_ID_new; /**< "new" */
|
374
410
|
EXTERN ID rm_ID_push; /**< "push" */
|
375
|
-
EXTERN ID rm_ID_spaceship; /**< "<=>" */
|
376
|
-
EXTERN ID rm_ID_to_i; /**< "to_i" */
|
377
|
-
EXTERN ID rm_ID_to_s; /**< "to_s" */
|
378
411
|
EXTERN ID rm_ID_values; /**< "values" */
|
379
412
|
EXTERN ID rm_ID_width; /**< "width" */
|
380
|
-
|
381
|
-
EXTERN
|
413
|
+
|
414
|
+
EXTERN unsigned long long rm_main_thread_id;
|
382
415
|
|
383
416
|
#if !defined(min)
|
384
|
-
#define min(a,b) ((a)<(b)?(a):(b)) /**< min of two values */
|
417
|
+
#define min(a, b) ((a)<(b)?(a):(b)) /**< min of two values */
|
385
418
|
#endif
|
386
419
|
#if !defined(max)
|
387
|
-
#define max(a,b) ((a)>(b)?(a):(b)) /**< max of two values */
|
420
|
+
#define max(a, b) ((a)>(b)?(a):(b)) /**< max of two values */
|
388
421
|
#endif
|
389
422
|
|
390
423
|
/**
|
391
424
|
Handle warnings & errors
|
392
425
|
*/
|
393
426
|
//! Handle warnings & errors
|
394
|
-
#define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError)
|
427
|
+
#define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError)
|
395
428
|
|
396
429
|
|
397
|
-
/*
|
398
|
-
Call rb_define_method for an attribute accessor method
|
399
|
-
*/
|
400
|
-
//! attribute reader
|
401
|
-
#define DCL_ATTR_READER(class, attr) \
|
402
|
-
rb_define_method(Class_##class, #attr, class##_##attr, 0);
|
403
|
-
//! attribute writer
|
404
|
-
#define DCL_ATTR_WRITER(class, attr) \
|
405
|
-
rb_define_method(Class_##class, #attr "=", class##_##attr##_eq, 1);
|
406
|
-
//! attribute accessor
|
407
|
-
#define DCL_ATTR_ACCESSOR(class, attr) \
|
408
|
-
DCL_ATTR_READER(class, attr) \
|
409
|
-
DCL_ATTR_WRITER(class, attr)
|
410
|
-
//! Borrow another class' attribute writer definition
|
411
|
-
#define SHARE_ATTR_WRITER(to, from, attr) \
|
412
|
-
rb_define_method(Class_##to, #attr "=", from##_##attr##_eq, 1);
|
413
|
-
|
414
430
|
/*
|
415
431
|
Define simple attribute accessor methods (boolean, int, string, and double types)
|
416
432
|
*/
|
417
|
-
#define
|
418
|
-
#define
|
433
|
+
#define C_boolean_to_R_boolean(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
|
434
|
+
#define R_boolean_to_C_boolean(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
|
419
435
|
#define C_int_to_R_int(attr) INT2FIX(attr) /**< C int -> Ruby int */
|
420
436
|
#define R_int_to_C_int(attr) NUM2INT(attr) /**< C int <- Ruby int */
|
421
437
|
#define C_long_to_R_long(attr) INT2NUM(attr) /**< C long -> Ruby long */
|
@@ -427,34 +443,31 @@ EXTERN ID rm_ID_y; /**< "y" */
|
|
427
443
|
#define R_dbl_to_C_dbl(attr) NUM2DBL(attr) /**< C double <- Ruby double */
|
428
444
|
|
429
445
|
//! define attribute reader
|
430
|
-
#define
|
431
|
-
VALUE class##_##attr(VALUE self)\
|
446
|
+
#define IMPLEMENT_ATTR_READER(class, attr, type) \
|
432
447
|
{\
|
433
448
|
class *ptr;\
|
434
449
|
if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
|
435
|
-
|
450
|
+
rm_check_destroyed(self); \
|
436
451
|
}\
|
437
452
|
Data_Get_Struct(self, class, ptr);\
|
438
453
|
return C_##type##_to_R_##type(ptr->attr);\
|
439
454
|
}
|
440
455
|
|
441
456
|
//! define attribute reader when attribute name is different from the field name
|
442
|
-
#define
|
443
|
-
VALUE class##_##attr(VALUE self)\
|
457
|
+
#define IMPLEMENT_ATTR_READERF(class, attr, field, type) \
|
444
458
|
{\
|
445
459
|
class *ptr;\
|
446
|
-
|
460
|
+
rm_check_destroyed(self); \
|
447
461
|
Data_Get_Struct(self, class, ptr);\
|
448
462
|
return C_##type##_to_R_##type(ptr->field);\
|
449
463
|
}
|
450
464
|
|
451
465
|
//! define attribute writer
|
452
|
-
#define
|
453
|
-
VALUE class##_##attr##_eq(VALUE self, VALUE val)\
|
466
|
+
#define IMPLEMENT_ATTR_WRITER(class, attr, type) \
|
454
467
|
{\
|
455
468
|
class *ptr;\
|
456
469
|
if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
|
457
|
-
|
470
|
+
rm_check_destroyed(self); \
|
458
471
|
}\
|
459
472
|
rb_check_frozen(self);\
|
460
473
|
Data_Get_Struct(self, class, ptr);\
|
@@ -463,12 +476,11 @@ EXTERN ID rm_ID_y; /**< "y" */
|
|
463
476
|
}
|
464
477
|
|
465
478
|
//! define attribute writer when attribute name is different from the field name
|
466
|
-
#define
|
467
|
-
VALUE class##_##attr##_eq(VALUE self, VALUE val)\
|
479
|
+
#define IMPLEMENT_ATTR_WRITERF(class, attr, field, type) \
|
468
480
|
{\
|
469
481
|
class *ptr;\
|
470
482
|
if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
|
471
|
-
|
483
|
+
rm_check_destroyed(self); \
|
472
484
|
}\
|
473
485
|
rb_check_frozen(self);\
|
474
486
|
Data_Get_Struct(self, class, ptr);\
|
@@ -476,15 +488,6 @@ EXTERN ID rm_ID_y; /**< "y" */
|
|
476
488
|
return self;\
|
477
489
|
}
|
478
490
|
|
479
|
-
//! define attribute accessor
|
480
|
-
#define DEF_ATTR_ACCESSOR(class, attr, type)\
|
481
|
-
DEF_ATTR_READER(class, attr, type)\
|
482
|
-
DEF_ATTR_WRITER(class, attr, type)
|
483
|
-
|
484
|
-
//! define attribute accessor when attribute name is different from the field name
|
485
|
-
#define DEF_ATTR_ACCESSORF(class, attr, field, type)\
|
486
|
-
DEF_ATTR_READERF(class, attr, field, type)\
|
487
|
-
DEF_ATTR_WRITERF(class, attr, field, type)
|
488
491
|
|
489
492
|
/*
|
490
493
|
* Declare attribute accessors
|
@@ -516,8 +519,8 @@ EXTERN ID rm_ID_y; /**< "y" */
|
|
516
519
|
do {\
|
517
520
|
MagickEnum *magick_enum;\
|
518
521
|
if (CLASS_OF(value) != Class_##type)\
|
519
|
-
rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s"\
|
520
|
-
|
522
|
+
rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s", \
|
523
|
+
rb_class2name(Class_##type), rb_class2name(CLASS_OF(value)));\
|
521
524
|
Data_Get_Struct(value, MagickEnum, magick_enum);\
|
522
525
|
e = (type)(magick_enum->val);\
|
523
526
|
} while(0)
|
@@ -779,7 +782,7 @@ ATTR_ACCESSOR(Image, x_resolution)
|
|
779
782
|
ATTR_ACCESSOR(Image, y_resolution)
|
780
783
|
|
781
784
|
extern ChannelType extract_channels(int *, VALUE *);
|
782
|
-
extern void raise_ChannelType_error(VALUE);
|
785
|
+
extern void raise_ChannelType_error(VALUE) ATTRIBUTE_NORETURN;
|
783
786
|
extern void add_format_prefix(Info *, VALUE);
|
784
787
|
|
785
788
|
extern VALUE Image_alloc(VALUE);
|
@@ -821,7 +824,11 @@ extern VALUE Image_compare_channel(int, VALUE *, VALUE);
|
|
821
824
|
extern VALUE Image_channel_depth(int, VALUE *, VALUE);
|
822
825
|
extern VALUE Image_channel_extrema(int, VALUE *, VALUE);
|
823
826
|
extern VALUE Image_channel_mean(int, VALUE *, VALUE);
|
827
|
+
#if defined(HAVE_GETIMAGECHANNELENTROPY) || defined(IMAGEMAGICK_7)
|
824
828
|
extern VALUE Image_channel_entropy(int, VALUE *, VALUE);
|
829
|
+
#else
|
830
|
+
extern VALUE Image_channel_entropy(int, VALUE *, VALUE) ATTRIBUTE_NORETURN;
|
831
|
+
#endif
|
825
832
|
extern VALUE Image_charcoal(int, VALUE *, VALUE);
|
826
833
|
extern VALUE Image_chop(VALUE, VALUE, VALUE, VALUE, VALUE);
|
827
834
|
extern VALUE Image_clone(VALUE);
|
@@ -1098,6 +1105,7 @@ extern VALUE ChromaticityInfo_to_s(VALUE);
|
|
1098
1105
|
extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
|
1099
1106
|
extern void Color_to_PixelColor(PixelColor *, VALUE);
|
1100
1107
|
extern void Color_to_MagickPixel(Image *, MagickPixel *, VALUE);
|
1108
|
+
extern void Color_to_Pixel(Pixel *, VALUE);
|
1101
1109
|
extern VALUE Color_to_s(VALUE);
|
1102
1110
|
extern VALUE Import_ColorInfo(const ColorInfo *);
|
1103
1111
|
extern VALUE Font_to_s(VALUE);
|
@@ -1132,7 +1140,6 @@ extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
|
|
1132
1140
|
extern void *magick_malloc(const size_t);
|
1133
1141
|
extern void *magick_safe_malloc(const size_t, const size_t);
|
1134
1142
|
extern void magick_free(void *);
|
1135
|
-
extern void *magick_realloc(void *, const size_t);
|
1136
1143
|
extern void *magick_safe_realloc(void *, const size_t, const size_t);
|
1137
1144
|
extern void magick_clone_string(char **, const char *);
|
1138
1145
|
extern Image *rm_acquire_image(ImageInfo *);
|
@@ -1141,26 +1148,25 @@ extern VALUE rm_pixelcolor_to_color_name(Image *, PixelColor *);
|
|
1141
1148
|
extern VALUE rm_pixelcolor_to_color_name_info(Info *, PixelColor *);
|
1142
1149
|
extern void rm_init_magickpixel(const Image *, MagickPixel *);
|
1143
1150
|
extern void rm_set_magickpixel(MagickPixel *, const char *);
|
1144
|
-
extern VALUE rm_no_freeze(VALUE);
|
1151
|
+
extern VALUE rm_no_freeze(VALUE) ATTRIBUTE_NORETURN;
|
1145
1152
|
extern int rm_strcasecmp(const char *, const char *);
|
1146
1153
|
extern int rm_strncasecmp(const char *, const char *, size_t);
|
1154
|
+
extern size_t rm_strnlen_s(const char *, size_t);
|
1147
1155
|
extern void rm_check_ary_len(VALUE, long);
|
1148
1156
|
extern VALUE rm_check_ary_type(VALUE ary);
|
1149
1157
|
extern Image *rm_check_destroyed(VALUE);
|
1150
1158
|
extern Image *rm_check_frozen(VALUE);
|
1151
|
-
extern VALUE rm_to_s(VALUE);
|
1152
1159
|
extern char *rm_str2cstr(VALUE, long *);
|
1153
1160
|
extern int rm_check_num2dbl(VALUE);
|
1154
1161
|
extern double rm_fuzz_to_dbl(VALUE);
|
1155
1162
|
extern Quantum rm_app2quantum(VALUE);
|
1156
|
-
extern double rm_percentage(VALUE,double);
|
1163
|
+
extern double rm_percentage(VALUE, double);
|
1157
1164
|
extern double rm_str_to_pct(VALUE);
|
1158
1165
|
extern VALUE rm_define_enum_type(const char *);
|
1159
|
-
extern void rm_write_temp_image(Image *, char
|
1166
|
+
extern void rm_write_temp_image(Image *, char *, size_t);
|
1160
1167
|
extern void rm_delete_temp_image(char *);
|
1161
|
-
extern void rm_not_implemented(void);
|
1168
|
+
extern void rm_not_implemented(void) ATTRIBUTE_NORETURN;
|
1162
1169
|
extern void rm_attr_write(VALUE, VALUE);
|
1163
|
-
extern void rm_get_geometry(VALUE, long *, long *, unsigned long *, unsigned long *, int *);
|
1164
1170
|
extern const char *rm_get_property(const Image *, const char *);
|
1165
1171
|
extern MagickBooleanType rm_set_property(Image *, const char *, const char *);
|
1166
1172
|
extern void rm_set_user_artifact(Image *, Info *);
|
@@ -1188,11 +1194,12 @@ extern MagickBooleanType rm_progress_monitor(const char *, const MagickOffsetTyp
|
|
1188
1194
|
extern VALUE rm_exif_by_entry(Image *);
|
1189
1195
|
extern VALUE rm_exif_by_number(Image *);
|
1190
1196
|
extern void rm_get_optional_arguments(VALUE);
|
1191
|
-
extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *);
|
1197
|
+
extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *) ATTRIBUTE_NORETURN;
|
1192
1198
|
extern void rm_error_handler(const ExceptionType, const char *, const char *);
|
1193
1199
|
extern void rm_warning_handler(const ExceptionType, const char *, const char *);
|
1194
1200
|
extern MagickBooleanType rm_should_raise_exception(ExceptionInfo *, const ExceptionRetention);
|
1195
1201
|
extern void rm_raise_exception(ExceptionInfo *);
|
1202
|
+
extern unsigned long long rm_current_thread_id();
|
1196
1203
|
#if defined(IMAGEMAGICK_6)
|
1197
1204
|
extern void rm_check_image_exception(Image *, ErrorRetention);
|
1198
1205
|
#endif
|