ext/RMagick/rmmain.c in rmagick-1.15.17 vs ext/RMagick/rmmain.c in rmagick-2.0.0

- old
+ new

@@ -1,8 +1,8 @@ -/* $Id: rmmain.c,v 1.159.2.2.2.3 2008/11/25 23:21:15 rmagick Exp $ */ +/* $Id: rmmain.c,v 1.228 2007/12/26 21:43:52 rmagick Exp $ */ /*============================================================================\ -| Copyright (C) 2008 by Timothy P. Hunter +| Copyright (C) 2007 by Timothy P. Hunter | Name: rmmain.c | Author: Tim Hunter | Purpose: Contains all module, class, method declarations. | Defines all constants | Contains Magick module methods. @@ -19,12 +19,10 @@ static void test_Magick_version(void); static void version_constants(void); -#define MAGICK_MONITOR_CVAR "@@__rmagick_monitor__" -static VALUE Magick_Monitor; /* Method: Magick::colors [ { |colorinfo| } ] Purpose: If called with the optional block, iterates over the colors, otherwise returns an array of Magick::Color objects @@ -32,217 +30,82 @@ */ VALUE Magick_colors(VALUE class) { -#if defined(HAVE_GETCOLORINFOARRAY) // GraphicsMagick - ColorInfo **color_ary; - ExceptionInfo exception; - volatile VALUE ary; - int x; - - GetExceptionInfo(&exception); - - color_ary = GetColorInfoArray(&exception); - CHECK_EXCEPTION() - (void) DestroyExceptionInfo(&exception); - - - if (rb_block_given_p()) - { - x = 0; - while(color_ary[x]) - { - rb_yield(Color_from_ColorInfo(color_ary[x])); - x += 1; - } - magick_free(color_ary); - return class; - } - else - { - ary = rb_ary_new(); - - x = 0; - while (color_ary[x]) - { - rb_ary_push(ary, Color_from_ColorInfo(color_ary[x])); - x += 1; - } - magick_free(color_ary); - return ary; - } - -#elif defined(HAVE_GETCOLORINFOLIST) // ImageMagick 6.0.0 - const ColorInfo **color_info_list; unsigned long number_colors, x; volatile VALUE ary; - -#if defined(HAVE_OLD_GETCOLORINFOLIST) - color_info_list = GetColorInfoList("*", &number_colors); - -#else - // IM 6.1.3 added an exception parm to GetColorInfoList ExceptionInfo exception; GetExceptionInfo(&exception); color_info_list = GetColorInfoList("*", &number_colors, &exception); CHECK_EXCEPTION() (void) DestroyExceptionInfo(&exception); -#endif - if (rb_block_given_p()) { - for(x = 0; x < number_colors; x++) + for (x = 0; x < number_colors; x++) { (void) rb_yield(Color_from_ColorInfo(color_info_list[x])); } magick_free(color_info_list); return class; } else { ary = rb_ary_new2((long) number_colors); - for(x = 0; x < number_colors; x++) + for (x = 0; x < number_colors; x++) { (void) rb_ary_push(ary, Color_from_ColorInfo(color_info_list[x])); } magick_free(color_info_list); return ary; } - -#else // ImageMagick < 6.0.0 - - const ColorInfo *color_list; - ColorInfo *color; - ExceptionInfo exception; - volatile VALUE ary, el; - - GetExceptionInfo(&exception); - - color_list = GetColorInfo("*", &exception); - (void) DestroyExceptionInfo(&exception); - - // The order of the colors list can change in mid-iteration, - // so the only way we can guarantee a single pass thru the list - // is to copy the elements into an array without returning to - // IM. So, we always create a Ruby array and either return it - // or iterate over it. - ary = rb_ary_new(); - for (color = (ColorInfo *)color_list; color; color = color->next) - { - rb_ary_push(ary, Color_from_ColorInfo(color)); - } - - // If block, iterate over colors - if (rb_block_given_p()) - { - while ((el = rb_ary_shift(ary)) != Qnil) - { - rb_yield(el); - } - return class; - } - else - { - return ary; - } - -#endif } /* Method: Magick::fonts [ { |fontinfo| } ] Purpose: If called with the optional block, iterates over the fonts, otherwise returns an array of Magick::Font objects */ VALUE Magick_fonts(VALUE class) { -#if defined(HAVE_GETTYPEINFOLIST) // ImageMagick 6.0.0 - const TypeInfo **type_info; unsigned long number_types, x; volatile VALUE ary; - -#if defined(HAVE_OLD_GETTYPEINFOLIST) - type_info = GetTypeInfoList("*", &number_types); - -#else - // IM 6.1.3 added an exception argument to GetTypeInfoList ExceptionInfo exception; GetExceptionInfo(&exception); type_info = GetTypeInfoList("*", &number_types, &exception); CHECK_EXCEPTION() (void) DestroyExceptionInfo(&exception); -#endif - if (rb_block_given_p()) { - for(x = 0; x < number_types; x++) + for (x = 0; x < number_types; x++) { (void) rb_yield(Font_from_TypeInfo((TypeInfo *)type_info[x])); } magick_free(type_info); return class; } else { ary = rb_ary_new2((long)number_types); - for(x = 0; x < number_types; x++) + for (x = 0; x < number_types; x++) { (void) rb_ary_push(ary, Font_from_TypeInfo((TypeInfo *)type_info[x])); } magick_free(type_info); return ary; } -#else - - const TypeInfo *type_list; - TypeInfo *type, *next; - ExceptionInfo exception; - volatile VALUE ary; - - GetExceptionInfo(&exception); - - type_list = GetTypeInfo("*", &exception); - CHECK_EXCEPTION() - (void) DestroyExceptionInfo(&exception); - - // If block, iterate over fonts - if (rb_block_given_p()) - { - for (type = (TypeInfo *)type_list; type; type = next) - { - next = type->next; // Protect against recursive calls to GetTypeInfo - if (! type->stealth) - { - rb_yield(Font_from_TypeInfo(type)); - } - } - - return class; - } - else - { - ary = rb_ary_new(); - for (type = (TypeInfo *)type_list; type; type = type->next) - { - rb_ary_push(ary, Font_from_TypeInfo(type)); - } - return ary; - } - -#endif } /* Method: Magick.init_formats @@ -273,88 +136,32 @@ } VALUE Magick_init_formats(VALUE class) { -#if defined(HAVE_GETMAGICKINFOARRAY) // GraphicsMagick - - MagickInfo *magick_info, *m; - volatile VALUE formats; - ExceptionInfo exception; - - class = class; // defeat "never referenced" message from icc - - formats = rb_hash_new(); - - GetExceptionInfo(&exception); - magick_info = (MagickInfo *)GetMagickInfoArray(&exception); - CHECK_EXCEPTION() - (void) DestroyExceptionInfo(&exception); - - for(m = magick_info; m != NULL; m = m->next) - { - rb_hash_aset(formats, rb_str_new2(m->name), MagickInfo_to_format(m)); - } - - magick_free(magick_info); - return formats; - -#elif defined(HAVE_GETMAGICKINFOLIST) // ImageMagick 6.0.0 - const MagickInfo **magick_info; unsigned long number_formats, x; volatile VALUE formats; -#if !defined(HAVE_OLD_GETMAGICKINFOLIST) ExceptionInfo exception; -#endif class = class; // defeat "never referenced" message from icc formats = rb_hash_new(); -#if defined(HAVE_OLD_GETMAGICKINFOLIST) - magick_info = GetMagickInfoList("*", &number_formats); - -#else // IM 6.1.3 added an exception argument to GetMagickInfoList GetExceptionInfo(&exception); magick_info = GetMagickInfoList("*", &number_formats, &exception); CHECK_EXCEPTION() (void) DestroyExceptionInfo(&exception); -#endif - for(x = 0; x < number_formats; x++) + for (x = 0; x < number_formats; x++) { (void) rb_hash_aset(formats - , rb_str_new2(magick_info[x]->name) - , MagickInfo_to_format((MagickInfo *)magick_info[x])); + , rb_str_new2(magick_info[x]->name) + , MagickInfo_to_format((MagickInfo *)magick_info[x])); } return formats; - -#else - - MagickInfo *m; - volatile VALUE formats; - ExceptionInfo exception; - - class = class; // defeat "never referenced" message from icc - - formats = rb_hash_new(); - - GetExceptionInfo(&exception); - m = (MagickInfo *)GetMagickInfo("*", &exception); - CHECK_EXCEPTION() - (void) DestroyExceptionInfo(&exception); - - for ( ; m != NULL; m = m->next) - { - rb_hash_aset(formats, rb_str_new2(m->name), MagickInfo_to_format(m)); - } - - return formats; - -#endif } /* Method: Magick.limit_resource(resource[, limit]) @@ -363,11 +170,10 @@ Notes: Don't support "AreaLimit" because GraphicsMagick doesn't support it. */ static VALUE Magick_limit_resource(int argc, VALUE *argv, VALUE class) { -#if defined(HAVE_GETMAGICKRESOURCELIMIT) volatile VALUE resource, limit; ResourceType res = UndefinedResource; char *str; ID id; unsigned long cur_limit; @@ -402,11 +208,11 @@ rb_raise(rb_eArgError, "unknown resource: `:%s'", rb_id2name(id)); } break; default: - str = STRING_PTR(resource); + str = StringValuePtr(resource); if (*str == '\0') { return class; } else if (rm_strcasecmp("memory", str) == 0) @@ -438,97 +244,20 @@ { (void) SetMagickResourceLimit(res, NUM2ULONG(limit)); } return ULONG2NUM(cur_limit); -#else - rm_not_implemented(); - return (VALUE)0; -#endif } -/* - This is the exit known to ImageMagick. Retrieve the monitor - proc and call it, passing the 3 exit arguments. -*/ -static unsigned int -monitor_handler( - const char *text, - const magick_int64_t quantum, - const magick_uint64_t span, - ExceptionInfo *exception) -{ - volatile VALUE monitor; - volatile VALUE args[3]; - exception = exception; // defeat "never referenced" message from icc - - if (rb_cvar_defined(Module_Magick, Magick_Monitor) == Qtrue) - { - args[0] = rb_str_new2(text); - // Convert these possibly-64-bit types to 32-bit types that - // Ruby can handle. - args[1] = INT2NUM((long) quantum); - args[2] = UINT2NUM((unsigned long) span); - - monitor = rb_cvar_get(Module_Magick, Magick_Monitor); - (void) rb_funcall2((VALUE)monitor, rm_ID_call, 3, (VALUE *)args); - } - - return True; -} - /* - Method: Magick.set_monitor(&monitor) - Purpose: Establish MagickMonitor exit - Notes: use nil argument to turn off monitoring -*/ -static VALUE -Magick_set_monitor(VALUE class, VALUE monitor) -{ - - // 1st time: establish ID, define @@__MAGICK_MONITOR__ - // class variable, stow monitor VALUE in it. - if (!Magick_Monitor) - { - Magick_Monitor = rb_intern(MAGICK_MONITOR_CVAR); - rb_define_class_variable(Module_Magick, MAGICK_MONITOR_CVAR, monitor); - -#if defined(HAVE_SETIMAGEPROGRESSMONITOR) - rb_warning("Magick.set_monitor is deprecated; use Image#monitor= or Image::Info#monitor= instead."); -#endif - - } - - // If nil, turn off monitoring. - if (monitor == Qnil) - { - (void) SetMonitorHandler(NULL); - } - else - // Otherwise, store monitor in @@__MAGICK_MONITOR__ - { - // 1.8.0 deletes rb_cvar_declare and adds another - // parm to rb_cvar_set - if rb_cvar_declare is - // available, use the 3-parm version of rb_cvar_set. - RUBY18(rb_cvar_set(Module_Magick, Magick_Monitor, monitor, 0);) - RUBY16(rb_cvar_set(Module_Magick, Magick_Monitor, monitor);) - (void) SetMonitorHandler((MonitorHandler)&monitor_handler); - } - - return class; -} - -/* Method Magick.set_cache_threshold(megabytes) Purpose: sets the amount of free memory allocated for the pixel cache. Once this threshold is exceeded, all subsequent pixels cache operations are to/from disk. Notes: singleton method - Pre-5.5.1 this method called the SetCacheThreshold - function, which is deprecated in 5.5.1. */ static VALUE Magick_set_cache_threshold(VALUE class, VALUE threshold) { unsigned long thrshld = NUM2ULONG(threshold); @@ -553,11 +282,11 @@ { rb_raise(rb_eArgError, "wrong number of arguments (at least 1 required)"); } for (x = 0; x < argc; x++) { - (void) SetLogEventMask(STRING_PTR(argv[x])); + (void) SetLogEventMask(StringValuePtr(argv[x])); } return class; } /* @@ -575,37 +304,43 @@ Plus other characters, including \n, etc. */ static VALUE Magick_set_log_format(VALUE class, VALUE format) { - SetLogFormat(STRING_PTR(format)); + SetLogFormat(StringValuePtr(format)); return class; } /* - External: Init_RMagick + External: Init_RMagick2 Purpose: define the classes and constants Arguments: void Returns: void */ void -Init_RMagick(void) +Init_RMagick2(void) { volatile VALUE observable; +#if defined(HAVE_MagickCoreGenesis) + MagickCoreGenesis("RMagick", MagickFalse); +#else InitializeMagick("RMagick"); +#endif + test_Magick_version(); Module_Magick = rb_define_module("Magick"); /*-----------------------------------------------------------------------*/ /* Create IDs for frequently used methods, etc. */ /*-----------------------------------------------------------------------*/ + rm_ID_trace_proc = rb_intern("@trace_proc"); rm_ID__dummy_img_ = rb_intern("_dummy_img_"); rm_ID_call = rb_intern("call"); rm_ID_changed = rb_intern("changed"); rm_ID_cur_image = rb_intern("cur_image"); rm_ID_dup = rb_intern("dup"); @@ -620,11 +355,12 @@ rm_ID_length = rb_intern("length"); rm_ID_notify_observers = rb_intern("notify_observers"); rm_ID_new = rb_intern("new"); rm_ID_push = rb_intern("push"); rm_ID_spaceship = rb_intern("<=>"); - rm_ID__tmpnam_ = rb_intern("@@_tmpnam_"); + rm_ID__tmpnam_ = rb_intern("_tmpnam_"); + rm_ID_to_i = rb_intern("to_i"); rm_ID_to_s = rb_intern("to_s"); rm_ID_values = rb_intern("values"); rm_ID_width = rb_intern("width"); rm_ID_x = rb_intern("x"); rm_ID_y = rb_intern("y"); @@ -635,11 +371,10 @@ rb_define_module_function(Module_Magick, "colors", Magick_colors, 0); rb_define_module_function(Module_Magick, "fonts", Magick_fonts, 0); rb_define_module_function(Module_Magick, "init_formats", Magick_init_formats, 0); rb_define_module_function(Module_Magick, "limit_resource", Magick_limit_resource, -1); - rb_define_module_function(Module_Magick, "set_monitor", Magick_set_monitor, 1); rb_define_module_function(Module_Magick, "set_cache_threshold", Magick_set_cache_threshold, 1); rb_define_module_function(Module_Magick, "set_log_event_mask", Magick_set_log_event_mask, -1); rb_define_module_function(Module_Magick, "set_log_format", Magick_set_log_format, 1); /*-----------------------------------------------------------------------*/ @@ -649,26 +384,23 @@ Class_Image = rb_define_class_under(Module_Magick, "Image", rb_cObject); // Define an alias for Object#display before we override it rb_define_alias(Class_Image, "__display__", "display"); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_Image, Image_alloc); rb_define_method(Class_Image, "initialize", Image_initialize, -1); -#else - rb_define_singleton_method(Class_Image, "new", Image_new, -1); - rb_define_method(Class_Image, "initialize", Image_initialize, 4); -#endif + rb_define_singleton_method(Class_Image, "combine", Image_combine, -1); rb_define_singleton_method(Class_Image, "constitute", Image_constitute, 4); rb_define_singleton_method(Class_Image, "_load", Image__load, 1); rb_define_singleton_method(Class_Image, "capture", Image_capture, -1); rb_define_singleton_method(Class_Image, "ping", Image_ping, 1); rb_define_singleton_method(Class_Image, "read", Image_read, 1); rb_define_singleton_method(Class_Image, "read_inline", Image_read_inline, 1); rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, 1); + DCL_ATTR_WRITER(Image, alpha) DCL_ATTR_ACCESSOR(Image, background_color) DCL_ATTR_READER(Image, base_columns) DCL_ATTR_READER(Image, base_filename) DCL_ATTR_READER(Image, base_rows) DCL_ATTR_ACCESSOR(Image, bias) @@ -695,40 +427,38 @@ DCL_ATTR_ACCESSOR(Image, filter) DCL_ATTR_ACCESSOR(Image, format) DCL_ATTR_ACCESSOR(Image, fuzz) DCL_ATTR_ACCESSOR(Image, gamma) DCL_ATTR_ACCESSOR(Image, geometry) - DCL_ATTR_ACCESSOR(Image, image_type) + DCL_ATTR_ACCESSOR(Image, gravity) + DCL_ATTR_READER(Image, image_type) DCL_ATTR_ACCESSOR(Image, interlace) DCL_ATTR_ACCESSOR(Image, iptc_profile) DCL_ATTR_ACCESSOR(Image, iterations) // do not document! Only used by Image#iterations= DCL_ATTR_ACCESSOR(Image, mask) DCL_ATTR_ACCESSOR(Image, matte) DCL_ATTR_ACCESSOR(Image, matte_color) DCL_ATTR_READER(Image, mean_error_per_pixel) DCL_ATTR_READER(Image, mime_type) DCL_ATTR_WRITER(Image, monitor) - DCL_ATTR_ACCESSOR(Image, montage) + DCL_ATTR_READER(Image, montage) DCL_ATTR_READER(Image, normalized_mean_error) DCL_ATTR_READER(Image, normalized_maximum_error) DCL_ATTR_READER(Image, number_colors) DCL_ATTR_ACCESSOR(Image, offset) DCL_ATTR_WRITER(Image, opacity) DCL_ATTR_ACCESSOR(Image, orientation) DCL_ATTR_ACCESSOR(Image, page) DCL_ATTR_ACCESSOR(Image, pixel_interpolation_method) -#if defined(HAVE_IMAGE_QUALITY) DCL_ATTR_READER(Image, quality) -#endif DCL_ATTR_READER(Image, quantum_depth) DCL_ATTR_ACCESSOR(Image, rendering_intent) DCL_ATTR_READER(Image, rows) DCL_ATTR_READER(Image, scene) DCL_ATTR_ACCESSOR(Image, start_loop) DCL_ATTR_ACCESSOR(Image, class_type) DCL_ATTR_ACCESSOR(Image, ticks_per_second) - DCL_ATTR_ACCESSOR(Image, tile_info) DCL_ATTR_READER(Image, total_colors) DCL_ATTR_ACCESSOR(Image, transparent_color) DCL_ATTR_ACCESSOR(Image, units) DCL_ATTR_ACCESSOR(Image, virtual_pixel_method) DCL_ATTR_ACCESSOR(Image, x_resolution) @@ -760,17 +490,18 @@ rb_define_method(Class_Image, "change_geometry!", Image_change_geometry, 1); rb_define_method(Class_Image, "changed?", Image_changed_q, 0); rb_define_method(Class_Image, "channel", Image_channel, 1); // An alias for compare_channel rb_define_method(Class_Image, "channel_compare", Image_compare_channel, -1); + rb_define_method(Class_Image, "check_destroyed", Image_check_destroyed, 0); rb_define_method(Class_Image, "compare_channel", Image_compare_channel, -1); rb_define_method(Class_Image, "channel_depth", Image_channel_depth, -1); rb_define_method(Class_Image, "channel_extrema", Image_channel_extrema, -1); rb_define_method(Class_Image, "channel_mean", Image_channel_mean, -1); - rb_define_method(Class_Image, "channel_threshold", Image_channel_threshold, -1); rb_define_method(Class_Image, "charcoal", Image_charcoal, -1); rb_define_method(Class_Image, "chop", Image_chop, 4); + rb_define_method(Class_Image, "clut_channel", Image_clut_channel, -1); rb_define_method(Class_Image, "clone", Image_clone, 0); rb_define_method(Class_Image, "color_flood_fill", Image_color_flood_fill, 5); rb_define_method(Class_Image, "color_histogram", Image_color_histogram, 0); rb_define_method(Class_Image, "colorize", Image_colorize, -1); rb_define_method(Class_Image, "colormap", Image_colormap, -1); @@ -788,26 +519,33 @@ rb_define_method(Class_Image, "crop", Image_crop, -1); rb_define_method(Class_Image, "crop!", Image_crop_bang, -1); rb_define_method(Class_Image, "cycle_colormap", Image_cycle_colormap, 1); rb_define_method(Class_Image, "delete_profile", Image_delete_profile, 1); rb_define_method(Class_Image, "despeckle", Image_despeckle, 0); + rb_define_method(Class_Image, "destroy!", Image_destroy_bang, 0); + rb_define_method(Class_Image, "destroyed?", Image_destroyed_q, 0); rb_define_method(Class_Image, "difference", Image_difference, 1); rb_define_method(Class_Image, "dispatch", Image_dispatch, -1); rb_define_method(Class_Image, "displace", Image_displace, -1); rb_define_method(Class_Image, "display", Image_display, 0); rb_define_method(Class_Image, "dissolve", Image_dissolve, -1); + rb_define_method(Class_Image, "distort", Image_distort, -1); rb_define_method(Class_Image, "distortion_channel", Image_distortion_channel, -1); rb_define_method(Class_Image, "_dump", Image__dump, 1); rb_define_method(Class_Image, "dup", Image_dup, 0); rb_define_method(Class_Image, "each_profile", Image_each_profile, 0); rb_define_method(Class_Image, "edge", Image_edge, -1); rb_define_method(Class_Image, "emboss", Image_emboss, -1); rb_define_method(Class_Image, "enhance", Image_enhance, 0); rb_define_method(Class_Image, "equalize", Image_equalize, 0); + rb_define_method(Class_Image, "equalize_channel", Image_equalize_channel, -1); rb_define_method(Class_Image, "erase!", Image_erase_bang, 0); + rb_define_method(Class_Image, "excerpt", Image_excerpt, 4); + rb_define_method(Class_Image, "excerpt!", Image_excerpt_bang, 4); rb_define_method(Class_Image, "export_pixels", Image_export_pixels, -1); rb_define_method(Class_Image, "export_pixels_to_str", Image_export_pixels_to_str, -1); + rb_define_method(Class_Image, "extent", Image_extent, -1); rb_define_method(Class_Image, "find_similar_region", Image_find_similar_region, -1); rb_define_method(Class_Image, "flip", Image_flip, 0); rb_define_method(Class_Image, "flip!", Image_flip_bang, 0); rb_define_method(Class_Image, "flop", Image_flop, 0); rb_define_method(Class_Image, "flop!", Image_flop_bang, 0); @@ -817,11 +555,11 @@ rb_define_method(Class_Image, "gaussian_blur", Image_gaussian_blur, -1); rb_define_method(Class_Image, "gaussian_blur_channel", Image_gaussian_blur_channel, -1); rb_define_method(Class_Image, "get_pixels", Image_get_pixels, 4); rb_define_method(Class_Image, "gray?", Image_gray_q, 0); rb_define_method(Class_Image, "grey?", Image_gray_q, 0); - rb_define_method(Class_Image, "grayscale_pseudo_class", Image_grayscale_pseudo_class, -1); + rb_define_method(Class_Image, "histogram?", Image_histogram_q, 0); rb_define_method(Class_Image, "implode", Image_implode, -1); rb_define_method(Class_Image, "import_pixels", Image_import_pixels, -1); rb_define_method(Class_Image, "initialize_copy", Image_init_copy, 1); rb_define_method(Class_Image, "inspect", Image_inspect, 0); rb_define_method(Class_Image, "level2", Image_level2, -1); @@ -855,11 +593,10 @@ rb_define_method(Class_Image, "quantize", Image_quantize, -1); rb_define_method(Class_Image, "quantum_operator", Image_quantum_operator, -1); rb_define_method(Class_Image, "radial_blur", Image_radial_blur, 1); rb_define_method(Class_Image, "radial_blur_channel", Image_radial_blur_channel, -1); rb_define_method(Class_Image, "raise", Image_raise, -1); - rb_define_method(Class_Image, "random_channel_threshold", Image_random_channel_threshold, 2); rb_define_method(Class_Image, "random_threshold_channel", Image_random_threshold_channel, -1); rb_define_method(Class_Image, "recolor", Image_recolor, 1); rb_define_method(Class_Image, "reduce_noise", Image_reduce_noise, 1); rb_define_method(Class_Image, "resize", Image_resize, -1); rb_define_method(Class_Image, "resize!", Image_resize_bang, -1); @@ -869,10 +606,11 @@ rb_define_method(Class_Image, "sample", Image_sample, -1); rb_define_method(Class_Image, "sample!", Image_sample_bang, -1); rb_define_method(Class_Image, "scale", Image_scale, -1); rb_define_method(Class_Image, "scale!", Image_scale_bang, -1); rb_define_method(Class_Image, "segment", Image_segment, -1); + rb_define_method(Class_Image, "separate", Image_separate, -1); rb_define_method(Class_Image, "sepiatone", Image_sepiatone, -1); rb_define_method(Class_Image, "set_channel_depth", Image_set_channel_depth, 2); rb_define_method(Class_Image, "shade", Image_shade, -1); rb_define_method(Class_Image, "shadow", Image_shadow, -1); rb_define_method(Class_Image, "sharpen", Image_sharpen, -1); @@ -885,16 +623,16 @@ rb_define_method(Class_Image, "sketch", Image_sketch, -1); rb_define_method(Class_Image, "solarize", Image_solarize, -1); rb_define_method(Class_Image, "<=>", Image_spaceship, 1); rb_define_method(Class_Image, "splice", Image_splice, -1); rb_define_method(Class_Image, "spread", Image_spread, -1); - rb_define_method(Class_Image, "statistics", Image_statistics, 0); rb_define_method(Class_Image, "stegano", Image_stegano, 2); rb_define_method(Class_Image, "stereo", Image_stereo, 1); rb_define_method(Class_Image, "strip!", Image_strip_bang, 0); rb_define_method(Class_Image, "store_pixels", Image_store_pixels, 5); rb_define_method(Class_Image, "swirl", Image_swirl, 1); + rb_define_method(Class_Image, "sync_profiles", Image_sync_profiles, 0); rb_define_method(Class_Image, "texture_flood_fill", Image_texture_flood_fill, 5); rb_define_method(Class_Image, "threshold", Image_threshold, 1); rb_define_method(Class_Image, "thumbnail", Image_thumbnail, -1); rb_define_method(Class_Image, "thumbnail!", Image_thumbnail_bang, -1); rb_define_method(Class_Image, "tint", Image_tint, -1); @@ -903,12 +641,12 @@ rb_define_method(Class_Image, "transparent", Image_transparent, -1); rb_define_method(Class_Image, "transpose", Image_transpose, 0); rb_define_method(Class_Image, "transpose!", Image_transpose_bang, 0); rb_define_method(Class_Image, "transverse", Image_transverse, 0); rb_define_method(Class_Image, "transverse!", Image_transverse_bang, 0); - rb_define_method(Class_Image, "trim", Image_trim, 0); - rb_define_method(Class_Image, "trim!", Image_trim_bang, 0); + rb_define_method(Class_Image, "trim", Image_trim, -1); + rb_define_method(Class_Image, "trim!", Image_trim_bang, -1); rb_define_method(Class_Image, "unique_colors", Image_unique_colors, 0); rb_define_method(Class_Image, "unsharp_mask", Image_unsharp_mask, -1); rb_define_method(Class_Image, "unsharp_mask_channel", Image_unsharp_mask_channel, -1); rb_define_method(Class_Image, "vignette", Image_vignette, -1); rb_define_method(Class_Image, "watermark", Image_watermark, -1); @@ -919,22 +657,19 @@ /*-----------------------------------------------------------------------*/ /* Class Magick::ImageList methods (see also RMagick.rb) */ /*-----------------------------------------------------------------------*/ - Class_ImageList = rb_define_class_under(Module_Magick, "ImageList", rb_cArray); + Class_ImageList = rb_define_class_under(Module_Magick, "ImageList", rb_cObject); // Define an alias for Object#display before we override it rb_define_alias(Class_ImageList, "__display__", "display"); - - // Define an alias for Array's "map" method. - rb_define_alias(Class_ImageList, "__ary_map__", "map"); - rb_define_method(Class_ImageList, "animate", ImageList_animate, -1); rb_define_method(Class_ImageList, "append", ImageList_append, 1); rb_define_method(Class_ImageList, "average", ImageList_average, 0); rb_define_method(Class_ImageList, "coalesce", ImageList_coalesce, 0); + rb_define_method(Class_ImageList, "composite_layers", ImageList_composite_layers, -1); rb_define_method(Class_ImageList, "deconstruct", ImageList_deconstruct, 0); rb_define_method(Class_ImageList, "display", ImageList_display, 0); rb_define_method(Class_ImageList, "flatten_images", ImageList_flatten_images, 0); rb_define_method(Class_ImageList, "fx", ImageList_fx, -1); rb_define_method(Class_ImageList, "map", ImageList_map, -1); @@ -949,31 +684,29 @@ /*-----------------------------------------------------------------------*/ /* Class Magick::Draw methods */ /*-----------------------------------------------------------------------*/ Class_Draw = rb_define_class_under(Module_Magick, "Draw", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_Draw, Draw_alloc); -#else - rb_define_singleton_method(Class_Draw, "new", Draw_new, 0); -#endif DCL_ATTR_WRITER(Draw, affine) DCL_ATTR_WRITER(Draw, align) DCL_ATTR_WRITER(Draw, decorate) DCL_ATTR_WRITER(Draw, density) DCL_ATTR_WRITER(Draw, encoding) DCL_ATTR_WRITER(Draw, fill) + DCL_ATTR_WRITER(Draw, fill_pattern) DCL_ATTR_WRITER(Draw, font) DCL_ATTR_WRITER(Draw, font_family) DCL_ATTR_WRITER(Draw, font_stretch) DCL_ATTR_WRITER(Draw, font_style) DCL_ATTR_WRITER(Draw, font_weight) DCL_ATTR_WRITER(Draw, gravity) DCL_ATTR_WRITER(Draw, pointsize) DCL_ATTR_WRITER(Draw, rotation) DCL_ATTR_WRITER(Draw, stroke) + DCL_ATTR_WRITER(Draw, stroke_pattern) DCL_ATTR_WRITER(Draw, stroke_width) DCL_ATTR_WRITER(Draw, text_antialias) DCL_ATTR_WRITER(Draw, tile) DCL_ATTR_WRITER(Draw, undercolor) @@ -995,33 +728,31 @@ /* to the block associated with the Draw.new method call. */ /*-----------------------------------------------------------------------*/ Class_DrawOptions = rb_define_class_under(Class_Image, "DrawOptions", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_DrawOptions, DrawOptions_alloc); -#else - rb_define_singleton_method(Class_DrawOptions, "new", DrawOptions_new, 0); -#endif rb_define_method(Class_DrawOptions, "initialize", DrawOptions_initialize, 0); SHARE_ATTR_WRITER(DrawOptions, Draw, affine) SHARE_ATTR_WRITER(DrawOptions, Draw, align) SHARE_ATTR_WRITER(DrawOptions, Draw, decorate) SHARE_ATTR_WRITER(DrawOptions, Draw, density) SHARE_ATTR_WRITER(DrawOptions, Draw, encoding) SHARE_ATTR_WRITER(DrawOptions, Draw, fill) + SHARE_ATTR_WRITER(DrawOptions, Draw, fill_pattern) SHARE_ATTR_WRITER(DrawOptions, Draw, font) SHARE_ATTR_WRITER(DrawOptions, Draw, font_family) SHARE_ATTR_WRITER(DrawOptions, Draw, font_stretch) SHARE_ATTR_WRITER(DrawOptions, Draw, font_style) SHARE_ATTR_WRITER(DrawOptions, Draw, font_weight) SHARE_ATTR_WRITER(DrawOptions, Draw, gravity) SHARE_ATTR_WRITER(DrawOptions, Draw, pointsize) SHARE_ATTR_WRITER(DrawOptions, Draw, rotation) SHARE_ATTR_WRITER(DrawOptions, Draw, stroke) + SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_pattern) SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_width) SHARE_ATTR_WRITER(DrawOptions, Draw, text_antialias) SHARE_ATTR_WRITER(DrawOptions, Draw, tile) SHARE_ATTR_WRITER(DrawOptions, Draw, undercolor) @@ -1038,15 +769,11 @@ // include Comparable rb_include_module(Class_Pixel, rb_mComparable); // Magick::Pixel has 3 constructors: "new" "from_color", and "from_HSL". -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_Pixel, Pixel_alloc); -#else - rb_define_singleton_method(Class_Pixel, "new", Pixel_new, -1); -#endif rb_define_singleton_method(Class_Pixel, "from_color", Pixel_from_color, 1); rb_define_singleton_method(Class_Pixel, "from_HSL", Pixel_from_HSL, 1); // Define the RGBA attributes DCL_ATTR_ACCESSOR(Pixel, red) @@ -1080,15 +807,11 @@ /* Class Magick::ImageList::Montage methods */ /*-----------------------------------------------------------------------*/ Class_Montage = rb_define_class_under(Class_ImageList, "Montage", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_Montage, Montage_alloc); -#else - rb_define_singleton_method(Class_Montage, "new", Montage_new, 0); -#endif rb_define_method(Class_Montage, "initialize", Montage_initialize, 0); rb_define_method(Class_Montage, "freeze", rm_no_freeze, 0); // These accessors supply optional arguments for Magick::ImageList::Montage.new @@ -1114,97 +837,94 @@ /* Class Magick::Image::Info */ /*-----------------------------------------------------------------------*/ Class_Info = rb_define_class_under(Class_Image, "Info", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_Info, Info_alloc); -#else - rb_define_singleton_method(Class_Info, "new", Info_new, 0); -#endif rb_define_method(Class_Info, "initialize", Info_initialize, 0); rb_define_method(Class_Info, "channel", Info_channel, -1); rb_define_method(Class_Info, "freeze", rm_no_freeze, 0); rb_define_method(Class_Info, "define", Info_define, -1); - rb_define_method(Class_Info, "[]=", Info_aset, 3); - rb_define_method(Class_Info, "[]", Info_aref, 2); + rb_define_method(Class_Info, "[]=", Info_aset, -1); + rb_define_method(Class_Info, "[]", Info_aref, -1); rb_define_method(Class_Info, "undefine", Info_undefine, 2); DCL_ATTR_ACCESSOR(Info, antialias) + DCL_ATTR_ACCESSOR(Info, attenuate) DCL_ATTR_ACCESSOR(Info, authenticate) DCL_ATTR_ACCESSOR(Info, background_color) DCL_ATTR_ACCESSOR(Info, border_color) DCL_ATTR_ACCESSOR(Info, colorspace) - DCL_ATTR_ACCESSOR(Info, comment) // new in 6.0.0 + DCL_ATTR_ACCESSOR(Info, comment) DCL_ATTR_ACCESSOR(Info, compression) - DCL_ATTR_ACCESSOR(Info, delay) // new in 6.0.0 + DCL_ATTR_ACCESSOR(Info, delay) DCL_ATTR_ACCESSOR(Info, density) DCL_ATTR_ACCESSOR(Info, depth) - DCL_ATTR_ACCESSOR(Info, dispose) // new in 6.0.0 + DCL_ATTR_ACCESSOR(Info, dispose) DCL_ATTR_ACCESSOR(Info, dither) - DCL_ATTR_ACCESSOR(Info, extract) // new in 5.5.6, replaces tile + DCL_ATTR_ACCESSOR(Info, extract) DCL_ATTR_ACCESSOR(Info, filename) DCL_ATTR_ACCESSOR(Info, fill) DCL_ATTR_ACCESSOR(Info, font) DCL_ATTR_ACCESSOR(Info, format) DCL_ATTR_ACCESSOR(Info, fuzz) DCL_ATTR_ACCESSOR(Info, gravity) DCL_ATTR_ACCESSOR(Info, group) + DCL_ATTR_ACCESSOR(Info, image_type) DCL_ATTR_ACCESSOR(Info, interlace) - DCL_ATTR_ACCESSOR(Info, label) // new in 6.0.0 + DCL_ATTR_ACCESSOR(Info, label) DCL_ATTR_ACCESSOR(Info, matte_color) DCL_ATTR_WRITER(Info, monitor) DCL_ATTR_ACCESSOR(Info, monochrome) - DCL_ATTR_ACCESSOR(Info, number_scenes) // new in 5.5.6, replaces subrange - DCL_ATTR_ACCESSOR(Info, orientation) // new in 6.0.0 + DCL_ATTR_ACCESSOR(Info, number_scenes) + DCL_ATTR_ACCESSOR(Info, orientation) DCL_ATTR_ACCESSOR(Info, origin) // new in 6.3.1 DCL_ATTR_ACCESSOR(Info, page) DCL_ATTR_ACCESSOR(Info, pointsize) DCL_ATTR_ACCESSOR(Info, quality) DCL_ATTR_ACCESSOR(Info, sampling_factor) - DCL_ATTR_ACCESSOR(Info, scene) // new in 5.5.6, replaces subimage + DCL_ATTR_ACCESSOR(Info, scene) DCL_ATTR_ACCESSOR(Info, server_name) DCL_ATTR_ACCESSOR(Info, size) - DCL_ATTR_ACCESSOR(Info, subimage) // deprecated >=5.5.6, replaced by scene - DCL_ATTR_ACCESSOR(Info, subrange) // deprecated >=5.5.6, replaced by number_scenes + DCL_ATTR_ACCESSOR(Info, stroke) + DCL_ATTR_ACCESSOR(Info, stroke_width) DCL_ATTR_WRITER(Info, texture) - DCL_ATTR_ACCESSOR(Info, tile) // deprecated >=5.5.6, replaced by extract and scenes - DCL_ATTR_ACCESSOR(Info, image_type) + DCL_ATTR_ACCESSOR(Info, tile_offset) + DCL_ATTR_ACCESSOR(Info, undercolor) DCL_ATTR_ACCESSOR(Info, units) DCL_ATTR_ACCESSOR(Info, view) /*-----------------------------------------------------------------------*/ /* Class Magick::Image::PolaroidOptions */ /*-----------------------------------------------------------------------*/ Class_PolaroidOptions = rb_define_class_under(Class_Image, "PolaroidOptions", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_PolaroidOptions, PolaroidOptions_alloc); -#else - rb_define_singleton_method(Class_PolaroidOptions, "new", PolaroidOptions_new, 0); -#endif rb_define_method(Class_PolaroidOptions, "initialize", PolaroidOptions_initialize, 0); DCL_ATTR_WRITER(PolaroidOptions, shadow_color) + DCL_ATTR_WRITER(PolaroidOptions, border_color) // The other attribute writer methods are implemented by Draw's functions SHARE_ATTR_WRITER(PolaroidOptions, Draw, align) SHARE_ATTR_WRITER(PolaroidOptions, Draw, decorate) SHARE_ATTR_WRITER(PolaroidOptions, Draw, density) SHARE_ATTR_WRITER(PolaroidOptions, Draw, encoding) SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill) + SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill_pattern) SHARE_ATTR_WRITER(PolaroidOptions, Draw, font) SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_family) SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_stretch) SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_style) SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_weight) SHARE_ATTR_WRITER(PolaroidOptions, Draw, gravity) SHARE_ATTR_WRITER(PolaroidOptions, Draw, pointsize) SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke) + SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_pattern) SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_width) SHARE_ATTR_WRITER(PolaroidOptions, Draw, text_antialias) SHARE_ATTR_WRITER(PolaroidOptions, Draw, undercolor) @@ -1213,64 +933,56 @@ /*-----------------------------------------------------------------------*/ // class Magick::GradientFill Class_GradientFill = rb_define_class_under(Module_Magick, "GradientFill", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_GradientFill, GradientFill_alloc); -#else - rb_define_singleton_method(Class_GradientFill, "new", GradientFill_new, 6); -#endif rb_define_method(Class_GradientFill, "initialize", GradientFill_initialize, 6); rb_define_method(Class_GradientFill, "fill", GradientFill_fill, 1); // class Magick::TextureFill Class_TextureFill = rb_define_class_under(Module_Magick, "TextureFill", rb_cObject); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_TextureFill, TextureFill_alloc); -#else - rb_define_singleton_method(Class_TextureFill, "new", TextureFill_new, 1); -#endif rb_define_method(Class_TextureFill, "initialize", TextureFill_initialize, 1); rb_define_method(Class_TextureFill, "fill", TextureFill_fill, 1); /*-----------------------------------------------------------------------*/ /* Class Magick::ImageMagickError < StandardError */ /*-----------------------------------------------------------------------*/ Class_ImageMagickError = rb_define_class_under(Module_Magick, "ImageMagickError", rb_eStandardError); rb_define_method(Class_ImageMagickError, "initialize", ImageMagickError_initialize, -1); - RUBY16(rb_enable_super(Class_ImageMagickError, "initialize");) rb_define_attr(Class_ImageMagickError, MAGICK_LOC, True, False); - // Miscellaneous constants - rb_define_const(Module_Magick, "MaxRGB", INT2FIX(MaxRGB)); - rb_define_const(Module_Magick, "QuantumDepth", INT2FIX(QuantumDepth)); + /*-----------------------------------------------------------------------*/ + /* Class Magick::DestroyedImageError < StandardError */ + /*-----------------------------------------------------------------------*/ + Class_DestroyedImageError = rb_define_class_under(Module_Magick, "DestroyedImageError", rb_eStandardError); - version_constants(); - // Opacity constants + // Miscellaneous fixed-point constants + DEF_CONST(MaxRGB); + DEF_CONST(QuantumRange); + DEF_CONST(QuantumDepth); DEF_CONST(OpaqueOpacity); DEF_CONST(TransparentOpacity); + version_constants(); + /*-----------------------------------------------------------------------*/ /* Class Magick::Enum */ /*-----------------------------------------------------------------------*/ // includes Comparable Class_Enum = rb_define_class_under(Module_Magick, "Enum", rb_cObject); rb_include_module(Class_Enum, rb_mComparable); -#if defined(HAVE_RB_DEFINE_ALLOC_FUNC) rb_define_alloc_func(Class_Enum, Enum_alloc); -#else - rb_define_singleton_method(Class_Enum, "new", Enum_new, 2); -#endif rb_define_method(Class_Enum, "initialize", Enum_initialize, 2); rb_define_method(Class_Enum, "to_s", Enum_to_s, 0); rb_define_method(Class_Enum, "to_i", Enum_to_i, 0); rb_define_method(Class_Enum, "<=>", Enum_spaceship, 1); @@ -1282,10 +994,21 @@ ENUMERATOR(LeftAlign) ENUMERATOR(CenterAlign) ENUMERATOR(RightAlign) END_ENUM + // AlphaChannelType constants +#if defined(HAVE_TYPE_ALPHACHANNELTYPE) + DEF_ENUM(AlphaChannelType) + ENUMERATOR(UndefinedAlphaChannel) + ENUMERATOR(ActivateAlphaChannel) + ENUMERATOR(DeactivateAlphaChannel) + ENUMERATOR(ResetAlphaChannel) + ENUMERATOR(SetAlphaChannel) + END_ENUM +#endif + // AnchorType constants (for Draw#text_anchor - these are not defined by ImageMagick) DEF_ENUM(AnchorType) ENUMERATOR(StartAnchor) ENUMERATOR(MiddleAnchor) ENUMERATOR(EndAnchor) @@ -1303,19 +1026,13 @@ ENUMERATOR(OpacityChannel) ENUMERATOR(BlackChannel) ENUMERATOR(MatteChannel) -#if defined(HAVE_INDEXCHANNEL) - ENUMERATOR(IndexChannel) // 5.5.8 -#endif -#if defined(HAVE_GRAYCHANNEL) + ENUMERATOR(IndexChannel) ENUMERATOR(GrayChannel) -#endif -#if defined(HAVE_ALLCHANNELS) ENUMERATOR(AllChannels) -#endif // Define alternate names for ChannelType enums for Image::Info#channel= // AlphaChannel == OpacityChannel _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("AlphaChannel")), INT2FIX(OpacityChannel)); rb_define_const(Module_Magick, "AlphaChannel", _enum); @@ -1364,34 +1081,17 @@ , rm_enum_new(Class_ColorspaceType , ID2SYM(rb_intern("SRGBColorspace")) , INT2FIX(sRGBColorspace))); ENUMERATOR(HSLColorspace) ENUMERATOR(HWBColorspace) -#if defined(HAVE_HSBCOLORSPACE) - ENUMERATOR(HSBColorspace) // IM 6.0.0 -#endif -#if defined(HAVE_CINEONLOGRGBCOLORSPACE) - ENUMERATOR(CineonLogRGBColorspace) // GM 1.2 -#endif -#if defined(HAVE_LABCOLORSPACE) - ENUMERATOR(LABColorspace) // GM 1.2 -#endif -#if defined(HAVE_REC601LUMACOLORSPACE) - ENUMERATOR(Rec601LumaColorspace) // GM 1.2 && IM 6.2.2 -#endif -#if defined(HAVE_REC601YCBCRCOLORSPACE) - ENUMERATOR(Rec601YCbCrColorspace) // GM 1.2 && IM 6.2.2 -#endif -#if defined(HAVE_REC709LUMACOLORSPACE) - ENUMERATOR(Rec709LumaColorspace) // GM 1.2 && IM 6.2.2 -#endif -#if defined(HAVE_REC709YCBCRCOLORSPACE) - ENUMERATOR(Rec709YCbCrColorspace) // GM 1.2 && IM 6.2.2 -#endif -#if defined(HAVE_LOGCOLORSPACE) - ENUMERATOR(LogColorspace) // IM 6.2.3 -#endif + ENUMERATOR(HSBColorspace) + ENUMERATOR(LABColorspace) + ENUMERATOR(Rec601LumaColorspace) + ENUMERATOR(Rec601YCbCrColorspace) + ENUMERATOR(Rec709LumaColorspace) + ENUMERATOR(Rec709YCbCrColorspace) + ENUMERATOR(LogColorspace) END_ENUM // ComplianceType constants are defined as enums but used as bit flags DEF_ENUM(ComplianceType) ENUMERATOR(UndefinedCompliance) @@ -1412,85 +1112,82 @@ DEF_ENUM(CompositeOperator) ENUMERATOR(UndefinedCompositeOp) ENUMERATOR(NoCompositeOp) ENUMERATOR(AddCompositeOp) ENUMERATOR(AtopCompositeOp) + ENUMERATOR(BlendCompositeOp) ENUMERATOR(BumpmapCompositeOp) +#if defined(HAVE_ENUM_CHANGEMASKCOMPOSITEOP) + ENUMERATOR(ChangeMaskCompositeOp) +#endif ENUMERATOR(ClearCompositeOp) + ENUMERATOR(ColorBurnCompositeOp) + ENUMERATOR(ColorDodgeCompositeOp) ENUMERATOR(ColorizeCompositeOp) + ENUMERATOR(CopyBlackCompositeOp) ENUMERATOR(CopyBlueCompositeOp) ENUMERATOR(CopyCompositeOp) + ENUMERATOR(CopyCyanCompositeOp) ENUMERATOR(CopyGreenCompositeOp) + ENUMERATOR(CopyMagentaCompositeOp) ENUMERATOR(CopyOpacityCompositeOp) ENUMERATOR(CopyRedCompositeOp) - ENUMERATOR(CopyCyanCompositeOp) - ENUMERATOR(CopyMagentaCompositeOp) ENUMERATOR(CopyYellowCompositeOp) - ENUMERATOR(CopyBlackCompositeOp) ENUMERATOR(DarkenCompositeOp) - ENUMERATOR(DifferenceCompositeOp) - ENUMERATOR(DisplaceCompositeOp) - ENUMERATOR(DissolveCompositeOp) -#if defined(HAVE_DSTCOMPOSITEOP) - ENUMERATOR(DstAtopCompositeOp) // Added 6.0.2? +#if defined(HAVE_ENUM_DIVIDECOMPOSITEOP) + ENUMERATOR(DivideCompositeOp) +#endif + ENUMERATOR(DstAtopCompositeOp) ENUMERATOR(DstCompositeOp) ENUMERATOR(DstInCompositeOp) ENUMERATOR(DstOutCompositeOp) ENUMERATOR(DstOverCompositeOp) -#endif + ENUMERATOR(DifferenceCompositeOp) + ENUMERATOR(DisplaceCompositeOp) + ENUMERATOR(DissolveCompositeOp) + ENUMERATOR(ExclusionCompositeOp) + ENUMERATOR(HardLightCompositeOp) ENUMERATOR(HueCompositeOp) ENUMERATOR(InCompositeOp) ENUMERATOR(LightenCompositeOp) +#if defined(HAVE_ENUM_LINEARLIGHTCOMPOSITEOP) + ENUMERATOR(LinearLightCompositeOp) +#endif ENUMERATOR(LuminizeCompositeOp) ENUMERATOR(MinusCompositeOp) ENUMERATOR(ModulateCompositeOp) ENUMERATOR(MultiplyCompositeOp) ENUMERATOR(OutCompositeOp) ENUMERATOR(OverCompositeOp) ENUMERATOR(OverlayCompositeOp) ENUMERATOR(PlusCompositeOp) -#if defined(HAVE_REPLACECOMPOSITEOP) // Added 5.5.8 ENUMERATOR(ReplaceCompositeOp) // synonym for CopyCompositeOp -#endif ENUMERATOR(SaturateCompositeOp) ENUMERATOR(ScreenCompositeOp) -#if defined(HAVE_DSTCOMPOSITEOP) + ENUMERATOR(SoftLightCompositeOp) ENUMERATOR(SrcAtopCompositeOp) ENUMERATOR(SrcCompositeOp) ENUMERATOR(SrcInCompositeOp) ENUMERATOR(SrcOutCompositeOp) ENUMERATOR(SrcOverCompositeOp) -#endif ENUMERATOR(SubtractCompositeOp) ENUMERATOR(ThresholdCompositeOp) ENUMERATOR(XorCompositeOp) - -#if defined(HAVE_COLORDODGECOMPOSITEOP) - ENUMERATOR(BlendCompositeOp) - ENUMERATOR(ColorBurnCompositeOp) - ENUMERATOR(ColorDodgeCompositeOp) - ENUMERATOR(ExclusionCompositeOp) - ENUMERATOR(HardLightCompositeOp) - ENUMERATOR(SoftLightCompositeOp) -#endif END_ENUM // CompressionType constants DEF_ENUM(CompressionType) ENUMERATOR(UndefinedCompression) ENUMERATOR(NoCompression) ENUMERATOR(BZipCompression) ENUMERATOR(FaxCompression) ENUMERATOR(Group4Compression) ENUMERATOR(JPEGCompression) -#if defined(HAVE_JPEG2000COMPRESSION) ENUMERATOR(JPEG2000Compression) -#endif ENUMERATOR(LosslessJPEGCompression) ENUMERATOR(LZWCompression) - ENUMERATOR(RLECompression) // preferred - ENUMERATOR(RunlengthEncodedCompression) // deprecated + ENUMERATOR(RLECompression) ENUMERATOR(ZipCompression) END_ENUM // DecorationType constants DEF_ENUM(DecorationType) @@ -1506,10 +1203,28 @@ ENUMERATOR(BackgroundDispose) ENUMERATOR(NoneDispose) ENUMERATOR(PreviousDispose) END_ENUM +#if defined(HAVE_DISTORTIMAGE) + // DistortImage "method" argument values + DEF_ENUM(DistortImageMethod) + ENUMERATOR(UndefinedDistortion) + ENUMERATOR(AffineDistortion) + ENUMERATOR(AffineProjectionDistortion) +#if defined(HAVE_ENUM_ARCDISTORTION) + ENUMERATOR(ArcDistortion) +#endif + ENUMERATOR(BilinearDistortion) + ENUMERATOR(PerspectiveDistortion) +#if defined(HAVE_PERSPECTIVEPROJECTIONDISTORTION) + ENUMERATOR(PerspectiveProjectionDistortion) +#endif + ENUMERATOR(ScaleRotateTranslateDistortion) + END_ENUM +#endif + DEF_ENUM(EndianType) ENUMERATOR(UndefinedEndian) ENUMERATOR(LSBEndian) ENUMERATOR(MSBEndian) END_ENUM @@ -1530,21 +1245,36 @@ ENUMERATOR(CatromFilter) ENUMERATOR(MitchellFilter) ENUMERATOR(LanczosFilter) ENUMERATOR(BesselFilter) ENUMERATOR(SincFilter) +#if defined(HAVE_ENUM_KAISERFILTER) + ENUMERATOR(KaiserFilter) +#endif +#if defined(HAVE_ENUM_WELSHFILTER) + ENUMERATOR(WelshFilter) +#endif +#if defined(HAVE_ENUM_PARZENFILTER) + ENUMERATOR(ParzenFilter) +#endif +#if defined(HAVE_ENUM_LAGRANGEFILTER) + ENUMERATOR(LagrangeFilter) +#endif +#if defined(HAVE_ENUM_BOHMANFILTER) + ENUMERATOR(BohmanFilter) +#endif +#if defined(HAVE_ENUM_BARTLETTFILTER) + ENUMERATOR(BartlettFilter) +#endif +#if defined(HAVE_ENUM_SENTINELFILTER) + ENUMERATOR(SentinelFilter) +#endif END_ENUM // GravityType constants DEF_ENUM(GravityType) -#if defined(HAVE_UNDEFINEDGRAVITY) ENUMERATOR(UndefinedGravity) -#else - // Provide this enumerator in older (pre 6.0.0) versions of ImageMagick - _enum = rm_enum_new(_cls, ID2SYM(rb_intern("UndefinedGravity")), INT2FIX(0));\ - rb_define_const(Module_Magick, "UndefinedGravity", _enum); -#endif ENUMERATOR(ForgetGravity) ENUMERATOR(NorthWestGravity) ENUMERATOR(NorthGravity) ENUMERATOR(NorthEastGravity) ENUMERATOR(WestGravity) @@ -1567,75 +1297,110 @@ ENUMERATOR(TrueColorType) ENUMERATOR(TrueColorMatteType) ENUMERATOR(ColorSeparationType) ENUMERATOR(ColorSeparationMatteType) ENUMERATOR(OptimizeType) -#if defined(HAVE_PALETTEBILEVELMATTETYPE) ENUMERATOR(PaletteBilevelMatteType) -#endif END_ENUM // InterlaceType constants DEF_ENUM(InterlaceType) ENUMERATOR(UndefinedInterlace) ENUMERATOR(NoInterlace) ENUMERATOR(LineInterlace) ENUMERATOR(PlaneInterlace) ENUMERATOR(PartitionInterlace) +#if defined(HAVE_ENUM_GIFINTERLACE) + ENUMERATOR(GIFInterlace) +#endif +#if defined(HAVE_ENUM_JPEGINTERLACE) + ENUMERATOR(JPEGInterlace) +#endif +#if defined(HAVE_ENUM_PNGINTERLACE) + ENUMERATOR(PNGInterlace) +#endif END_ENUM -#if defined(HAVE_INTERPOLATEPIXELCOLOR) DEF_ENUM(InterpolatePixelMethod) ENUMERATOR(UndefinedInterpolatePixel) ENUMERATOR(AverageInterpolatePixel) ENUMERATOR(BicubicInterpolatePixel) ENUMERATOR(BilinearInterpolatePixel) ENUMERATOR(FilterInterpolatePixel) ENUMERATOR(IntegerInterpolatePixel) ENUMERATOR(MeshInterpolatePixel) ENUMERATOR(NearestNeighborInterpolatePixel) - END_ENUM +#if defined(HAVE_SPLINEINTERPOLATEPIXEL) + ENUMERATOR(SplineInterpolatePixel) #endif + END_ENUM -#if defined(HAVE_COMPAREIMAGELAYERS) +#if defined(HAVE_TYPE_IMAGELAYERMETHOD) + DEF_ENUM(ImageLayerMethod) +#else DEF_ENUM(MagickLayerMethod) +#endif ENUMERATOR(UndefinedLayer) ENUMERATOR(CompareAnyLayer) ENUMERATOR(CompareClearLayer) ENUMERATOR(CompareOverlayLayer) ENUMERATOR(OptimizeLayer) ENUMERATOR(OptimizePlusLayer) -#if defined(HAVE_COALESCELAYER) - // Introduced in IM 6.2.7-0 ENUMERATOR(CoalesceLayer) ENUMERATOR(DisposeLayer) +#if defined(HAVE_ENUM_OPTIMIZETRANSLAYER) + ENUMERATOR(OptimizeTransLayer) #endif - END_ENUM +#if defined(HAVE_ENUM_OPTIMIZEIMAGELAYER) + ENUMERATOR(OptimizeImageLayer) #endif +#if defined(HAVE_ENUM_REMOVEDUPSLAYER) + ENUMERATOR(RemoveDupsLayer) +#endif +#if defined(HAVE_ENUM_REMOVEZEROLAYER) + ENUMERATOR(RemoveZeroLayer) +#endif +#if defined(HAVE_ENUM_COMPOSITELAYER) + ENUMERATOR(CompositeLayer) +#endif +#if defined(HAVE_ENUM_MERGELAYER) + ENUMERATOR(MergeLayer) +#endif +#if defined(HAVE_ENUM_MOSAICLAYER) + ENUMERATOR(MosaicLayer) +#endif +#if defined(HAVE_ENUM_FLATTENLAYER) + ENUMERATOR(FlattenLayer) +#endif + END_ENUM -#if defined(HAVE_COMPAREIMAGECHANNELS) DEF_ENUM(MetricType) ENUMERATOR(UndefinedMetric) + ENUMERATOR(AbsoluteErrorMetric) ENUMERATOR(MeanAbsoluteErrorMetric) +#if defined(HAVE_ENUM_MEANERRORPERPIXELMETRIC) + ENUMERATOR(MeanErrorPerPixelMetric) +#endif ENUMERATOR(MeanSquaredErrorMetric) ENUMERATOR(PeakAbsoluteErrorMetric) ENUMERATOR(PeakSignalToNoiseRatioMetric) ENUMERATOR(RootMeanSquaredErrorMetric) END_ENUM -#endif // NoiseType constants DEF_ENUM(NoiseType) ENUMERATOR(UniformNoise) ENUMERATOR(GaussianNoise) ENUMERATOR(MultiplicativeGaussianNoise) ENUMERATOR(ImpulseNoise) ENUMERATOR(LaplacianNoise) ENUMERATOR(PoissonNoise) +#if defined(HAVE_ENUM_RANDOMNOISE) + ENUMERATOR(RandomNoise) +#endif END_ENUM -#if defined(HAVE_IMAGE_ORIENTATION) // Orientation constants DEF_ENUM(OrientationType) ENUMERATOR(UndefinedOrientation) ENUMERATOR(TopLeftOrientation) ENUMERATOR(TopRightOrientation) @@ -1644,11 +1409,10 @@ ENUMERATOR(LeftTopOrientation) ENUMERATOR(RightTopOrientation) ENUMERATOR(RightBottomOrientation) ENUMERATOR(LeftBottomOrientation) END_ENUM -#endif // Paint method constants DEF_ENUM(PaintMethod) ENUMERATOR(PointMethod) ENUMERATOR(ReplaceMethod) @@ -1689,28 +1453,24 @@ ENUMERATOR(OilPaintPreview) ENUMERATOR(CharcoalDrawingPreview) ENUMERATOR(JPEGPreview) END_ENUM -#if defined(HAVE_QUANTUMOPERATORREGIONIMAGE) || defined(HAVE_EVALUATEIMAGECHANNEL) DEF_ENUM(QuantumExpressionOperator) ENUMERATOR(UndefinedQuantumOperator) ENUMERATOR(AddQuantumOperator) ENUMERATOR(AndQuantumOperator) ENUMERATOR(DivideQuantumOperator) ENUMERATOR(LShiftQuantumOperator) -#if defined(HAVE_MAXEVALUATEOPERATOR) ENUMERATOR(MaxQuantumOperator) ENUMERATOR(MinQuantumOperator) -#endif ENUMERATOR(MultiplyQuantumOperator) ENUMERATOR(OrQuantumOperator) ENUMERATOR(RShiftQuantumOperator) ENUMERATOR(SubtractQuantumOperator) ENUMERATOR(XorQuantumOperator) END_ENUM -#endif // RenderingIntent DEF_ENUM(RenderingIntent) ENUMERATOR(UndefinedIntent) ENUMERATOR(SaturationIntent) @@ -1726,21 +1486,17 @@ ENUMERATOR(PixelsPerCentimeterResolution) END_ENUM // StorageType DEF_ENUM(StorageType) -#if defined(HAVE_UNDEFINEDGRAVITY) // UndefinedGravity & UndefinedPixel were both introduced in IM 6.0.0 ENUMERATOR(UndefinedPixel) -#endif ENUMERATOR(CharPixel) ENUMERATOR(DoublePixel) ENUMERATOR(FloatPixel) ENUMERATOR(IntegerPixel) ENUMERATOR(LongPixel) -#if defined(HAVE_QUANTUMPIXEL) ENUMERATOR(QuantumPixel) -#endif ENUMERATOR(ShortPixel) END_ENUM // StretchType constants DEF_ENUM(StretchType) @@ -1768,14 +1524,27 @@ DEF_ENUM(VirtualPixelMethod) ENUMERATOR(UndefinedVirtualPixelMethod) ENUMERATOR(EdgeVirtualPixelMethod) ENUMERATOR(MirrorVirtualPixelMethod) ENUMERATOR(TileVirtualPixelMethod) -#if defined(HAVE_TRANSPARENTVIRTUALPIXELMETHOD) - ENUMERATOR(BackgroundVirtualPixelMethod) ENUMERATOR(TransparentVirtualPixelMethod) + ENUMERATOR(BackgroundVirtualPixelMethod) + ENUMERATOR(DitherVirtualPixelMethod) + ENUMERATOR(RandomVirtualPixelMethod) + ENUMERATOR(ConstantVirtualPixelMethod) +#if defined(HAVE_ENUM_MASKVIRTUALPIXELMETHOD) + ENUMERATOR(MaskVirtualPixelMethod) #endif +#if defined(HAVE_ENUM_BLACKVIRTUALPIXELMETHOD) + ENUMERATOR(BlackVirtualPixelMethod) +#endif +#if defined(HAVE_ENUM_GRAYVIRTUALPIXELMETHOD) + ENUMERATOR(GrayVirtualPixelMethod) +#endif +#if defined(HAVE_ENUM_WHITEVIRTUALPIXELMETHOD) + ENUMERATOR(WhiteVirtualPixelMethod) +#endif END_ENUM // WeightType constants DEF_ENUM(WeightType) ENUMERATOR(AnyWeight) @@ -1794,34 +1563,22 @@ // Magick::AffineMatrix Class_AffineMatrix = rb_struct_define(NULL, "sx", "rx", "ry", "sy", "tx", "ty", NULL); rb_define_const(Module_Magick, "AffineMatrix", Class_AffineMatrix); -#if defined(HAVE_GETIMAGESTATISTICS) - // These classes are defined for >= GM 1.1. - - // Magick::Statistics - Class_Statistics = rb_struct_define(NULL, "red", "green", "blue", "opacity", NULL); - rb_define_const(Module_Magick, "Statistics", Class_Statistics); - // Magick::ChannelStatistics - Class_StatisticsChannel = rb_struct_define(NULL, "max", "min", "mean", "stddev", "var", NULL); - rb_define_const(Class_Statistics, "Channel", Class_StatisticsChannel); -#endif - - // Magick::Primary Class_Primary = rb_struct_define(NULL, "x", "y", "z", NULL); rb_define_method(Class_Primary, "to_s", PrimaryInfo_to_s, 0); rb_define_const(Module_Magick, "Primary", Class_Primary); // Magick::Chromaticity Class_Chromaticity = rb_struct_define(NULL - , "red_primary" - , "green_primary" - , "blue_primary" - , "white_point" - , NULL); + , "red_primary" + , "green_primary" + , "blue_primary" + , "white_point" + , NULL); rb_define_method(Class_Chromaticity, "to_s", ChromaticityInfo_to_s, 0); rb_define_const(Module_Magick, "Chromaticity", Class_Chromaticity); // Magick::Color Class_Color = rb_struct_define(NULL, "name", "compliance", "color", NULL); @@ -1842,12 +1599,12 @@ rb_define_method(Class_Segment, "to_s", SegmentInfo_to_s, 0); rb_define_const(Module_Magick, "Segment", Class_Segment); // Magick::Font Class_Font = rb_struct_define(NULL, "name", "description", - "family", "style", "stretch", "weight", - "encoding", "foundry", "format", NULL); + "family", "style", "stretch", "weight", + "encoding", "foundry", "format", NULL); rb_define_method(Class_Font, "to_s", Font_to_s, 0); rb_define_const(Module_Magick, "Font", Class_Font); // Magick::TypeMetric Class_TypeMetric = rb_struct_define(NULL, "pixels_per_em", "ascent", "descent", @@ -1863,33 +1620,35 @@ /* * Static: test_Magick_version * Purpose: Ensure the version of ImageMagick we're running with matches - * the version we were compiled with. We were compiled with MagickLibVersion. - * GetMagickVersion returns the runtime version. + * the version we were compiled with. * Notes: Bypass the test by defining the constant RMAGICK_BYPASS_VERSION_TEST * to 'true' at the top level, before requiring 'RMagick' */ static void test_Magick_version(void) { unsigned long version_number; const char *version_str; + const char *web_site = +#if defined(MagickHomeURL) + MagickHomeURL +#else + MagickWebSite +#endif + ; int x, n; ID bypass = rb_intern("RMAGICK_BYPASS_VERSION_TEST"); if (RTEST(rb_const_defined(rb_cObject, bypass)) && RTEST(rb_const_get(rb_cObject, bypass))) { return; } version_str = GetMagickVersion(&version_number); -#if defined(GRAPHICSMAGICK) - if ((version_number & 0xff0000) != (MagickLibVersion & 0xff0000)) -#else if (version_number != MagickLibVersion) -#endif { // Extract the string "ImageMagick X.Y.Z" n = 0; for (x = 0; version_str[x] != '\0'; x++) { @@ -1898,13 +1657,16 @@ break; } } rb_raise(rb_eRuntimeError, - "This version of RMagick was created to run with %s %s " - "but %.*s is installed on this system.\n" , - MagickPackageName, MagickLibVersionText, x, version_str); + "This version of RMagick was created to run with %s %s\n" + "but %.*s is installed on this system. You should either\n" + " 1) Configure and build RMagick for %.*s, or\n" + " 2) download %s %s from %s and install it.\n" , + MagickPackageName, MagickLibVersionText, x, version_str, x, version_str, + MagickPackageName, MagickLibVersionText, web_site); } } @@ -1922,25 +1684,25 @@ char long_version[1000]; mgk_version = GetMagickVersion(NULL); str = rb_str_new2(mgk_version); - (void) rb_obj_freeze(str); + OBJ_FREEZE(str); rb_define_const(Module_Magick, "Magick_version", str); - str = rb_str_new2(PACKAGE_STRING); - (void) rb_obj_freeze(str); + str = rb_str_new2(Q(RMAGICK_VERSION_STRING)); + OBJ_FREEZE(str); rb_define_const(Module_Magick, "Version", str); sprintf(long_version, - "This is %s ($Date: 2008/11/25 23:21:15 $) Copyright (C) 2008 by Timothy P. Hunter\n" - "Built with %s\n" - "Built for %s\n" - "Web page: http://rmagick.rubyforge.org\n" - "Email: rmagick@rubyforge.org\n", - PACKAGE_STRING, mgk_version, RUBY_VERSION_STRING); + "This is %s ($Date: 2007/12/26 21:43:52 $) Copyright (C) 2007 by Timothy P. Hunter\n" + "Built with %s\n" + "Built for %s\n" + "Web page: http://rmagick.rubyforge.org\n" + "Email: rmagick@rubyforge.org\n", + Q(RMAGICK_VERSION_STRING), mgk_version, Q(RUBY_VERSION_STRING)); str = rb_str_new2(long_version); - (void) rb_obj_freeze(str); + OBJ_FREEZE(str); rb_define_const(Module_Magick, "Long_version", str); }