[gimp] pdb: add gimp-item-transform-translate procedure
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] pdb: add gimp-item-transform-translate procedure
- Date: Mon, 23 Apr 2018 13:50:14 +0000 (UTC)
commit acbdc4d5b49ddd810c7fae8b911083fec9ba4eeb
Author: Michael Natterer <mitch gimp org>
Date: Mon Apr 23 03:06:23 2018 +0200
pdb: add gimp-item-transform-translate procedure
We were only able to translate selections and layers (bot not channels
and paths) via the PDB, this new procedure fixes that. Deprecation of
old API and some more transform consistency to follow...
app/pdb/internal-procs.c | 2 +-
app/pdb/item-transform-cmds.c | 98 +++++++++++++++++++++++++++++++++++++++
libgimp/gimp.def | 1 +
libgimp/gimpitemtransform_pdb.c | 55 ++++++++++++++++++++++
libgimp/gimpitemtransform_pdb.h | 3 +
pdb/groups/item_transform.pdb | 67 ++++++++++++++++++++++++++-
6 files changed, 224 insertions(+), 2 deletions(-)
---
diff --git a/app/pdb/internal-procs.c b/app/pdb/internal-procs.c
index d2cc538..5763004 100644
--- a/app/pdb/internal-procs.c
+++ b/app/pdb/internal-procs.c
@@ -28,7 +28,7 @@
#include "internal-procs.h"
-/* 832 procedures registered total */
+/* 833 procedures registered total */
void
internal_procs_init (GimpPDB *pdb)
diff --git a/app/pdb/item-transform-cmds.c b/app/pdb/item-transform-cmds.c
index 9d4993c..4e2ebfc 100644
--- a/app/pdb/item-transform-cmds.c
+++ b/app/pdb/item-transform-cmds.c
@@ -34,6 +34,7 @@
#include "core/gimpdrawable-transform.h"
#include "core/gimpdrawable.h"
#include "core/gimpimage.h"
+#include "core/gimpitem-linked.h"
#include "core/gimpitem.h"
#include "core/gimpparamspecs.h"
#include "core/gimpprogress.h"
@@ -48,6 +49,51 @@
static GimpValueArray *
+item_transform_translate_invoker (GimpProcedure *procedure,
+ Gimp *gimp,
+ GimpContext *context,
+ GimpProgress *progress,
+ const GimpValueArray *args,
+ GError **error)
+{
+ gboolean success = TRUE;
+ GimpValueArray *return_vals;
+ GimpItem *item;
+ gdouble off_x;
+ gdouble off_y;
+
+ item = gimp_value_get_item (gimp_value_array_index (args, 0), gimp);
+ off_x = g_value_get_double (gimp_value_array_index (args, 1));
+ off_y = g_value_get_double (gimp_value_array_index (args, 2));
+
+ if (success)
+ {
+ if (gimp_pdb_item_is_modifiable (item,
+ GIMP_PDB_ITEM_POSITION, error))
+ {
+ if (gimp_item_get_linked (item) && gimp_item_is_attached (item))
+ {
+ gimp_item_linked_translate (item, off_x, off_y, TRUE);
+ }
+ else
+ {
+ gimp_item_translate (item, off_x, off_y, TRUE);
+ }
+ }
+ else
+ success = FALSE;
+ }
+
+ return_vals = gimp_procedure_get_return_values (procedure, success,
+ error ? *error : NULL);
+
+ if (success)
+ gimp_value_set_item (gimp_value_array_index (return_vals, 1), item);
+
+ return return_vals;
+}
+
+static GimpValueArray *
item_transform_flip_simple_invoker (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
@@ -872,6 +918,49 @@ register_item_transform_procs (GimpPDB *pdb)
GimpProcedure *procedure;
/*
+ * gimp-item-transform-translate
+ */
+ procedure = gimp_procedure_new (item_transform_translate_invoker);
+ gimp_object_set_static_name (GIMP_OBJECT (procedure),
+ "gimp-item-transform-translate");
+ gimp_procedure_set_static_strings (procedure,
+ "gimp-item-transform-translate",
+ "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.\n"
+ "\n"
+ "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.",
+ "Michael Natterer <mitch gimp org>",
+ "Michael Natterer",
+ "2018",
+ NULL);
+ gimp_procedure_add_argument (procedure,
+ gimp_param_spec_item_id ("item",
+ "item",
+ "The item",
+ pdb->gimp, FALSE,
+ GIMP_PARAM_READWRITE));
+ gimp_procedure_add_argument (procedure,
+ g_param_spec_double ("off-x",
+ "off x",
+ "Offset in x direction",
+ -G_MAXDOUBLE, G_MAXDOUBLE, 0,
+ GIMP_PARAM_READWRITE));
+ gimp_procedure_add_argument (procedure,
+ g_param_spec_double ("off-y",
+ "off y",
+ "Offset in y direction",
+ -G_MAXDOUBLE, G_MAXDOUBLE, 0,
+ GIMP_PARAM_READWRITE));
+ gimp_procedure_add_return_value (procedure,
+ gimp_param_spec_item_id ("item",
+ "item",
+ "The translated item",
+ pdb->gimp, FALSE,
+ GIMP_PARAM_READWRITE));
+ gimp_pdb_register_procedure (pdb, procedure);
+ g_object_unref (procedure);
+
+ /*
* gimp-item-transform-flip-simple
*/
procedure = gimp_procedure_new (item_transform_flip_simple_invoker);
@@ -881,6 +970,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-flip-simple",
"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 item. If there was no selection or the item is not a drawable, this will be equal to the item
ID supplied as input. Otherwise, this will be the newly created and flipped drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -932,6 +1022,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-flip",
"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 item. If there was no selection or the item
is not a drawable, this will be equal to the item ID supplied as input. Otherwise, this will be the newly
created and flipped drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -987,6 +1078,7 @@ register_item_transform_procs (GimpPDB *pdb)
"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 specified item is remapped if no selection exists or it is not a drawable. However, 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 remapped as specified. The return value is the ID
of the remapped item. If there was no selection or the item is not a drawable, this will be equal to the item
ID supplied as input. Otherwise, this will be the newly created and remapped drawable. 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 resu
lting transformed item will appear to have\n"
"been projected via a perspective transform.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -1065,6 +1157,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-rotate-simple",
"Rotate the specified item about given coordinates through the
specified angle.",
"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. The return value is the ID
of the rotated item. If there was no selection or the item is not a drawable, this will be equal to the item
ID supplied as input. Otherwise, this will be the newly created and rotated drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -1120,6 +1213,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-rotate",
"Rotate the specified item about given coordinates through the
specified angle.",
"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. The return value is the ID
of the rotated item. If there was no selection or the item is not a drawable, this will be equal to the item
ID supplied as input. Otherwise, this will be the newly created and rotated drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -1174,6 +1268,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-scale",
"Scale the specified item.",
"This procedure scales 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 scaled by the specified amount. The return value is the ID
of the scaled item. If there was no selection or the item is not a drawable, this will be equal to the item
ID supplied as input. Otherwise, this will be the newly created and scaled drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -1228,6 +1323,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-shear",
"Shear the specified item about its center by the specified magnitude.",
"This procedure shears 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 sheard by the specified amount. The return value is the ID
of the sheard item. If there was no selection or the item is not a drawable, this will be equal to the item
ID supplied as input. Otherwise, this will be the newly created and sheard drawable. 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.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -1273,6 +1369,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-2d",
"Transform the specified item in 2d.",
"This procedure transforms 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 transformed. The transformation is done by scaling
the image 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). The return value is the ID of the
rotated drawable. If there was no selection or the item is not a drawable, this will be equal to the item ID
supplied as input. Otherwise, this will be the newly created and transformed drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
@@ -1345,6 +1442,7 @@ register_item_transform_procs (GimpPDB *pdb)
"gimp-item-transform-matrix",
"Transform the specified item in 2d.",
"This procedure transforms 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 transformed. The transformation is done by
assembling a 3x3 matrix from the coefficients passed. The return value is the ID of the transformed item. If
there was no selection or the item is not a drawable, this will be equal to the item ID supplied as input.
Otherwise, this will be the newly created and transformed drawable.\n"
+ "\n"
"This procedure is affected by the following context setters:
'gimp-context-set-interpolation', 'gimp-context-set-transform-direction',
'gimp-context-set-transform-resize'.",
"Michael Natterer <mitch gimp org>",
"Michael Natterer",
diff --git a/libgimp/gimp.def b/libgimp/gimp.def
index fa75022..5605a35 100644
--- a/libgimp/gimp.def
+++ b/libgimp/gimp.def
@@ -615,6 +615,7 @@ EXPORTS
gimp_item_transform_rotate_simple
gimp_item_transform_scale
gimp_item_transform_shear
+ gimp_item_transform_translate
gimp_layer_add_alpha
gimp_layer_add_mask
gimp_layer_color_space_get_type
diff --git a/libgimp/gimpitemtransform_pdb.c b/libgimp/gimpitemtransform_pdb.c
index 88ced25..9362910 100644
--- a/libgimp/gimpitemtransform_pdb.c
+++ b/libgimp/gimpitemtransform_pdb.c
@@ -35,6 +35,52 @@
/**
+ * gimp_item_transform_translate:
+ * @item_ID: 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.
+ *
+ * Returns: The translated item.
+ *
+ * Since: 2.10
+ **/
+gint32
+gimp_item_transform_translate (gint32 item_ID,
+ gdouble off_x,
+ gdouble off_y)
+{
+ GimpParam *return_vals;
+ gint nreturn_vals;
+ gint32 ret_item_ID = -1;
+
+ return_vals = gimp_run_procedure ("gimp-item-transform-translate",
+ &nreturn_vals,
+ GIMP_PDB_ITEM, item_ID,
+ GIMP_PDB_FLOAT, off_x,
+ GIMP_PDB_FLOAT, off_y,
+ GIMP_PDB_END);
+
+ if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
+ ret_item_ID = return_vals[1].data.d_item;
+
+ gimp_destroy_params (return_vals, nreturn_vals);
+
+ return ret_item_ID;
+}
+
+/**
* gimp_item_transform_flip_simple:
* @item_ID: The affected item.
* @flip_type: Type of flip.
@@ -52,6 +98,7 @@
* flipped item. If there was no selection or the item is not a
* drawable, this will be equal to the item ID supplied as input.
* Otherwise, this will be the newly created and flipped drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_transform_resize().
*
@@ -104,6 +151,7 @@ gimp_item_transform_flip_simple (gint32 item_ID,
* is not a drawable, this will be equal to the item ID supplied as
* input. Otherwise, this will be the newly created and flipped
* drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
@@ -171,6 +219,7 @@ gimp_item_transform_flip (gint32 item_ID,
* 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.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
@@ -235,6 +284,7 @@ gimp_item_transform_perspective (gint32 item_ID,
* the item is not a drawable, this will be equal to the item ID
* supplied as input. Otherwise, this will be the newly created and
* rotated drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_transform_resize().
*
@@ -289,6 +339,7 @@ gimp_item_transform_rotate_simple (gint32 item_ID,
* the item is not a drawable, this will be equal to the item ID
* supplied as input. Otherwise, this will be the newly created and
* rotated drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
@@ -344,6 +395,7 @@ gimp_item_transform_rotate (gint32 item_ID,
* item is not a drawable, this will be equal to the item ID supplied
* as input. Otherwise, this will be the newly created and scaled
* drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
@@ -401,6 +453,7 @@ gimp_item_transform_scale (gint32 item_ID,
* be applied horizontally or vertically. The magnitude can be either
* positive or negative and indicates the extent (in pixels) to shear
* by.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
@@ -458,6 +511,7 @@ gimp_item_transform_shear (gint32 item_ID,
* selection or the item is not a drawable, this will be equal to the
* item ID supplied as input. Otherwise, this will be the newly created
* and transformed drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
@@ -525,6 +579,7 @@ gimp_item_transform_2d (gint32 item_ID,
* selection or the item is not a drawable, this will be equal to the
* item ID supplied as input. Otherwise, this will be the newly created
* and transformed drawable.
+ *
* This procedure is affected by the following context setters:
* gimp_context_set_interpolation(),
* gimp_context_set_transform_direction(),
diff --git a/libgimp/gimpitemtransform_pdb.h b/libgimp/gimpitemtransform_pdb.h
index f0bc831..dcbacb6 100644
--- a/libgimp/gimpitemtransform_pdb.h
+++ b/libgimp/gimpitemtransform_pdb.h
@@ -32,6 +32,9 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
+gint32 gimp_item_transform_translate (gint32 item_ID,
+ gdouble off_x,
+ gdouble off_y);
gint32 gimp_item_transform_flip_simple (gint32 item_ID,
GimpOrientationType flip_type,
gboolean auto_center,
diff --git a/pdb/groups/item_transform.pdb b/pdb/groups/item_transform.pdb
index b234d9d..8267ebb 100644
--- a/pdb/groups/item_transform.pdb
+++ b/pdb/groups/item_transform.pdb
@@ -98,6 +98,60 @@ CODE
# The defs
+sub item_transform_translate {
+ $blurb = 'Translate the item by the specified offsets.';
+
+ $help = <<'HELP';
+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.
+HELP
+
+ &mitch_pdb_misc('2018', '2.10');
+
+ @inargs = (
+ { name => 'item', type => 'item',
+ desc => 'The item' },
+ { name => 'off_x', type => 'float',
+ desc => "Offset in x direction" },
+ { name => 'off_y', type => 'float',
+ desc => "Offset in y direction" }
+ );
+
+ @outargs = (
+ { name => 'item', type => 'item', no_declare => 1,
+ desc => 'The translated item' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ if (gimp_pdb_item_is_modifiable (item,
+ GIMP_PDB_ITEM_POSITION, error))
+ {
+ if (gimp_item_get_linked (item) && gimp_item_is_attached (item))
+ {
+ gimp_item_linked_translate (item, off_x, off_y, TRUE);
+ }
+ else
+ {
+ gimp_item_translate (item, off_x, off_y, TRUE);
+ }
+ }
+ else
+ success = FALSE;
+}
+CODE
+ );
+}
+
sub item_transform_flip_simple {
$blurb = <<'BLURB';
Flip the specified item either vertically or horizontally.
@@ -114,6 +168,7 @@ item. If there was no selection or the item is not a drawable, this
will be equal to the item ID supplied as input. Otherwise, this will
be the newly created and flipped drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_transform_resize().
HELP
@@ -202,6 +257,7 @@ the flipped item. If there was no selection or the item is not a
drawable, this will be equal to the item ID supplied as input.
Otherwise, this will be the newly created and flipped drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -257,6 +313,7 @@ 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.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -322,6 +379,7 @@ value is the ID of the rotated item. If there was no selection or the
item is not a drawable, this will be equal to the item ID supplied as
input. Otherwise, this will be the newly created and rotated drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_transform_resize().
HELP
@@ -414,6 +472,7 @@ value is the ID of the rotated item. If there was no selection or the
item is not a drawable, this will be equal to the item ID supplied as
input. Otherwise, this will be the newly created and rotated drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -463,6 +522,7 @@ value is the ID of the scaled item. If there was no selection or the
item is not a drawable, this will be equal to the item ID supplied as
input. Otherwise, this will be the newly created and scaled drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -518,6 +578,7 @@ drawable. 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.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -565,6 +626,7 @@ selection or the item is not a drawable, this will be equal to the
item ID supplied as input. Otherwise, this will be the newly created
and transformed drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -620,6 +682,7 @@ the item is not a drawable, this will be equal to the item ID supplied
as input. Otherwise, this will be the newly created and transformed
drawable.
+
This procedure is affected by the following context setters:
gimp_context_set_interpolation(), gimp_context_set_transform_direction(),
gimp_context_set_transform_resize().
@@ -675,12 +738,14 @@ CODE
"core/gimpdrawable.h"
"core/gimpdrawable-transform.h"
"core/gimpimage.h"
+ "core/gimpitem-linked.h"
"core/gimpprogress.h"
"gimppdb-utils.h"
"gimppdbcontext.h"
"gimp-intl.h");
-@procs = qw(item_transform_flip_simple
+@procs = qw(item_transform_translate
+ item_transform_flip_simple
item_transform_flip
item_transform_perspective
item_transform_rotate_simple
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]