From 13d3643ad7719296727d1274fcf6b624be061a6f Mon Sep 17 00:00:00 2001 From: Bruno Lopes Date: Fri, 17 Oct 2025 09:23:27 -0300 Subject: [PATCH] devel-docs: Move GIMP 3 porting guide to gimp-web-devel See: Infrastructure/gimp-web-devel#9 Except API-for-resources.md, which is ugly and not linked in the README. And GIMP3-API-Changes, which seems to be just a personal annotation. --- devel-docs/GIMP3-API-Changes.txt | 23 -- .../API-for-resources.md | 272 ------------------ .../GIMP3-plug-in-porting-guide/README.md | 15 - .../GIMP3-plug-in-porting-guide/classes.md | 82 ------ .../GIMP3-plug-in-porting-guide/pdb-calls.md | 76 ----- .../removed_functions.md | 226 --------------- 6 files changed, 694 deletions(-) delete mode 100644 devel-docs/GIMP3-API-Changes.txt delete mode 100644 devel-docs/GIMP3-plug-in-porting-guide/API-for-resources.md delete mode 100644 devel-docs/GIMP3-plug-in-porting-guide/README.md delete mode 100644 devel-docs/GIMP3-plug-in-porting-guide/classes.md delete mode 100644 devel-docs/GIMP3-plug-in-porting-guide/pdb-calls.md delete mode 100644 devel-docs/GIMP3-plug-in-porting-guide/removed_functions.md diff --git a/devel-docs/GIMP3-API-Changes.txt b/devel-docs/GIMP3-API-Changes.txt deleted file mode 100644 index 5e9c107976..0000000000 --- a/devel-docs/GIMP3-API-Changes.txt +++ /dev/null @@ -1,23 +0,0 @@ -This file contains a list of changes that can/must be done when -we break API/ABI for 3.x. - - -- Move GIMP_REPEAT_TRUNCATE to the start of the enum and rename it - to NONE. Rename the current NONE to EXTEND or something. - -- Add LOTS of padding to all public class structs. - -- Have private pointers in all public instance structs, not just - GET_PRIVATE() macros, in order to inspect the private structs - easily in the debugger. - -- Remove compat values from all enums. - -- Add user_data to all functions passed to gimp_widgets_init() - -- Preferably make gimp_widgets_init() take a vtable with padding. - -- Change gimp_prop_foo_new() to use the nick as label, or find some - other way to use the nick. - -- Pass the plug-in protocol version on the plug-in command line. diff --git a/devel-docs/GIMP3-plug-in-porting-guide/API-for-resources.md b/devel-docs/GIMP3-plug-in-porting-guide/API-for-resources.md deleted file mode 100644 index cb2f579ab3..0000000000 --- a/devel-docs/GIMP3-plug-in-porting-guide/API-for-resources.md +++ /dev/null @@ -1,272 +0,0 @@ -# API changes in libgimp and the PDB for resources - -This explains changes to the GIMP API from v2 to v3, -concerning resources. - -The audience is plugin authors, and GIMP developers. - -### Resources - -A resource is a chunk of data that can be installed with GIMP -and is used by painting tools or for other rendering tasks. -Usually known as brush, font, palette, pattern, gradient and so forth. - -### Resources are now first class objects - -GimpResource is now a class in libgimp. - -It has subclasses: - - - Brush - - Font - - Gradient - - Palette - - Pattern - -Formerly, the GIMP API had functions operating on resources by name. -Now, there are methods on resource objects. -Methods take an instance of the object as the first argument, -often called "self." - -This means that where you formerly used a string name to refer to a resource object, -now you usually should pass an instance of an object. - -### Changes to reference documents - -#### libgimp API reference - -Shows classes Brush, Font, and so forth. -The classes have instance methods taking the instance as the first argument. - -Example: - -``` -gboolean gboolean gimp_brush_delete(gcharray) => gboolean gimp_brush_delete ( GimpBrush*) -``` - -The classes may also have class methods still taking string names. - -Example: - -``` -gboolean gimp_brush_id_is_valid (const gchar* id) -``` - -Is a class method (in the "Functions" section of the class) taking the ID -(same as the name) to test whether such a brush is installed in Gimp core. - -#### PDB Browser - -Remember the PDB Browser shows the C API. You must mentally convert -to the API in bound languages. - -Shows some procedures that now take type e.g. GimpBrush -where formerly they took type gcharray i.e. strings. - -Shows some procedures that take a string name of a brush. -These are usually class methods. - -#### Other changes to the API - -Many of the Gimp functions dealing with the context -now take or return an instance of a resource. - -Example: - -``` -gcharray* gimp_context_get_brush (void) => GimpBrush* gimp_context_get_brush (void) -``` - -A few functions have even more changed signature: - -``` -gint gimp_palette_get_info (gcharray) => -gint gimp_palette_get_color_count (GimpPalette*) -``` - -The name and description of this function are changed -to accurately describe that the function only returns an integer -(formerly, the description said it also returned the name of the palette.) - -### New resource objects - -FUTURE - -Formerly there were no methods in the libgimp API or the PDB for objects: - - - Dynamics - - ColorProfile - - ToolPreset - -These classes exist primarily so that plugins can let a user choose an instance, -and pass the instance on to other procedures. - -### Traits - -Informally, resources can have these traits: - - - Nameable - - Creatable/Deleable - - Cloneable (Duplicatable) - - Editable - -Some resource subclasses don't have all traits. - -### ID's and names - -The ID and name of a resource are currently the same. -(Some documents and method names may use either word, inconsistently.) - -You usually use resource instances instead of their IDs. -This will insulate your code from changes to GIMP re ID versus name. - -A plugin should not use a resource's ID. -A plugin should not show the ID/name to a user. -The GIMP app shows the names of resources as a convenience to users, -but usually shows resources visually, that is, iconically. -An ID is opaque, that is, used internally by GIMP. - -FUTURE: the ID and name of a resource are distinct. -Different resource instances may have the same name. -Methods returning lists of resources or resource names may return -lists having duplicate names. - -### Resource instances are references to underlying data - -A resource instance is a proxy, or reference, to the underlying data. -Methods on the instance act on the underlying data. -The underlying data is in GIMP's store of resources. - -It is possible for a resource instance to be "invalid" -that is, referring to underlying data that does not exist, -usually when a user uninstalls the thing. - -### Creating Resources - -Installing a resource is distinct from creating a resource. - -GIMP lets you create some resources. -You can't create fonts in GIMP, you can only install them. -For those resources that GIMP lets you create, -the act of creating it also installs it. - -For resources that you can create in GIMP: - - - some you create using menu items - - some you can create using the API - -The API does not let you create a raster brush. - -The API does let you create a parametric brush. -For example, in Python: -``` -brush = Gimp.Brush.new("Foo") -``` -creates a new parametric brush. - -Note that the passed name is a proposed name. -If the name is already in use, -the new brush will have a different name. -The brush instance will always be valid. - -### Getting Resources by ID - -Currently, you usually ask the user to interactively choose a resource. - -If you must get a reference to a resource for which you know the ID, -you can new() the resource class and set it's ID property. -See below. - -FUTURE Resource classes have get_by_id() methods. - -If such a named resource is currently installed, -get_by_id() returns a valid instance of the resource class. -If such a named resource is not currently installed, -the method returns an error. - -### Uninitialized or invalid resource instances - -You can create an instance of a resource class that is invalid. - -For example, in Python: - -``` -brush = Gimp.Brush() -brush.set_property("id", "Foo") -``` -creates an instance that is invalid because there is no underlying data in the GIMP store -(assuming a brush named "Foo" is not installed.) - -Ordinarily, you would not use such a construct. -Instead, you should use the new() method -(for resource classes where it is defined) -which creates, installs, and returns a valid instance except in dire circumstances (out of memory.) - -### Invalid resource instances due to uninstalls - -A plugin may have a resource as a parameter. - -An interactive plugin may show a chooser widget to let a user choose a resource. -The user's choices may be saved in settings. - -In the same session of GIMP, or in a subsequent session, -a user may invoke the plugin again. -Then the saved settings are displayed in the plugin's dialog -(when the second invocation is also interactive). - -When, in the meantime (between invocations of the plugin) -a user has uninstalled the reference resource, -the resource, as a reference, is invalid. -A well-written plugin should handle this case. - -Resource classes have: - - - is_valid() instance method - - id_is_valid(char * name) class method - -Well-written plugins should use these methods to ensure -that saved (deserialized) resource instances -are valid before subsequently using them. - - -### Naming and renaming - -As mentioned above, currently names must be unique. - -For some resources, the method rename(char * name) changes the name. -The method fails if the new name is already used. - -When the instance is invalid to start with -(it has an ID that does not refer to any installed data) -renaming it can succeed and then it creates a valid instance. - -### Duplicating - -Duplicating a resource creates and installs the underlying data, -under a new, generated name. - -The duplicate() method on an instance returns a new instance. - -### Deleting - -You can delete some resources. This uninstalls them. -You can delete some brushes, palettes, and gradients, -when they are writeable i.e. editable, -which usually means that a user previously created them. -You can't delete fonts and patterns. - -You can delete using the delete() instance method - -When you delete a resource, the instance (the proxy in a variable) continues to exist, but is invalid. - -### Resource lists - -Some functions in GIMP return lists of resource names, -representing the set of resources installed. - -For example: gimp_brushes_get_list. - -This returns a list of strings, the ID's of the resources. -The list will have no duplicates. - -FUTURE: this will return a list of resource instances, and their names may have duplicates. diff --git a/devel-docs/GIMP3-plug-in-porting-guide/README.md b/devel-docs/GIMP3-plug-in-porting-guide/README.md deleted file mode 100644 index b8ad4db3df..0000000000 --- a/devel-docs/GIMP3-plug-in-porting-guide/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Here you'll find documentation useful for porting older GIMP -plug-ins, especially Python ones, to the GIMP 3.0 APIs. - -Files: - -- [classes.md:](classes.md) - A list of some of the important classes and modules in GIMP 3.0. - -- [pdb-calls.md:](pdb-calls.md) - An incomplete list of old PDB functions and their equivalents, - using Python classes. - -- [removed_functions.md:](removed_functions.md) - Functions that have been removed from GIMP, and their replacements. - diff --git a/devel-docs/GIMP3-plug-in-porting-guide/classes.md b/devel-docs/GIMP3-plug-in-porting-guide/classes.md deleted file mode 100644 index a2d57adc9b..0000000000 --- a/devel-docs/GIMP3-plug-in-porting-guide/classes.md +++ /dev/null @@ -1,82 +0,0 @@ -# Useful Modules/Classes in GIMP 3.0+ - -Here's a guide to the modules you're likely to need. -It's a work in progress: feel free to add to it. - -Online documentation for our libraries can be found at: -https://developer.gimp.org/api/3.0/ - -You can also get some information in GIMP's Python console with -*help(module)* or *help(object)*, and you can get a list of functions -with *dir(object)*. - -## Gimp - -The base module: almost everything is under Gimp. - -## Gimp.Image - -The image object. - -Some operations that used to be PDB calls, like -``` -pdb.gimp_selection_layer_alpha(layer) -``` -are now in the Image object, e.g. -``` -img.select_item(Gimp.ChannelOps.REPLACE, layer) -``` - -## Gimp.Layer - -The layer object. - -``` -fog = Gimp.Layer.new(image, name, - drawable.width(), drawable.height(), type, opacity, - Gimp.LayerMode.NORMAL) -``` - -## Gimp.Selection - -Selection operations that used to be in the PDB, e.g. -``` -pdb.gimp_selection_none(img) -``` -are now in the Gimp.Selection module, e.g. -``` -Gimp.Selection.none(img) -``` - -## Gimp.ImageType - -A home for image types like RGBA, GRAY, etc: -``` -Gimp.ImageType.RGBA_IMAGE -``` - -## Gimp.FillType - -e.g. Gimp.FillType.TRANSPARENT, Gimp.FillType.BACKGROUND - -## Gimp.ChannelOps - -The old channel op definitions in the gimpfu module, like -``` -CHANNEL_OP_REPLACE -``` -are now in their own module: - -``` -Gimp.ChannelOps.REPLACE -``` - -## Gegl.Color - -In legacy plug-ins you could pass a simple list of integers, like (0, 0, 0). -In 3.0+, create a Gegl.Color object: - -``` - c = Gegl.Color.new("black") - c.set_rgba(0.94, 0.71, 0.27, 1.0) -``` diff --git a/devel-docs/GIMP3-plug-in-porting-guide/pdb-calls.md b/devel-docs/GIMP3-plug-in-porting-guide/pdb-calls.md deleted file mode 100644 index 47fd27502b..0000000000 --- a/devel-docs/GIMP3-plug-in-porting-guide/pdb-calls.md +++ /dev/null @@ -1,76 +0,0 @@ -# PDB equivalence - -A table of old PDB calls, and their equivalents in the GIMP 3.0+ world. - -This document is a work in progress. Feel free to add to it. - -## Undo/Context - -| Removed function | Replacement | -| -------------------------------- | ---------------------------- -| gimp_undo_push_group_start | image.undo_group_start() | -| gimp_undo_push_group_end | image.undo_group_end() | -| gimp.context_push() | Gimp.context_push() | -| gimp.context_push() | Gimp.context_push() | -| gimp_context_get_background | Gimp.context_get_background -| gimp_context_set_background | Gimp.context_set_background - -## File load/save - -| Removed function | Replacement | -| -------------------------------- | ---------------------------- -| gimp_file_load | Gimp.file_load | -| gimp_file_save | Gimp.file_save | - -## Selection operations - -Selection operations are now in the Gimp.Selection class (except -a few in the Image class). E.g. - -| Removed function | Replacement | -| -------------------------------- | ---------------------------- -| pdb.gimp_selection_invert(img) | Gimp.Selection.invert(img) | -| pdb.gimp_selection_none(img) | Gimp.Selection.none(img) | -| pdb.gimp_selection_layer_alpha(layer) | img.select_item(Gimp.ChannelOps.REPLACE, layer) | -| gimp_image_select_item | img.select_item(channel_op, layer) | - -## Filling and Masks - -| Removed function | Replacement | -| -------------------------------- | ---------------------------- -| Gimp.drawable_fill() | layer.fill() | -| pdb.gimp_edit_fill(FILL_BACKGROUND) | layer.edit_fill(Gimp.FillType.BACKGROUND) | -| gimp_layer_add_mask | layer.add_mask -| gimp_layer_remove_mask | layer.remove_mask - -## Miscellaneous and Non-PDB Calls - -| Removed function | Replacement | -| -------------------------------- | ---------------------------- -| gimp_displays_flush | Gimp.displays_flush -| gimp_image_insert_layer | image.insert_layer - - -## Plug-ins - -Calling other plug-ins is trickier than before. The old -``` -pdb.script_fu_drop_shadow(img, layer, -3, -3, blur, - (0, 0, 0), 80.0, False) -``` -becomes -``` - c = Gegl.Color.new("black") - c.set_rgba(0.94, 0.71, 0.27, 1.0) - Gimp.get_pdb().run_procedure('script-fu-drop-shadow', - [ Gimp.RunMode.NONINTERACTIVE, - GObject.Value(Gimp.Image, img), - GObject.Value(Gimp.Drawable, layer), - GObject.Value(GObject.TYPE_DOUBLE, -3), - GObject.Value(GObject.TYPE_DOUBLE, -3), - GObject.Value(GObject.TYPE_DOUBLE,blur), - c, - GObject.Value(GObject.TYPE_DOUBLE, 80.0), - GObject.Value(GObject.TYPE_BOOLEAN, False) - ]) -``` diff --git a/devel-docs/GIMP3-plug-in-porting-guide/removed_functions.md b/devel-docs/GIMP3-plug-in-porting-guide/removed_functions.md deleted file mode 100644 index 43d1c2327a..0000000000 --- a/devel-docs/GIMP3-plug-in-porting-guide/removed_functions.md +++ /dev/null @@ -1,226 +0,0 @@ -## Removed Functions - -These functions have been removed from GIMP 3. Most of them were deprecated -since GIMP 2.10.x or older versions. As we bump the major version, it is time -to start with a clean slate. - -Below is a correspondence table with replacement function. The replacement is -not necessarily a direct search-and-replace equivalent. Some may have different -parameters, and in some case, it may require to think a bit about how things -work to reproduce the same functionality. Nevertheless everything which was -possible in the previous API is obviously still possible. - -| Removed function | Replacement | -| ----------------------------------------------- | ------------------------------------------------- | -| `gimp_attach_new_parasite()` | `gimp_attach_parasite()` | -| `gimp_brightness_contrast()` | `gimp_drawable_brightness_contrast()` | -| `gimp_brushes_get_brush()` | `gimp_context_get_brush()` | -| `gimp_brushes_get_brush_data()` | `gimp_brush_get_pixels()` | -| `gimp_brushes_get_spacing()` | `gimp_brush_get_spacing()` | -| `gimp_brushes_set_spacing()` | `gimp_brush_set_spacing()` | -| `gimp_by_color_select()` | `gimp_image_select_color()` | -| `gimp_by_color_select_full()` | `gimp_image_select_color()` | -| `gimp_channel_menu_new()` | `gimp_channel_combo_box_new()` | -| `gimp_checks_get_shades()` | `gimp_checks_get_colors()` | -| `gimp_color_balance()` | `gimp_drawable_color_color_balance()` | -| `gimp_color_display_convert()` | `gimp_color_display_convert_buffer()` | -| `gimp_color_display_convert_surface()` | `gimp_color_display_convert_buffer()` | -| `gimp_color_display_stack_convert()` | `gimp_color_display_stack_convert_buffer()` | -| `gimp_color_display_stack_convert_surface()` | `gimp_color_display_stack_convert_buffer()` | -| `gimp_color_profile_combo_box_add()` | `gimp_color_profile_combo_box_add_file()` | -| `gimp_color_profile_combo_box_get_active()` | `gimp_color_profile_combo_box_get_active_file()` | -| `gimp_color_profile_combo_box_set_active()` | `gimp_color_profile_combo_box_set_active_file()` | -| `gimp_color_profile_store_add()` | `gimp_color_profile_store_add_file()` | -| `gimp_colorize()` | `gimp_drawable_colorize_hsl()` | -| `gimp_context_get_transform_recursion()` | *N/A* | -| `gimp_context_set_transform_recursion()` | *N/A* | -| `gimp_curves_explicit()` | `gimp_drawable_curves_explicit()` | -| `gimp_curves_spline()` | `gimp_drawable_curves_spline()` | -| `gimp_desaturate()` | `gimp_drawable_desaturate()` | -| `gimp_desaturate_full()` | `gimp_drawable_desaturate()` | -| `gimp_drawable_attach_new_parasite()` | `gimp_item_attach_parasite()` | -| `gimp_drawable_bpp()` | `gimp_drawable_get_bpp()` | -| `gimp_drawable_delete()` | `gimp_item_delete()` | -| `gimp_drawable_get_image()` | `gimp_item_get_image()` | -| `gimp_drawable_get_linked()` | *N/A* | -| `gimp_drawable_get_name()` | `gimp_item_get_name()` | -| `gimp_drawable_get_tattoo()` | `gimp_item_get_tattoo()` | -| `gimp_drawable_get_visible()` | `gimp_item_get_visible()` | -| `gimp_drawable_height()` | `gimp_drawable_get_height()` | -| `gimp_drawable_is_channel()` | `gimp_item_is_channel()` | -| `gimp_drawable_is_layer()` | `gimp_item_is_layer()` | -| `gimp_drawable_is_layer_mask()` | `gimp_item_is_layer_mask()` | -| `gimp_drawable_is_text_layer()` | `gimp_item_is_text_layer()` | -| `gimp_drawable_is_valid()` | `gimp_item_is_valid()` | -| `gimp_drawable_menu_new()` | `gimp_drawable_combo_box_new()` | -| `gimp_drawable_offsets()` | `gimp_drawable_get_offsets()` | -| `gimp_drawable_parasite_attach()` | `gimp_item_attach_parasite()` | -| `gimp_drawable_parasite_detach()` | `gimp_item_detach_parasite()` | -| `gimp_drawable_parasite_find()` | `gimp_item_get_parasite()` | -| `gimp_drawable_parasite_list()` | `gimp_item_get_parasite_list()` | -| `gimp_drawable_preview_new()` | `gimp_drawable_preview_new_from_drawable()` | -| `gimp_drawable_preview_new_from_drawable_id()` | `gimp_drawable_preview_new_from_drawable()` | -| `gimp_drawable_set_image()` | *N/A* | -| `gimp_drawable_set_linked()` | *N/A* | -| `gimp_drawable_set_name()` | `gimp_item_set_name()` | -| `gimp_drawable_set_tattoo()` | `gimp_item_set_tattoo()` | -| `gimp_drawable_set_visible()` | `gimp_item_set_visible()` | -| `gimp_drawable_transform_2d()` | `gimp_item_transform_2d()` | -| `gimp_drawable_transform_2d_default()` | `gimp_item_transform_2d()` | -| `gimp_drawable_transform_flip()` | `gimp_item_transform_flip()` | -| `gimp_drawable_transform_flip_default()` | `gimp_item_transform_flip()` | -| `gimp_drawable_transform_flip_simple()` | `gimp_item_transform_flip_simple()` | -| `gimp_drawable_transform_matrix()` | `gimp_item_transform_matrix()` | -| `gimp_drawable_transform_matrix_default()` | `gimp_item_transform_matrix()` | -| `gimp_drawable_transform_perspective()` | `gimp_item_transform_perspective()` | -| `gimp_drawable_transform_perspective_default()` | `gimp_item_transform_perspective()` | -| `gimp_drawable_transform_rotate()` | `gimp_item_transform_rotate()` | -| `gimp_drawable_transform_rotate_default()` | `gimp_item_transform_rotate()` | -| `gimp_drawable_transform_rotate_simple()` | `gimp_item_transform_rotate_simple()` | -| `gimp_drawable_transform_scale()` | `gimp_item_transform_scale()` | -| `gimp_drawable_transform_scale_default()` | `gimp_item_transform_scale()` | -| `gimp_drawable_transform_shear()` | `gimp_item_transform_shear()` | -| `gimp_drawable_transform_shear_default()` | `gimp_item_transform_shear()` | -| `gimp_drawable_width()` | `gimp_drawable_get_width()` | -| `gimp_edit_blend()` | `gimp_drawable_edit_gradient_fill()` | -| `gimp_edit_bucket_fill()` | `gimp_drawable_edit_bucket_fill()` | -| `gimp_edit_bucket_fill_full()` | `gimp_drawable_edit_bucket_fill()` | -| `gimp_edit_clear()` | `gimp_drawable_edit_clear()` | -| `gimp_edit_fill()` | `gimp_drawable_edit_fill()` | -| `gimp_edit_paste_as_new()` | `gimp_edit_paste_as_new_image()` | -| `gimp_edit_named_paste_as_new()` | `gimp_edit_named_paste_as_new_image()` | -| `gimp_edit_stroke()` | `gimp_drawable_edit_stroke_selection()` | -| `gimp_edit_stroke_vectors()` | `gimp_drawable_edit_stroke_item()` | -| `gimp_ellipse_select()` | `gimp_image_select_ellipse()` | -| `gimp_enum_combo_box_set_stock_prefix()` | `gimp_enum_combo_box_set_icon_prefix()` | -| `gimp_enum_stock_box_new()` | `gimp_enum_icon_box_new()` | -| `gimp_enum_stock_box_new_with_range()` | `gimp_enum_icon_box_new_with_range()` | -| `gimp_enum_stock_box_set_child_padding()` | `gimp_enum_icon_box_set_child_padding()` | -| `gimp_enum_store_set_stock_prefix()` | `gimp_enum_store_set_icon_prefix()` | -| `gimp_equalize()` | `gimp_drawable_equalize()` | -| `gimp_flip()` | `gimp_item_transform_flip_simple()` | -| `gimp_floating_sel_relax()` | *N/A* | -| `gimp_floating_sel_rigor()` | *N/A* | -| `gimp_free_select()` | `gimp_image_select_polygon()` | -| `gimp_fuzzy_select()` | `gimp_image_select_contiguous_color()` | -| `gimp_fuzzy_select_full()` | `gimp_image_select_contiguous_color()` | -| `gimp_gamma()` | `gimp_drawable_get_format()` | -| `gimp_get_icon_theme_dir()` | *N/A* | -| `gimp_get_path_by_tattoo()` | `gimp_image_get_path_by_tattoo()` | -| `gimp_get_theme_dir()` | *N/A* | -| `gimp_gradients_get_gradient_data()` | `gimp_gradient_get_uniform_samples()` | -| `gimp_gradients_sample_custom()` | `gimp_gradient_get_custom_samples()` | -| `gimp_gradients_sample_uniform()` | `gimp_gradient_get_uniform_samples()` | -| `gimp_histogram()` | `gimp_drawable_histogram()` | -| `gimp_hue_saturation()` | `gimp_drawable_hue_saturation()` | -| `gimp_image_add_channel()` | `gimp_image_insert_channel()` | -| `gimp_image_add_layer()` | `gimp_image_insert_layer()` | -| `gimp_image_add_vectors()` | `gimp_image_insert_path()` | -| `gimp_image_attach_new_parasite()` | `gimp_image_attach_parasite()` | -| `gimp_image_base_type()` | `gimp_image_get_base_type()` | -| `gimp_image_free_shadow()` | `gimp_drawable_free_shadow()` | -| `gimp_image_get_channel_position()` | `gimp_image_get_item_position()` | -| `gimp_image_get_cmap()` | `gimp_image_get_colormap()` | -| `gimp_image_get_layer_position()` | `gimp_image_get_item_position()` | -| `gimp_image_get_vectors_position()` | `gimp_image_get_item_position()` | -| `gimp_image_height()` | `gimp_image_get_height()` | -| `gimp_image_lower_channel()` | `gimp_image_lower_item()` | -| `gimp_image_lower_layer()` | `gimp_image_lower_item()` | -| `gimp_image_lower_layer_to_bottom()` | `gimp_image_lower_item_to_bottom()` | -| `gimp_image_lower_vectors()` | `gimp_image_lower_item()` | -| `gimp_image_lower_vectors_to_bottom()` | `gimp_image_lower_item_to_bottom()` | -| `gimp_image_menu_new()` | `gimp_image_combo_box_new()` | -| `gimp_image_parasite_attach()` | `gimp_image_attach_parasite()` | -| `gimp_image_parasite_detach()` | `gimp_image_detach_parasite()` | -| `gimp_image_parasite_find()` | `gimp_image_get_parasite()` | -| `gimp_image_parasite_list()` | `gimp_image_get_parasite_list()` | -| `gimp_image_raise_channel()` | `gimp_image_raise_item()` | -| `gimp_image_raise_layer()` | `gimp_image_raise_item()` | -| `gimp_image_raise_layer_to_top()` | `gimp_image_raise_item_to_top()` | -| `gimp_image_raise_vectors()` | `gimp_image_raise_item()` | -| `gimp_image_raise_vectors_to_top()` | `gimp_image_raise_item_to_top()` | -| `gimp_image_scale_full()` | `gimp_image_scale()` | -| `gimp_image_set_cmap()` | `gimp_image_set_colormap()` | -| `gimp_image_width()` | `gimp_image_get_width()` | -| `gimp_install_cmap()` | *N/A* | -| `gimp_invert()` | `gimp_drawable_invert()` | -| `gimp_item_get_linked()` | *N/A* | -| `gimp_item_set_linked()` | *N/A* | -| `gimp_layer_menu_new()` | `gimp_layer_combo_box_new()` | -| `gimp_layer_scale_full()` | `gimp_layer_scale()` | -| `gimp_layer_translate()` | `gimp_item_transform_translate()` | -| `gimp_levels()` | `gimp_drawable_levels()` | -| `gimp_levels_auto()` | `gimp_drawable_levels_stretch()` | -| `gimp_levels_stretch()` | `gimp_drawable_levels_stretch()` | -| `gimp_min_colors()` | *N/A* | -| `gimp_palettes_get_palette()` | `gimp_context_get_palette()` | -| `gimp_palettes_get_palette_entry()` | `gimp_palette_entry_get_color()` | -| `gimp_parasite_attach()` | `gimp_attach_parasite()` | -| `gimp_parasite_data()` | `gimp_parasite_get_data()` | -| `gimp_parasite_data_size()` | `gimp_parasite_get_data()` | -| `gimp_parasite_detach()` | `gimp_detach_parasite()` | -| `gimp_parasite_find()` | `gimp_get_parasite()` | -| `gimp_parasite_flags()` | `gimp_parasite_get_flags()` | -| `gimp_parasite_list()` | `gimp_get_parasite_list()` | -| `gimp_parasite_name()` | `gimp_parasite_get_name()` | -| `gimp_path_delete()` | `gimp_image_remove_path()` | -| `gimp_path_get_current()` | `gimp_image_get_selected_paths()` | -| `gimp_path_get_locked()` | *N/A* | -| `gimp_path_get_points()` | `gimp_path_stroke_get_points()` | -| `gimp_path_get_point_at_dist()` | `gimp_path_stroke_get_point_at_dist()` | -| `gimp_path_get_tattoo()` | `gimp_item_get_tattoo()` | -| `gimp_path_import()` | `gimp_image_import_paths_from_file()` | -| `gimp_path_list()` | `gimp_image_get_paths()` | -| `gimp_path_set_current()` | `gimp_image_set_selected_paths()` | -| `gimp_path_set_locked()` | *N/A* | -| `gimp_path_set_points()` | `gimp_path_stroke_new_from_points()` | -| `gimp_path_set_tattoo()` | `gimp_item_set_tattoo()` | -| `gimp_path_stroke_current()` | `gimp_edit_stroke_vectors()` | -| `gimp_path_to_selection()` | `gimp_image_select_item()` | -| `gimp_patterns_get_pattern()` | `gimp_context_get_pattern()` | -| `gimp_patterns_get_pattern_data()` | `gimp_pattern_get_pixels()` | -| `gimp_perspective()` | `gimp_item_transform_perspective()` | -| `gimp_posterize()` | `gimp_drawable_posterize()` | -| `gimp_prop_enum_stock_box_new()` | `gimp_prop_enum_icon_box_new()` | -| `gimp_prop_stock_image_new()` | `gimp_prop_icon_image_new()` | -| `gimp_prop_unit_menu_new()` | `gimp_prop_unit_combo_box_new()` | -| `gimp_rect_select()` | `gimp_image_select_rectangle()` | -| `gimp_rotate()` | `gimp_item_transform_rotate()` | -| `gimp_round_rect_select()` | `gimp_image_select_round_rectangle()` | -| `gimp_scale()` | `gimp_item_transform_scale()` | -| `gimp_selection_combine()` | `gimp_image_select_item()` | -| `gimp_selection_layer_alpha()` | `gimp_image_select_item()` | -| `gimp_selection_load()` | `gimp_image_select_item()` | -| `gimp_shear()` | `gimp_item_transform_shear()` | -| `gimp_stock_init()` | `gimp_icons_init()` | -| `gimp_text()` | `gimp_text_fontname()` | -| `gimp_text_get_extents()` | `gimp_text_get_extents_fontname()` | -| `gimp_text_layer_get_hinting()` | `gimp_text_layer_get_hint_style()` | -| `gimp_text_layer_set_hinting()` | `gimp_text_layer_set_hint_style()` | -| `gimp_threshold()` | `gimp_drawable_threshold()` | -| `gimp_toggle_button_sensitive_update()` | `g_object_bind_property()` | -| `gimp_transform_2d()` | `gimp_item_transform_2d()` | -| `gimp_unit_menu_update()` | `#GimpUnitComboBox` | -| `gimp_vectors_export_to_file()` | `gimp_image_export_path_to_file()` | -| `gimp_vectors_export_to_string()` | `gimp_image_export_path_to_string()` | -| `gimp_vectors_get_image()` | `gimp_item_get_image()` | -| `gimp_vectors_get_linked()` | *N/A* | -| `gimp_vectors_get_name()` | `gimp_item_get_name()` | -| `gimp_vectors_get_tattoo()` | `gimp_item_get_tattoo()` | -| `gimp_vectors_get_visible()` | `gimp_item_get_visible()` | -| `gimp_vectors_import_from_file()` | `gimp_image_import_paths_from_file()` | -| `gimp_vectors_import_from_string()` | `gimp_image_import_paths_from_string()` | -| `gimp_vectors_is_valid()` | `gimp_item_is_valid()` | -| `gimp_vectors_parasite_attach()` | `gimp_item_attach_parasite()` | -| `gimp_vectors_parasite_detach()` | `gimp_item_detach_parasite()` | -| `gimp_vectors_parasite_find()` | `gimp_item_get_parasite()` | -| `gimp_vectors_parasite_list()` | `gimp_item_get_parasite_list()` | -| `gimp_vectors_set_linked()` | *N/A* | -| `gimp_vectors_set_name()` | `gimp_item_set_name()` | -| `gimp_vectors_set_tattoo()` | `gimp_item_set_tattoo()` | -| `gimp_vectors_set_visible()` | `gimp_item_set_visible()` | -| `gimp_vectors_to_selection()` | `gimp_image_select_item()` | -| `gimp_zoom_preview_get_drawable_id()` | `gimp_zoom_preview_get_drawable()` | -| `gimp_zoom_preview_new()` | `gimp_zoom_preview_new_from_drawable()` | -| `gimp_zoom_preview_new_from_drawable_id()` | `gimp_zoom_preview_new_from_drawable()` | -| `gimp_zoom_preview_new_with_model()` | `gimp_zoom_preview_new_with_model_from_drawable()`|