## gimpdrawabletransform

gimpdrawabletransform — Functions to perform transformatrions on drawables.

## Synopsis

    gint32              gimp_drawable_transform_flip_simple (gint32 drawable_ID,
                                                             GimpOrientationType flip_type,
                                                             gboolean auto_center,
                                                             gdouble axis,
                                                             gboolean clip_result);
    gint32              gimp_drawable_transform_flip        (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             gboolean clip_result);
    gint32              gimp_drawable_transform_flip_default
                                                            (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gboolean interpolate,
                                                             gboolean clip_result);
    gint32              gimp_drawable_transform_perspective (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gdouble x2,
                                                             gdouble y2,
                                                             gdouble x3,
                                                             gdouble y3,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_perspective_default
                                                            (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gdouble x2,
                                                             gdouble y2,
                                                             gdouble x3,
                                                             gdouble y3,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_rotate_simple
                                                            (gint32 drawable_ID,
                                                             GimpRotationType rotate_type,
                                                             gboolean auto_center,
                                                             gint center_x,
                                                             gint center_y,
                                                             gboolean clip_result);
    gint32              gimp_drawable_transform_rotate      (gint32 drawable_ID,
                                                             gdouble angle,
                                                             gboolean auto_center,
                                                             gint center_x,
                                                             gint center_y,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_rotate_default
                                                            (gint32 drawable_ID,
                                                             gdouble angle,
                                                             gboolean auto_center,
                                                             gint center_x,
                                                             gint center_y,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_scale       (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_scale_default
                                                            (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_shear       (gint32 drawable_ID,
                                                             GimpOrientationType shear_type,
                                                             gdouble magnitude,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_shear_default
                                                            (gint32 drawable_ID,
                                                             GimpOrientationType shear_type,
                                                             gdouble magnitude,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_2d          (gint32 drawable_ID,
                                                             gdouble source_x,
                                                             gdouble source_y,
                                                             gdouble scale_x,
                                                             gdouble scale_y,
                                                             gdouble angle,
                                                             gdouble dest_x,
                                                             gdouble dest_y,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_2d_default  (gint32 drawable_ID,
                                                             gdouble source_x,
                                                             gdouble source_y,
                                                             gdouble scale_x,
                                                             gdouble scale_y,
                                                             gdouble angle,
                                                             gdouble dest_x,
                                                             gdouble dest_y,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_matrix      (gint32 drawable_ID,
                                                             gdouble coeff_0_0,
                                                             gdouble coeff_0_1,
                                                             gdouble coeff_0_2,
                                                             gdouble coeff_1_0,
                                                             gdouble coeff_1_1,
                                                             gdouble coeff_1_2,
                                                             gdouble coeff_2_0,
                                                             gdouble coeff_2_1,
                                                             gdouble coeff_2_2,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);
    gint32              gimp_drawable_transform_matrix_default
                                                            (gint32 drawable_ID,
                                                             gdouble coeff_0_0,
                                                             gdouble coeff_0_1,
                                                             gdouble coeff_0_2,
                                                             gdouble coeff_1_0,
                                                             gdouble coeff_1_1,
                                                             gdouble coeff_1_2,
                                                             gdouble coeff_2_0,
                                                             gdouble coeff_2_1,
                                                             gdouble coeff_2_2,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

## Description

Functions to perform transformatrions on drawables.

## Details

### gimp_drawable_transform_flip_simple ()

    gint32              gimp_drawable_transform_flip_simple (gint32 drawable_ID,
                                                             GimpOrientationType flip_type,
                                                             gboolean auto_center,
                                                             gdouble axis,
                                                             gboolean clip_result);

### Warning

`gimp_drawable_transform_flip_simple` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_flip_simple()` instead.

`drawable_ID` : | The affected drawable.
`flip_type` : | Type of flip.
`auto_center` : | Whether to automatically position the axis in the selection center.
`axis` : | coord. of flip axis.
`clip_result` : | Whether to clip results.
Returns : | The flipped drawable.

Since GIMP 2.2

### gimp_drawable_transform_flip ()

    gint32              gimp_drawable_transform_flip        (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             gboolean clip_result);

### Warning

`gimp_drawable_transform_flip` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_flip()` instead.

`drawable_ID` : | The affected drawable.
`x0` : | horz. coord. of one end of axis.
`y0` : | vert. coord. of one end of axis.
`x1` : | horz. coord. of other end of axis.
`y1` : | vert. coord. of other end of axis.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | Whether to clip results.
Returns : | The flipped drawable.

Since GIMP 2.2

### gimp_drawable_transform_flip_default ()

    gint32              gimp_drawable_transform_flip_default
                                                            (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gboolean interpolate,
                                                             gboolean clip_result);

### Warning

`gimp_drawable_transform_flip_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_flip()` instead.

`drawable_ID` : | The affected drawable.
`x0` : | horz. coord. of one end of axis.
`y0` : | vert. coord. of one end of axis.
`x1` : | horz. coord. of other end of axis.
`y1` : | vert. coord. of other end of axis.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | Whether to clip results.
Returns : | The flipped drawable.

Since GIMP 2.2

### gimp_drawable_transform_perspective ()

    gint32              gimp_drawable_transform_perspective (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gdouble x2,
                                                             gdouble y2,
                                                             gdouble x3,
                                                             gdouble y3,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_perspective` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_perspective()` instead.

`drawable_ID` : | The affected drawable.
`x0` : | The new x coordinate of upper-left corner of original bounding box.
`y0` : | The new y coordinate of upper-left corner of original bounding box.
`x1` : | The new x coordinate of upper-right corner of original bounding box.
`y1` : | The new y coordinate of upper-right corner of original bounding box.
`x2` : | The new x coordinate of lower-left corner of original bounding box.
`y2` : | The new y coordinate of lower-left corner of original bounding box.
`x3` : | The new x coordinate of lower-right corner of original bounding box.
`y3` : | The new y coordinate of lower-right corner of original bounding box.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | How to clip results.
Returns : | The newly mapped drawable.

Since GIMP 2.2

### gimp_drawable_transform_perspective_default ()

    gint32              gimp_drawable_transform_perspective_default
                                                            (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gdouble x2,
                                                             gdouble y2,
                                                             gdouble x3,
                                                             gdouble y3,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_perspective_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_perspective()` instead.

`drawable_ID` : | The affected drawable.
`x0` : | The new x coordinate of upper-left corner of original bounding box.
`y0` : | The new y coordinate of upper-left corner of original bounding box.
`x1` : | The new x coordinate of upper-right corner of original bounding box.
`y1` : | The new y coordinate of upper-right corner of original bounding box.
`x2` : | The new x coordinate of lower-left corner of original bounding box.
`y2` : | The new y coordinate of lower-left corner of original bounding box.
`x3` : | The new x coordinate of lower-right corner of original bounding box.
`y3` : | The new y coordinate of lower-right corner of original bounding box.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | How to clip results.
Returns : | The newly mapped drawable.

Since GIMP 2.2

### gimp_drawable_transform_rotate_simple ()

    gint32              gimp_drawable_transform_rotate_simple
                                                            (gint32 drawable_ID,
                                                             GimpRotationType rotate_type,
                                                             gboolean auto_center,
                                                             gint center_x,
                                                             gint center_y,
                                                             gboolean clip_result);

### Warning

`gimp_drawable_transform_rotate_simple` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_rotate_simple()` instead.

`drawable_ID` : | The affected drawable.
`rotate_type` : | Type of rotation.
`auto_center` : | Whether to automatically rotate around the selection center.
`center_x` : | The hor. coordinate of the center of rotation.
`center_y` : | The vert. coordinate of the center of rotation.
`clip_result` : | Whether to clip results.
Returns : | The rotated drawable.

Since GIMP 2.2

### gimp_drawable_transform_rotate ()

    gint32              gimp_drawable_transform_rotate      (gint32 drawable_ID,
                                                             gdouble angle,
                                                             gboolean auto_center,
                                                             gint center_x,
                                                             gint center_y,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_rotate` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_rotate()` instead.

`drawable_ID` : | The affected drawable.
`angle` : | The angle of rotation (radians).
`auto_center` : | Whether to automatically rotate around the selection center.
`center_x` : | The hor. coordinate of the center of rotation.
`center_y` : | The vert. coordinate of the center of rotation.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | How to clip results.
Returns : | The rotated drawable.

Since GIMP 2.2

### gimp_drawable_transform_rotate_default ()

    gint32              gimp_drawable_transform_rotate_default
                                                            (gint32 drawable_ID,
                                                             gdouble angle,
                                                             gboolean auto_center,
                                                             gint center_x,
                                                             gint center_y,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_rotate_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_rotate()` instead.

`drawable_ID` : | The affected drawable.
`angle` : | The angle of rotation (radians).
`auto_center` : | Whether to automatically rotate around the selection center.
`center_x` : | The hor. coordinate of the center of rotation.
`center_y` : | The vert. coordinate of the center of rotation.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | How to clip results.
Returns : | The rotated drawable.

Since GIMP 2.2

### gimp_drawable_transform_scale ()

    gint32              gimp_drawable_transform_scale       (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_scale` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_scale()` instead.

`drawable_ID` : | The affected drawable.
`x0` : | The new x coordinate of the upper-left corner of the scaled region.
`y0` : | The new y coordinate of the upper-left corner of the scaled region.
`x1` : | The new x coordinate of the lower-right corner of the scaled region.
`y1` : | The new y coordinate of the lower-right corner of the scaled region.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | How to clip results.
Returns : | The scaled drawable.

Since GIMP 2.2

### gimp_drawable_transform_scale_default ()

    gint32              gimp_drawable_transform_scale_default
                                                            (gint32 drawable_ID,
                                                             gdouble x0,
                                                             gdouble y0,
                                                             gdouble x1,
                                                             gdouble y1,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_scale_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_scale()` instead.

`drawable_ID` : | The affected drawable.
`x0` : | The new x coordinate of the upper-left corner of the scaled region.
`y0` : | The new y coordinate of the upper-left corner of the scaled region.
`x1` : | The new x coordinate of the lower-right corner of the scaled region.
`y1` : | The new y coordinate of the lower-right corner of the scaled region.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | How to clip results.
Returns : | The scaled drawable.

Since GIMP 2.2

### gimp_drawable_transform_shear ()

    gint32              gimp_drawable_transform_shear       (gint32 drawable_ID,
                                                             GimpOrientationType shear_type,
                                                             gdouble magnitude,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_shear` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_shear()` instead.

`drawable_ID` : | The affected drawable.
`shear_type` : | Type of shear.
`magnitude` : | The magnitude of the shear.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | How to clip results.
Returns : | The sheared drawable.

Since GIMP 2.2

### gimp_drawable_transform_shear_default ()

    gint32              gimp_drawable_transform_shear_default
                                                            (gint32 drawable_ID,
                                                             GimpOrientationType shear_type,
                                                             gdouble magnitude,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_shear_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_shear()` instead.

`drawable_ID` : | The affected drawable.
`shear_type` : | Type of shear.
`magnitude` : | The magnitude of the shear.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | How to clip results.
Returns : | The sheared drawable.

Since GIMP 2.2

### gimp_drawable_transform_2d ()

    gint32              gimp_drawable_transform_2d          (gint32 drawable_ID,
                                                             gdouble source_x,
                                                             gdouble source_y,
                                                             gdouble scale_x,
                                                             gdouble scale_y,
                                                             gdouble angle,
                                                             gdouble dest_x,
                                                             gdouble dest_y,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_2d` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_2d()` instead.

`drawable_ID` : | The affected drawable.
`source_x` : | X coordinate of the transformation center.
`source_y` : | Y coordinate of the transformation center.
`scale_x` : | Amount to scale in x direction.
`scale_y` : | Amount to scale in y direction.
`angle` : | The angle of rotation (radians).
`dest_x` : | X coordinate of where the center goes.
`dest_y` : | Y coordinate of where the center goes.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | How to clip results.
Returns : | The transformed drawable.

Since GIMP 2.2

### gimp_drawable_transform_2d_default ()

    gint32              gimp_drawable_transform_2d_default  (gint32 drawable_ID,
                                                             gdouble source_x,
                                                             gdouble source_y,
                                                             gdouble scale_x,
                                                             gdouble scale_y,
                                                             gdouble angle,
                                                             gdouble dest_x,
                                                             gdouble dest_y,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_2d_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_2d()` instead.

`drawable_ID` : | The affected drawable.
`source_x` : | X coordinate of the transformation center.
`source_y` : | Y coordinate of the transformation center.
`scale_x` : | Amount to scale in x direction.
`scale_y` : | Amount to scale in y direction.
`angle` : | The angle of rotation (radians).
`dest_x` : | X coordinate of where the center goes.
`dest_y` : | Y coordinate of where the center goes.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | How to clip results.
Returns : | The transformed drawable.

Since GIMP 2.2

### gimp_drawable_transform_matrix ()

    gint32              gimp_drawable_transform_matrix      (gint32 drawable_ID,
                                                             gdouble coeff_0_0,
                                                             gdouble coeff_0_1,
                                                             gdouble coeff_0_2,
                                                             gdouble coeff_1_0,
                                                             gdouble coeff_1_1,
                                                             gdouble coeff_1_2,
                                                             gdouble coeff_2_0,
                                                             gdouble coeff_2_1,
                                                             gdouble coeff_2_2,
                                                             GimpTransformDirection transform_direction,
                                                             GimpInterpolationType interpolation,
                                                             gboolean supersample,
                                                             gint recursion_level,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_matrix` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_matrix()` instead.

`drawable_ID` : | The affected drawable.
`coeff_0_0` : | coefficient (0,0) of the transformation matrix.
`coeff_0_1` : | coefficient (0,1) of the transformation matrix.
`coeff_0_2` : | coefficient (0,2) of the transformation matrix.
`coeff_1_0` : | coefficient (1,0) of the transformation matrix.
`coeff_1_1` : | coefficient (1,1) of the transformation matrix.
`coeff_1_2` : | coefficient (1,2) of the transformation matrix.
`coeff_2_0` : | coefficient (2,0) of the transformation matrix.
`coeff_2_1` : | coefficient (2,1) of the transformation matrix.
`coeff_2_2` : | coefficient (2,2) of the transformation matrix.
`transform_direction` : | Direction of transformation.
`interpolation` : | Type of interpolation.
`supersample` : | This parameter is ignored, supersampling is performed based on the interpolation type.
`recursion_level` : | Maximum recursion level used for supersampling (3 is a nice value).
`clip_result` : | How to clip results.
Returns : | The transformed drawable.

Since GIMP 2.2

### gimp_drawable_transform_matrix_default ()

    gint32              gimp_drawable_transform_matrix_default
                                                            (gint32 drawable_ID,
                                                             gdouble coeff_0_0,
                                                             gdouble coeff_0_1,
                                                             gdouble coeff_0_2,
                                                             gdouble coeff_1_0,
                                                             gdouble coeff_1_1,
                                                             gdouble coeff_1_2,
                                                             gdouble coeff_2_0,
                                                             gdouble coeff_2_1,
                                                             gdouble coeff_2_2,
                                                             gboolean interpolate,
                                                             GimpTransformResize clip_result);

### Warning

`gimp_drawable_transform_matrix_default` is deprecated and should not be used in newly-written code. Use `gimp_item_transform_matrix()` instead.

`drawable_ID` : | The affected drawable.
`coeff_0_0` : | coefficient (0,0) of the transformation matrix.
`coeff_0_1` : | coefficient (0,1) of the transformation matrix.
`coeff_0_2` : | coefficient (0,2) of the transformation matrix.
`coeff_1_0` : | coefficient (1,0) of the transformation matrix.
`coeff_1_1` : | coefficient (1,1) of the transformation matrix.
`coeff_1_2` : | coefficient (1,2) of the transformation matrix.
`coeff_2_0` : | coefficient (2,0) of the transformation matrix.
`coeff_2_1` : | coefficient (2,1) of the transformation matrix.
`coeff_2_2` : | coefficient (2,2) of the transformation matrix.
`interpolate` : | Whether to use interpolation and supersampling.
`clip_result` : | How to clip results.
Returns : | The transformed drawable.

Since GIMP 2.2