2010-09-08 08:48:37 +08:00
|
|
|
/* LIBGIMP - The GIMP Library
|
|
|
|
* Copyright (C) 1995-2003 Peter Mattis and Spencer Kimball
|
|
|
|
*
|
|
|
|
* gimpitemtransform_pdb.c
|
|
|
|
*
|
|
|
|
* This library is free software: you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 3 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library. If not, see
|
2018-07-12 05:27:07 +08:00
|
|
|
* <https://www.gnu.org/licenses/>.
|
2010-09-08 08:48:37 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
/* NOTE: This file is auto-generated by pdbgen.pl */
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include "gimp.h"
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2019-07-31 16:04:43 +08:00
|
|
|
* SECTION: gimpitemtransform
|
2010-09-08 08:48:37 +08:00
|
|
|
* @title: gimpitemtransform
|
|
|
|
* @short_description: Functions to perform transformations on items.
|
|
|
|
*
|
|
|
|
* Functions to perform transformations on items.
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
2018-04-23 09:06:23 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_translate:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The item.
|
|
|
|
* @off_x: Offset in x direction.
|
|
|
|
* @off_y: Offset in y direction.
|
|
|
|
*
|
|
|
|
* Translate the item by the specified offsets.
|
|
|
|
*
|
|
|
|
* This procedure translates the item by the amounts specified in the
|
|
|
|
* off_x and off_y arguments. These can be negative, and are considered
|
|
|
|
* offsets from the current position. The offsets will be rounded to
|
|
|
|
* the nearest pixel unless the item is a path.
|
|
|
|
*
|
|
|
|
* If the item is attached to an image and has its linked flag set to
|
|
|
|
* TRUE, all additional items contained in the image which have the
|
|
|
|
* linked flag set to TRUE will also be translated by the specified
|
|
|
|
* offsets.
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The translated item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.10
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_translate (GimpItem *item,
|
|
|
|
gdouble off_x,
|
|
|
|
gdouble off_y)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
G_TYPE_DOUBLE, off_x,
|
|
|
|
G_TYPE_DOUBLE, off_y,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-translate",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_flip_simple:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
|
|
|
* @flip_type: Type of flip.
|
|
|
|
* @auto_center: Whether to automatically position the axis in the selection center.
|
|
|
|
* @axis: coord. of flip axis.
|
|
|
|
*
|
|
|
|
* Flip the specified item either vertically or horizontally.
|
|
|
|
*
|
|
|
|
* This procedure flips the specified item.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then flipped. If auto_center
|
|
|
|
* is set to TRUE, the flip is around the selection's center.
|
|
|
|
* Otherwise, the coordinate of the axis needs to be specified. The
|
|
|
|
* return value is the ID of the flipped floating selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be flipped around its center if auto_center is set to
|
|
|
|
* TRUE, otherwise the coordinate of the axis needs to be specified.
|
|
|
|
* Additionally, if the item has its linked flag set to TRUE, all
|
|
|
|
* additional items contained in the image which have the linked flag
|
|
|
|
* set to TRUE will also be flipped around the same axis. The return
|
|
|
|
* value will be equal to the item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The flipped item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.2
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_flip_simple (GimpItem *item,
|
|
|
|
GimpOrientationType flip_type,
|
|
|
|
gboolean auto_center,
|
|
|
|
gdouble axis)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
GIMP_TYPE_ORIENTATION_TYPE, flip_type,
|
|
|
|
G_TYPE_BOOLEAN, auto_center,
|
|
|
|
G_TYPE_DOUBLE, axis,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-flip-simple",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_flip:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
|
|
|
* @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.
|
|
|
|
*
|
|
|
|
* Flip the specified item around a given line.
|
|
|
|
*
|
|
|
|
* This procedure flips the specified item.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then flipped. The axis to
|
|
|
|
* flip around is specified by specifying two points from that line.
|
|
|
|
* The return value is the ID of the flipped floating selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be flipped around the specified axis. Additionally, if the
|
|
|
|
* item has its linked flag set to TRUE, all additional items contained
|
|
|
|
* in the image which have the linked flag set to TRUE will also be
|
|
|
|
* flipped around the same axis. The return value will be equal to the
|
|
|
|
* item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The flipped item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_flip (GimpItem *item,
|
|
|
|
gdouble x0,
|
|
|
|
gdouble y0,
|
|
|
|
gdouble x1,
|
|
|
|
gdouble y1)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
G_TYPE_DOUBLE, x0,
|
|
|
|
G_TYPE_DOUBLE, y0,
|
|
|
|
G_TYPE_DOUBLE, x1,
|
|
|
|
G_TYPE_DOUBLE, y1,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-flip",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_perspective:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
|
|
|
* @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.
|
|
|
|
*
|
|
|
|
* Perform a possibly non-affine transformation on the specified item.
|
|
|
|
*
|
|
|
|
* This procedure performs a possibly non-affine transformation on the
|
|
|
|
* specified item by allowing the corners of the original bounding box
|
|
|
|
* to be arbitrarily remapped to any values.
|
|
|
|
*
|
|
|
|
* The 4 coordinates specify the new locations of each corner of the
|
|
|
|
* original bounding box. By specifying these values, any affine
|
|
|
|
* transformation (rotation, scaling, translation) can be affected.
|
|
|
|
* Additionally, these values can be specified such that the resulting
|
|
|
|
* transformed item will appear to have been projected via a
|
|
|
|
* perspective transform.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then transformed as
|
|
|
|
* specified. The return value is the ID of the transformed floating
|
|
|
|
* selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be transformed according to the specified mapping.
|
|
|
|
* Additionally, if the item has its linked flag set to TRUE, all
|
|
|
|
* additional items contained in the image which have the linked flag
|
|
|
|
* set to TRUE will also be transformed the same way. The return value
|
|
|
|
* will be equal to the item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The transformed item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_perspective (GimpItem *item,
|
|
|
|
gdouble x0,
|
|
|
|
gdouble y0,
|
|
|
|
gdouble x1,
|
|
|
|
gdouble y1,
|
|
|
|
gdouble x2,
|
|
|
|
gdouble y2,
|
|
|
|
gdouble x3,
|
|
|
|
gdouble y3)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
G_TYPE_DOUBLE, x0,
|
|
|
|
G_TYPE_DOUBLE, y0,
|
|
|
|
G_TYPE_DOUBLE, x1,
|
|
|
|
G_TYPE_DOUBLE, y1,
|
|
|
|
G_TYPE_DOUBLE, x2,
|
|
|
|
G_TYPE_DOUBLE, y2,
|
|
|
|
G_TYPE_DOUBLE, x3,
|
|
|
|
G_TYPE_DOUBLE, y3,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-perspective",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_rotate_simple:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
2010-09-08 08:48:37 +08:00
|
|
|
* @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.
|
|
|
|
*
|
|
|
|
* Rotate the specified item about given coordinates through the
|
|
|
|
* specified angle.
|
|
|
|
*
|
2018-04-23 23:10:46 +08:00
|
|
|
* This function rotates the specified item.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then rotated by the
|
|
|
|
* specified amount. If auto_center is set to TRUE, the rotation is
|
|
|
|
* around the selection's center. Otherwise, the coordinate of the
|
|
|
|
* center point needs to be specified. The return value is the ID of
|
|
|
|
* the rotated floating selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be rotated around its center if auto_center is set to
|
|
|
|
* TRUE, otherwise the coordinate of the center point needs to be
|
|
|
|
* specified. Additionally, if the item has its linked flag set to
|
|
|
|
* TRUE, all additional items contained in the image which have the
|
|
|
|
* linked flag set to TRUE will also be rotated around the same center
|
|
|
|
* point. The return value will be equal to the item ID supplied as
|
|
|
|
* input.
|
2018-04-23 09:06:23 +08:00
|
|
|
*
|
2013-09-14 09:12:26 +08:00
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_transform_resize().
|
2010-09-08 08:48:37 +08:00
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The rotated item.
|
2010-09-08 08:48:37 +08:00
|
|
|
*
|
2015-06-01 03:18:09 +08:00
|
|
|
* Since: 2.8
|
2010-09-16 04:07:36 +08:00
|
|
|
**/
|
2019-08-13 19:59:33 +08:00
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_rotate_simple (GimpItem *item,
|
|
|
|
GimpRotationType rotate_type,
|
|
|
|
gboolean auto_center,
|
|
|
|
gdouble center_x,
|
|
|
|
gdouble center_y)
|
2010-09-08 08:48:37 +08:00
|
|
|
{
|
2019-07-30 16:51:16 +08:00
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
2019-08-13 19:59:33 +08:00
|
|
|
GimpItem *ret_item = NULL;
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-08-08 19:01:50 +08:00
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-08 19:01:50 +08:00
|
|
|
GIMP_TYPE_ROTATION_TYPE, rotate_type,
|
|
|
|
G_TYPE_BOOLEAN, auto_center,
|
|
|
|
G_TYPE_DOUBLE, center_x,
|
|
|
|
G_TYPE_DOUBLE, center_y,
|
2019-07-30 16:51:16 +08:00
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-rotate-simple",
|
|
|
|
args);
|
2019-07-30 16:51:16 +08:00
|
|
|
gimp_value_array_unref (args);
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-07-30 16:51:16 +08:00
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-07-30 16:51:16 +08:00
|
|
|
gimp_value_array_unref (return_vals);
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-08-13 19:59:33 +08:00
|
|
|
return ret_item;
|
2010-09-08 08:48:37 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2019-09-03 19:31:27 +08:00
|
|
|
* gimp_item_transform_rotate:
|
|
|
|
* @item: The affected item.
|
|
|
|
* @angle: The angle of rotation (radians).
|
2010-09-08 08:48:37 +08:00
|
|
|
* @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.
|
|
|
|
*
|
|
|
|
* Rotate the specified item about given coordinates through the
|
|
|
|
* specified angle.
|
|
|
|
*
|
2018-04-23 23:10:46 +08:00
|
|
|
* This function rotates the specified item.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then rotated by the
|
|
|
|
* specified amount. If auto_center is set to TRUE, the rotation is
|
|
|
|
* around the selection's center. Otherwise, the coordinate of the
|
|
|
|
* center point needs to be specified. The return value is the ID of
|
|
|
|
* the rotated floating selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be rotated around its center if auto_center is set to
|
|
|
|
* TRUE, otherwise the coordinate of the center point needs to be
|
|
|
|
* specified. Additionally, if the item has its linked flag set to
|
|
|
|
* TRUE, all additional items contained in the image which have the
|
|
|
|
* linked flag set to TRUE will also be rotated around the same center
|
|
|
|
* point. The return value will be equal to the item ID supplied as
|
|
|
|
* input.
|
2018-04-23 09:06:23 +08:00
|
|
|
*
|
2013-09-14 09:12:26 +08:00
|
|
|
* This procedure is affected by the following context setters:
|
2019-09-03 19:31:27 +08:00
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
2013-05-31 07:15:32 +08:00
|
|
|
* gimp_context_set_transform_resize().
|
2010-09-08 08:48:37 +08:00
|
|
|
*
|
2019-09-03 19:31:27 +08:00
|
|
|
* Returns: (transfer none): The rotated item.
|
2010-09-08 08:48:37 +08:00
|
|
|
*
|
2015-06-01 03:18:09 +08:00
|
|
|
* Since: 2.8
|
2010-09-16 04:07:36 +08:00
|
|
|
**/
|
2019-09-03 19:31:27 +08:00
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_rotate (GimpItem *item,
|
|
|
|
gdouble angle,
|
|
|
|
gboolean auto_center,
|
|
|
|
gdouble center_x,
|
|
|
|
gdouble center_y)
|
2010-09-08 08:48:37 +08:00
|
|
|
{
|
2019-07-30 16:51:16 +08:00
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
2019-09-03 19:31:27 +08:00
|
|
|
GimpItem *ret_item = NULL;
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-08-08 19:01:50 +08:00
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-09-03 19:31:27 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
|
|
|
G_TYPE_DOUBLE, angle,
|
2019-08-08 19:01:50 +08:00
|
|
|
G_TYPE_BOOLEAN, auto_center,
|
|
|
|
G_TYPE_DOUBLE, center_x,
|
|
|
|
G_TYPE_DOUBLE, center_y,
|
2019-07-30 16:51:16 +08:00
|
|
|
G_TYPE_NONE);
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-rotate",
|
|
|
|
args);
|
2019-07-30 16:51:16 +08:00
|
|
|
gimp_value_array_unref (args);
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-07-30 16:51:16 +08:00
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-09-03 19:31:27 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-07-30 16:51:16 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
2010-09-08 08:48:37 +08:00
|
|
|
|
2019-09-03 19:31:27 +08:00
|
|
|
return ret_item;
|
2019-08-13 19:59:33 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gimp_item_transform_scale:
|
|
|
|
* @item: The affected item.
|
|
|
|
* @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.
|
|
|
|
*
|
|
|
|
* Scale the specified item.
|
|
|
|
*
|
|
|
|
* This procedure scales the specified item.
|
|
|
|
*
|
|
|
|
* The 2 coordinates specify the new locations of the top-left and
|
|
|
|
* bottom-roght corners of the original bounding box.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then scaled as specified.
|
|
|
|
* The return value is the ID of the scaled floating selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be scaled according to the specified coordinates.
|
|
|
|
* Additionally, if the item has its linked flag set to TRUE, all
|
|
|
|
* additional items contained in the image which have the linked flag
|
|
|
|
* set to TRUE will also be scaled the same way. The return value will
|
|
|
|
* be equal to the item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The scaled item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_scale (GimpItem *item,
|
|
|
|
gdouble x0,
|
|
|
|
gdouble y0,
|
|
|
|
gdouble x1,
|
|
|
|
gdouble y1)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
G_TYPE_DOUBLE, x0,
|
|
|
|
G_TYPE_DOUBLE, y0,
|
|
|
|
G_TYPE_DOUBLE, x1,
|
|
|
|
G_TYPE_DOUBLE, y1,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-scale",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_shear:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
|
|
|
* @shear_type: Type of shear.
|
|
|
|
* @magnitude: The magnitude of the shear.
|
|
|
|
*
|
|
|
|
* Shear the specified item about its center by the specified
|
|
|
|
* magnitude.
|
|
|
|
*
|
|
|
|
* This procedure shears the specified item.
|
|
|
|
*
|
|
|
|
* The shear type parameter indicates whether the shear will be applied
|
|
|
|
* horizontally or vertically. The magnitude can be either positive or
|
|
|
|
* negative and indicates the extent (in pixels) to shear by.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then sheared as specified.
|
|
|
|
* The return value is the ID of the sheared floating selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be sheared according to the specified parameters.
|
|
|
|
* Additionally, if the item has its linked flag set to TRUE, all
|
|
|
|
* additional items contained in the image which have the linked flag
|
|
|
|
* set to TRUE will also be sheared the same way. The return value will
|
|
|
|
* be equal to the item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The sheared item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_shear (GimpItem *item,
|
|
|
|
GimpOrientationType shear_type,
|
|
|
|
gdouble magnitude)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
GIMP_TYPE_ORIENTATION_TYPE, shear_type,
|
|
|
|
G_TYPE_DOUBLE, magnitude,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-shear",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_2d:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
|
|
|
* @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 the specified item in 2d.
|
|
|
|
*
|
|
|
|
* This procedure transforms the specified item.
|
|
|
|
*
|
|
|
|
* The transformation is done by scaling by the x and y scale factors
|
|
|
|
* about the point (source_x, source_y), then rotating around the same
|
|
|
|
* point, then translating that point to the new position (dest_x,
|
|
|
|
* dest_y).
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then transformed as
|
|
|
|
* specified. The return value is the ID of the transformed floating
|
|
|
|
* selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be transformed according to the specified parameters.
|
|
|
|
* Additionally, if the item has its linked flag set to TRUE, all
|
|
|
|
* additional items contained in the image which have the linked flag
|
|
|
|
* set to TRUE will also be transformed the same way. The return value
|
|
|
|
* will be equal to the item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The transformed item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_2d (GimpItem *item,
|
|
|
|
gdouble source_x,
|
|
|
|
gdouble source_y,
|
|
|
|
gdouble scale_x,
|
|
|
|
gdouble scale_y,
|
|
|
|
gdouble angle,
|
|
|
|
gdouble dest_x,
|
|
|
|
gdouble dest_y)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
G_TYPE_DOUBLE, source_x,
|
|
|
|
G_TYPE_DOUBLE, source_y,
|
|
|
|
G_TYPE_DOUBLE, scale_x,
|
|
|
|
G_TYPE_DOUBLE, scale_y,
|
|
|
|
G_TYPE_DOUBLE, angle,
|
|
|
|
G_TYPE_DOUBLE, dest_x,
|
|
|
|
G_TYPE_DOUBLE, dest_y,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-2d",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|
|
|
|
|
2010-09-08 08:48:37 +08:00
|
|
|
/**
|
|
|
|
* gimp_item_transform_matrix:
|
2019-08-13 19:59:33 +08:00
|
|
|
* @item: The affected item.
|
|
|
|
* @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 the specified item in 2d.
|
|
|
|
*
|
|
|
|
* This procedure transforms the specified item.
|
|
|
|
*
|
|
|
|
* The transformation is done by assembling a 3x3 matrix from the
|
|
|
|
* coefficients passed.
|
|
|
|
*
|
|
|
|
* If a selection exists and the item is a drawable, the portion of the
|
|
|
|
* drawable which lies under the selection is cut from the drawable and
|
|
|
|
* made into a floating selection which is then transformed as
|
|
|
|
* specified. The return value is the ID of the transformed floating
|
|
|
|
* selection.
|
|
|
|
*
|
|
|
|
* If there is no selection or the item is not a drawable, the entire
|
|
|
|
* item will be transformed according to the specified matrix.
|
|
|
|
* Additionally, if the item has its linked flag set to TRUE, all
|
|
|
|
* additional items contained in the image which have the linked flag
|
|
|
|
* set to TRUE will also be transformed the same way. The return value
|
|
|
|
* will be equal to the item ID supplied as input.
|
|
|
|
*
|
|
|
|
* This procedure is affected by the following context setters:
|
|
|
|
* gimp_context_set_interpolation(),
|
|
|
|
* gimp_context_set_transform_direction(),
|
|
|
|
* gimp_context_set_transform_resize().
|
|
|
|
*
|
2019-08-15 18:12:25 +08:00
|
|
|
* Returns: (transfer none): The transformed item.
|
2019-08-13 19:59:33 +08:00
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
**/
|
|
|
|
GimpItem *
|
|
|
|
gimp_item_transform_matrix (GimpItem *item,
|
|
|
|
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)
|
|
|
|
{
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *return_vals;
|
|
|
|
GimpItem *ret_item = NULL;
|
|
|
|
|
|
|
|
args = gimp_value_array_new_from_types (NULL,
|
2019-08-29 17:25:35 +08:00
|
|
|
GIMP_TYPE_ITEM, item,
|
2019-08-13 19:59:33 +08:00
|
|
|
G_TYPE_DOUBLE, coeff_0_0,
|
|
|
|
G_TYPE_DOUBLE, coeff_0_1,
|
|
|
|
G_TYPE_DOUBLE, coeff_0_2,
|
|
|
|
G_TYPE_DOUBLE, coeff_1_0,
|
|
|
|
G_TYPE_DOUBLE, coeff_1_1,
|
|
|
|
G_TYPE_DOUBLE, coeff_1_2,
|
|
|
|
G_TYPE_DOUBLE, coeff_2_0,
|
|
|
|
G_TYPE_DOUBLE, coeff_2_1,
|
|
|
|
G_TYPE_DOUBLE, coeff_2_2,
|
|
|
|
G_TYPE_NONE);
|
|
|
|
|
2019-09-04 05:55:49 +08:00
|
|
|
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
"gimp-item-transform-matrix",
|
|
|
|
args);
|
2019-08-13 19:59:33 +08:00
|
|
|
gimp_value_array_unref (args);
|
|
|
|
|
|
|
|
if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
|
2019-08-29 17:25:35 +08:00
|
|
|
ret_item = g_value_get_object (gimp_value_array_index (return_vals, 1));
|
2019-08-13 19:59:33 +08:00
|
|
|
|
|
|
|
gimp_value_array_unref (return_vals);
|
|
|
|
|
|
|
|
return ret_item;
|
|
|
|
}
|