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.
This commit is contained in:
Bruno Lopes 2025-10-17 09:23:27 -03:00
parent 6910945bd4
commit 13d3643ad7
No known key found for this signature in database
6 changed files with 0 additions and 694 deletions

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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)
```

View file

@ -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)
])
```

View file

@ -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()`|