[gimp/gimp-2-10] app, icons: add GimpPivotSelector widget



commit 0c05c33b80d875009cf0f665d719b4356c679a88
Author: Ell <ell_se yahoo com>
Date:   Mon Jan 6 12:36:16 2020 +0200

    app, icons: add GimpPivotSelector widget
    
    GimpPivotSelector is a 3x3 grid of toggle buttons, used for
    selecting a natural pivot position (e.g., for a transform) relative
    to an item: its center, its corners, and the midpoints of its
    edges.

 app/widgets/Makefile.am                           |   2 +
 app/widgets/gimppivotselector.c                   | 547 ++++++++++++++++++++++
 app/widgets/gimppivotselector.h                   |  78 +++
 app/widgets/widgets-types.h                       |   1 +
 icons/Color/12/gimp-pivot-center.png              | Bin 0 -> 172 bytes
 icons/Color/12/gimp-pivot-east.png                | Bin 0 -> 196 bytes
 icons/Color/12/gimp-pivot-north-east.png          | Bin 0 -> 195 bytes
 icons/Color/12/gimp-pivot-north-west.png          | Bin 0 -> 190 bytes
 icons/Color/12/gimp-pivot-north.png               | Bin 0 -> 184 bytes
 icons/Color/12/gimp-pivot-south-east.png          | Bin 0 -> 201 bytes
 icons/Color/12/gimp-pivot-south-west.png          | Bin 0 -> 201 bytes
 icons/Color/12/gimp-pivot-south.png               | Bin 0 -> 184 bytes
 icons/Color/12/gimp-pivot-west.png                | Bin 0 -> 196 bytes
 icons/Color/scalable/gimp-pivot-center.svg        |  81 ++++
 icons/Color/scalable/gimp-pivot-east.svg          | 118 +++++
 icons/Color/scalable/gimp-pivot-north-east.svg    | 122 +++++
 icons/Color/scalable/gimp-pivot-north-west.svg    | 118 +++++
 icons/Color/scalable/gimp-pivot-north.svg         | 119 +++++
 icons/Color/scalable/gimp-pivot-south-east.svg    | 122 +++++
 icons/Color/scalable/gimp-pivot-south-west.svg    | 122 +++++
 icons/Color/scalable/gimp-pivot-south.svg         | 119 +++++
 icons/Color/scalable/gimp-pivot-west.svg          | 118 +++++
 icons/Symbolic/12/gimp-pivot-center.png           | Bin 0 -> 166 bytes
 icons/Symbolic/12/gimp-pivot-east.png             | Bin 0 -> 183 bytes
 icons/Symbolic/12/gimp-pivot-north-east.png       | Bin 0 -> 187 bytes
 icons/Symbolic/12/gimp-pivot-north-west.png       | Bin 0 -> 187 bytes
 icons/Symbolic/12/gimp-pivot-north.png            | Bin 0 -> 171 bytes
 icons/Symbolic/12/gimp-pivot-south-east.png       | Bin 0 -> 188 bytes
 icons/Symbolic/12/gimp-pivot-south-west.png       | Bin 0 -> 189 bytes
 icons/Symbolic/12/gimp-pivot-south.png            | Bin 0 -> 171 bytes
 icons/Symbolic/12/gimp-pivot-west.png             | Bin 0 -> 183 bytes
 icons/Symbolic/scalable/gimp-pivot-center.svg     |  74 +++
 icons/Symbolic/scalable/gimp-pivot-east.svg       |  89 ++++
 icons/Symbolic/scalable/gimp-pivot-north-east.svg |  89 ++++
 icons/Symbolic/scalable/gimp-pivot-north-west.svg |  85 ++++
 icons/Symbolic/scalable/gimp-pivot-north.svg      |  85 ++++
 icons/Symbolic/scalable/gimp-pivot-south-east.svg |  89 ++++
 icons/Symbolic/scalable/gimp-pivot-south-west.svg |  89 ++++
 icons/Symbolic/scalable/gimp-pivot-south.svg      |  85 ++++
 icons/Symbolic/scalable/gimp-pivot-west.svg       |  89 ++++
 icons/icon-list.mk                                |  18 +
 libgimpwidgets/gimpicons.h                        |  10 +
 42 files changed, 2469 insertions(+)
---
diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am
index 156fac32f3..0495f839fb 100644
--- a/app/widgets/Makefile.am
+++ b/app/widgets/Makefile.am
@@ -310,6 +310,8 @@ libappwidgets_a_sources = \
        gimppickablebutton.h            \
        gimppickablepopup.c             \
        gimppickablepopup.h             \
+       gimppivotselector.c             \
+       gimppivotselector.h             \
        gimppixbuf.c                    \
        gimppixbuf.h                    \
        gimppluginview.c                \
diff --git a/app/widgets/gimppivotselector.c b/app/widgets/gimppivotselector.c
new file mode 100644
index 0000000000..598513a8d7
--- /dev/null
+++ b/app/widgets/gimppivotselector.c
@@ -0,0 +1,547 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimppivotselector.c
+ * Copyright (C) 2019 Ell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+#include <gtk/gtk.h>
+
+#include "libgimpbase/gimpbase.h"
+#include "libgimpmath/gimpmath.h"
+#include "libgimpwidgets/gimpwidgets.h"
+
+#include "widgets-types.h"
+
+#include "core/gimpmarshal.h"
+
+#include "gimppivotselector.h"
+
+
+#define EPSILON 1e-6
+
+
+enum
+{
+  CHANGED,
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_LEFT,
+  PROP_TOP,
+  PROP_RIGHT,
+  PROP_BOTTOM,
+  PROP_X,
+  PROP_Y
+};
+
+
+struct _GimpPivotSelectorPrivate
+{
+  gdouble    left;
+  gdouble    top;
+  gdouble    right;
+  gdouble    bottom;
+
+  gdouble    x;
+  gdouble    y;
+
+  GtkWidget *buttons[9];
+  GtkWidget *active_button;
+};
+
+
+/*  local function prototypes  */
+
+static void        gimp_pivot_selector_set_property         (GObject           *object,
+                                                             guint              property_id,
+                                                             const GValue      *value,
+                                                             GParamSpec        *pspec);
+static void        gimp_pivot_selector_get_property         (GObject           *object,
+                                                             guint              property_id,
+                                                             GValue            *value,
+                                                             GParamSpec        *pspec);
+
+static void        gimp_pivot_selector_button_toggled       (GtkToggleButton   *button,
+                                                             GimpPivotSelector *selector);
+
+static GtkWidget * gimp_pivot_selector_position_to_button   (GimpPivotSelector *selector,
+                                                             gdouble            x,
+                                                             gdouble            y);
+static void        gimp_pivot_selector_button_to_position   (GimpPivotSelector *selector,
+                                                             GtkWidget         *button,
+                                                             gdouble           *x,
+                                                             gdouble           *y);
+
+static void        gimp_pivot_selector_update_active_button (GimpPivotSelector *selector);
+
+
+G_DEFINE_TYPE_WITH_PRIVATE (GimpPivotSelector, gimp_pivot_selector, GTK_TYPE_TABLE)
+
+#define parent_class gimp_pivot_selector_parent_class
+
+static guint pivot_selector_signals[LAST_SIGNAL];
+
+
+/*  private functions  */
+
+
+static void
+gimp_pivot_selector_class_init (GimpPivotSelectorClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  pivot_selector_signals[CHANGED] =
+    g_signal_new ("changed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (GimpPivotSelectorClass, changed),
+                  NULL, NULL,
+                  gimp_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+
+  object_class->get_property = gimp_pivot_selector_get_property;
+  object_class->set_property = gimp_pivot_selector_set_property;
+
+  g_object_class_install_property (object_class, PROP_LEFT,
+                                   g_param_spec_double ("left",
+                                                        NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        +G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_TOP,
+                                   g_param_spec_double ("top",
+                                                        NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        +G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_RIGHT,
+                                   g_param_spec_double ("right",
+                                                        NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        +G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_BOTTOM,
+                                   g_param_spec_double ("bottom",
+                                                        NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        +G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_X,
+                                   g_param_spec_double ("x",
+                                                        NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        +G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_Y,
+                                   g_param_spec_double ("y",
+                                                        NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        +G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+}
+
+static void
+gimp_pivot_selector_init (GimpPivotSelector *selector)
+{
+  GtkTable *table = GTK_TABLE (selector);
+  gint      i;
+
+  selector->priv = gimp_pivot_selector_get_instance_private (selector);
+
+  gtk_table_resize (table, 3, 3);
+  gtk_table_set_homogeneous (table, TRUE);
+
+  for (i = 0; i < 9; i++)
+    {
+      static const gchar *icon_names[9] = {
+        GIMP_ICON_PIVOT_NORTH_WEST,
+        GIMP_ICON_PIVOT_NORTH,
+        GIMP_ICON_PIVOT_NORTH_EAST,
+
+        GIMP_ICON_PIVOT_WEST,
+        GIMP_ICON_PIVOT_CENTER,
+        GIMP_ICON_PIVOT_EAST,
+
+        GIMP_ICON_PIVOT_SOUTH_WEST,
+        GIMP_ICON_PIVOT_SOUTH,
+        GIMP_ICON_PIVOT_SOUTH_EAST
+      };
+
+      GtkWidget *button;
+      GtkWidget *image;
+      gint       x, y;
+
+      x = i % 3;
+      y = i / 3;
+
+      button = gtk_toggle_button_new ();
+      gtk_widget_set_can_focus (button, FALSE);
+      gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+      gtk_table_attach_defaults (table, button,
+                                 x, x + 1, y, y + 1);
+      gtk_widget_show (button);
+
+      selector->priv->buttons[i] = button;
+
+      g_signal_connect (button, "toggled",
+                        G_CALLBACK (gimp_pivot_selector_button_toggled),
+                        selector);
+
+      image = gtk_image_new_from_icon_name (icon_names[i], GTK_ICON_SIZE_MENU);
+      gtk_image_set_pixel_size (GTK_IMAGE (image), 12);
+      gtk_container_add (GTK_CONTAINER (button), image);
+      gtk_widget_show (image);
+    }
+}
+
+static void
+gimp_pivot_selector_set_property (GObject      *object,
+                                  guint         property_id,
+                                  const GValue *value,
+                                  GParamSpec   *pspec)
+{
+  GimpPivotSelector *selector = GIMP_PIVOT_SELECTOR (object);
+
+  switch (property_id)
+    {
+    case PROP_LEFT:
+      gimp_pivot_selector_set_bounds (selector,
+                                      g_value_get_double (value),
+                                      selector->priv->top,
+                                      selector->priv->right,
+                                      selector->priv->bottom);
+      break;
+    case PROP_TOP:
+      gimp_pivot_selector_set_bounds (selector,
+                                      selector->priv->left,
+                                      g_value_get_double (value),
+                                      selector->priv->right,
+                                      selector->priv->bottom);
+      break;
+    case PROP_RIGHT:
+      gimp_pivot_selector_set_bounds (selector,
+                                      selector->priv->left,
+                                      selector->priv->top,
+                                      g_value_get_double (value),
+                                      selector->priv->bottom);
+      break;
+    case PROP_BOTTOM:
+      gimp_pivot_selector_set_bounds (selector,
+                                      selector->priv->left,
+                                      selector->priv->top,
+                                      selector->priv->right,
+                                      g_value_get_double (value));
+      break;
+
+    case PROP_X:
+      gimp_pivot_selector_set_position (selector,
+                                        g_value_get_double (value),
+                                        selector->priv->y);
+      break;
+    case PROP_Y:
+      gimp_pivot_selector_set_position (selector,
+                                        selector->priv->x,
+                                        g_value_get_double (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+gimp_pivot_selector_get_property (GObject    *object,
+                                guint       property_id,
+                                GValue     *value,
+                                GParamSpec *pspec)
+{
+  GimpPivotSelector *selector = GIMP_PIVOT_SELECTOR (object);
+
+  switch (property_id)
+    {
+    case PROP_LEFT:
+      g_value_set_double (value, selector->priv->left);
+      break;
+    case PROP_TOP:
+      g_value_set_double (value, selector->priv->top);
+      break;
+    case PROP_RIGHT:
+      g_value_set_double (value, selector->priv->right);
+      break;
+    case PROP_BOTTOM:
+      g_value_set_double (value, selector->priv->bottom);
+      break;
+
+    case PROP_X:
+      g_value_set_double (value, selector->priv->x);
+      break;
+    case PROP_Y:
+      g_value_set_double (value, selector->priv->y);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+gimp_pivot_selector_button_toggled (GtkToggleButton   *button,
+                                    GimpPivotSelector *selector)
+{
+  if (GTK_WIDGET (button) == selector->priv->active_button)
+    {
+      gtk_toggle_button_set_active (button, TRUE);
+    }
+  else
+    {
+      gdouble x, y;
+
+      gimp_pivot_selector_button_to_position (selector, GTK_WIDGET (button),
+                                              &x, &y);
+
+      gimp_pivot_selector_set_position (selector, x, y);
+    }
+}
+
+static GtkWidget *
+gimp_pivot_selector_position_to_button (GimpPivotSelector *selector,
+                                        gdouble            x,
+                                        gdouble            y)
+{
+  gint ix;
+  gint iy;
+
+  if (selector->priv->left == selector->priv->right ||
+      selector->priv->top  == selector->priv->bottom)
+    {
+      return NULL;
+    }
+
+  x = 2.0 * (x                      - selector->priv->left) /
+            (selector->priv->right  - selector->priv->left);
+  y = 2.0 * (y                      - selector->priv->top)  /
+            (selector->priv->bottom - selector->priv->top);
+
+  ix = RINT (x);
+  iy = RINT (y);
+
+  if (fabs (x - ix) > EPSILON || fabs (y - iy) > EPSILON)
+    return NULL;
+
+  if (ix < 0 || ix > 2 || iy < 0 || iy > 2)
+    return NULL;
+
+  return selector->priv->buttons[3 * iy + ix];
+}
+
+static void
+gimp_pivot_selector_button_to_position (GimpPivotSelector *selector,
+                                        GtkWidget         *button,
+                                        gdouble           *x,
+                                        gdouble           *y)
+{
+  gint i;
+
+  for (i = 0; selector->priv->buttons[i] != button; i++);
+
+  *x = selector->priv->left +
+       (selector->priv->right  - selector->priv->left) * (i % 3) / 2.0;
+  *y = selector->priv->top +
+       (selector->priv->bottom - selector->priv->top)  * (i / 3) / 2.0;
+}
+
+static void
+gimp_pivot_selector_update_active_button (GimpPivotSelector *selector)
+{
+  GtkWidget *button;
+
+  button = gimp_pivot_selector_position_to_button (selector,
+                                                   selector->priv->x,
+                                                   selector->priv->y);
+
+  if (button != selector->priv->active_button)
+    {
+      if (selector->priv->active_button)
+        {
+          g_signal_handlers_block_by_func (
+            selector->priv->active_button,
+            gimp_pivot_selector_button_toggled,
+            selector);
+
+          gtk_toggle_button_set_active (
+            GTK_TOGGLE_BUTTON (selector->priv->active_button), FALSE);
+
+          g_signal_handlers_unblock_by_func (
+            selector->priv->active_button,
+            gimp_pivot_selector_button_toggled,
+            selector);
+        }
+
+      selector->priv->active_button = button;
+
+      if (selector->priv->active_button)
+        {
+          g_signal_handlers_block_by_func (
+            selector->priv->active_button,
+            gimp_pivot_selector_button_toggled,
+            selector);
+
+          gtk_toggle_button_set_active (
+            GTK_TOGGLE_BUTTON (selector->priv->active_button), TRUE);
+
+          g_signal_handlers_unblock_by_func (
+            selector->priv->active_button,
+            gimp_pivot_selector_button_toggled,
+            selector);
+        }
+    }
+}
+
+
+/*  public functions  */
+
+
+GtkWidget *
+gimp_pivot_selector_new (gdouble left,
+                         gdouble top,
+                         gdouble right,
+                         gdouble bottom)
+{
+  return g_object_new (GIMP_TYPE_PIVOT_SELECTOR,
+
+                       "left",   left,
+                       "top",    top,
+                       "right",  right,
+                       "bottom", bottom,
+
+                       "x",      (left + right)  / 2.0,
+                       "y",      (top  + bottom) / 2.0,
+
+                       NULL);
+}
+
+void
+gimp_pivot_selector_set_bounds (GimpPivotSelector *selector,
+                                gdouble            left,
+                                gdouble            top,
+                                gdouble            right,
+                                gdouble            bottom)
+{
+  g_return_if_fail (GIMP_IS_PIVOT_SELECTOR (selector));
+
+  if (left  != selector->priv->left  || top    != selector->priv->top ||
+      right != selector->priv->right || bottom != selector->priv->bottom)
+    {
+      g_object_freeze_notify (G_OBJECT (selector));
+
+      selector->priv->left   = left;
+      selector->priv->top    = top;
+      selector->priv->right  = right;
+      selector->priv->bottom = bottom;
+
+      gimp_pivot_selector_update_active_button (selector);
+
+      if (left != selector->priv->left)
+        g_object_notify (G_OBJECT (selector), "left");
+      if (top != selector->priv->top)
+        g_object_notify (G_OBJECT (selector), "top");
+      if (right != selector->priv->right)
+        g_object_notify (G_OBJECT (selector), "right");
+      if (left != selector->priv->bottom)
+        g_object_notify (G_OBJECT (selector), "bottom");
+
+      g_object_thaw_notify (G_OBJECT (selector));
+    }
+}
+
+void
+gimp_pivot_selector_get_bounds (GimpPivotSelector *selector,
+                                gdouble           *left,
+                                gdouble           *top,
+                                gdouble           *right,
+                                gdouble           *bottom)
+{
+  g_return_if_fail (GIMP_IS_PIVOT_SELECTOR (selector));
+
+  if (left)   *left   = selector->priv->left;
+  if (top)    *top    = selector->priv->top;
+  if (right)  *right  = selector->priv->right;
+  if (bottom) *bottom = selector->priv->bottom;
+}
+
+void
+gimp_pivot_selector_set_position (GimpPivotSelector *selector,
+                                  gdouble            x,
+                                  gdouble            y)
+{
+  g_return_if_fail (GIMP_IS_PIVOT_SELECTOR (selector));
+
+  if (x != selector->priv->x || y != selector->priv->y)
+    {
+      g_object_freeze_notify (G_OBJECT (selector));
+
+      selector->priv->x = x;
+      selector->priv->y = y;
+
+      gimp_pivot_selector_update_active_button (selector);
+
+      g_signal_emit (selector, pivot_selector_signals[CHANGED], 0);
+
+      if (x != selector->priv->x)
+        g_object_notify (G_OBJECT (selector), "x");
+      if (y != selector->priv->y)
+        g_object_notify (G_OBJECT (selector), "y");
+
+      g_object_thaw_notify (G_OBJECT (selector));
+    }
+}
+
+void
+gimp_pivot_selector_get_position (GimpPivotSelector *selector,
+                                  gdouble           *x,
+                                  gdouble           *y)
+{
+  g_return_if_fail (GIMP_IS_PIVOT_SELECTOR (selector));
+
+  if (x) *x = selector->priv->x;
+  if (y) *y = selector->priv->y;
+}
diff --git a/app/widgets/gimppivotselector.h b/app/widgets/gimppivotselector.h
new file mode 100644
index 0000000000..1603b404ed
--- /dev/null
+++ b/app/widgets/gimppivotselector.h
@@ -0,0 +1,78 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimppivotselector.h
+ * Copyright (C) 2019 Ell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIMP_PIVOT_SELECTOR_H__
+#define __GIMP_PIVOT_SELECTOR_H__
+
+
+#define GIMP_TYPE_PIVOT_SELECTOR            (gimp_pivot_selector_get_type ())
+#define GIMP_PIVOT_SELECTOR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_PIVOT_SELECTOR, 
GimpPivotSelector))
+#define GIMP_PIVOT_SELECTOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PIVOT_SELECTOR, 
GimpPivotSelectorClass))
+#define GIMP_IS_PIVOT_SELECTOR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_PIVOT_SELECTOR))
+#define GIMP_IS_PIVOT_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PIVOT_SELECTOR))
+#define GIMP_PIVOT_SELECTOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PIVOT_SELECTOR, 
GimpPivotSelectorClass))
+
+
+typedef struct _GimpPivotSelectorPrivate GimpPivotSelectorPrivate;
+typedef struct _GimpPivotSelectorClass   GimpPivotSelectorClass;
+
+struct _GimpPivotSelector
+{
+  GtkTable                parent_instance;
+
+  GimpPivotSelectorPrivate *priv;
+};
+
+struct _GimpPivotSelectorClass
+{
+  GtkTableClass  parent_class;
+
+  /*  signals  */
+  void (* changed) (GimpPivotSelector *selector);
+};
+
+
+GType       gimp_pivot_selector_get_type     (void) G_GNUC_CONST;
+
+GtkWidget * gimp_pivot_selector_new          (gdouble left,
+                                              gdouble top,
+                                              gdouble right,
+                                              gdouble bottom);
+
+void        gimp_pivot_selector_set_position (GimpPivotSelector *selector,
+                                              gdouble          x,
+                                              gdouble          y);
+void        gimp_pivot_selector_get_position (GimpPivotSelector *selector,
+                                              gdouble         *x,
+                                              gdouble         *y);
+
+void        gimp_pivot_selector_set_bounds   (GimpPivotSelector *selector,
+                                              gdouble          left,
+                                              gdouble          top,
+                                              gdouble          right,
+                                              gdouble          bottom);
+void        gimp_pivot_selector_get_bounds   (GimpPivotSelector *selector,
+                                              gdouble         *left,
+                                              gdouble         *top,
+                                              gdouble         *right,
+                                              gdouble         *bottom);
+
+
+#endif /* __GIMP_PIVOT_SELECTOR_H__ */
diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h
index 04631c70fe..f25e816dc9 100644
--- a/app/widgets/widgets-types.h
+++ b/app/widgets/widgets-types.h
@@ -211,6 +211,7 @@ typedef struct _GimpMeter                    GimpMeter;
 typedef struct _GimpOverlayBox               GimpOverlayBox;
 typedef struct _GimpPickableButton           GimpPickableButton;
 typedef struct _GimpPickablePopup            GimpPickablePopup;
+typedef struct _GimpPivotSelector            GimpPivotSelector;
 typedef struct _GimpPlugInView               GimpPlugInView;
 typedef struct _GimpPolar                    GimpPolar;
 typedef struct _GimpPopup                    GimpPopup;
diff --git a/icons/Color/12/gimp-pivot-center.png b/icons/Color/12/gimp-pivot-center.png
new file mode 100644
index 0000000000..1f2dbf7dac
Binary files /dev/null and b/icons/Color/12/gimp-pivot-center.png differ
diff --git a/icons/Color/12/gimp-pivot-east.png b/icons/Color/12/gimp-pivot-east.png
new file mode 100644
index 0000000000..fd210aeba5
Binary files /dev/null and b/icons/Color/12/gimp-pivot-east.png differ
diff --git a/icons/Color/12/gimp-pivot-north-east.png b/icons/Color/12/gimp-pivot-north-east.png
new file mode 100644
index 0000000000..7c1cfdcb98
Binary files /dev/null and b/icons/Color/12/gimp-pivot-north-east.png differ
diff --git a/icons/Color/12/gimp-pivot-north-west.png b/icons/Color/12/gimp-pivot-north-west.png
new file mode 100644
index 0000000000..d562cf7fd7
Binary files /dev/null and b/icons/Color/12/gimp-pivot-north-west.png differ
diff --git a/icons/Color/12/gimp-pivot-north.png b/icons/Color/12/gimp-pivot-north.png
new file mode 100644
index 0000000000..8fe6381c19
Binary files /dev/null and b/icons/Color/12/gimp-pivot-north.png differ
diff --git a/icons/Color/12/gimp-pivot-south-east.png b/icons/Color/12/gimp-pivot-south-east.png
new file mode 100644
index 0000000000..b627800835
Binary files /dev/null and b/icons/Color/12/gimp-pivot-south-east.png differ
diff --git a/icons/Color/12/gimp-pivot-south-west.png b/icons/Color/12/gimp-pivot-south-west.png
new file mode 100644
index 0000000000..1041c89407
Binary files /dev/null and b/icons/Color/12/gimp-pivot-south-west.png differ
diff --git a/icons/Color/12/gimp-pivot-south.png b/icons/Color/12/gimp-pivot-south.png
new file mode 100644
index 0000000000..8fe6381c19
Binary files /dev/null and b/icons/Color/12/gimp-pivot-south.png differ
diff --git a/icons/Color/12/gimp-pivot-west.png b/icons/Color/12/gimp-pivot-west.png
new file mode 100644
index 0000000000..fd210aeba5
Binary files /dev/null and b/icons/Color/12/gimp-pivot-west.png differ
diff --git a/icons/Color/scalable/gimp-pivot-center.svg b/icons/Color/scalable/gimp-pivot-center.svg
new file mode 100644
index 0000000000..51e05fdae3
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-center.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-center.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="5.9841365"
+     inkscape:cy="6.0013256"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <rect
+       
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1433-3"
+       width="1.3229166"
+       height="1.3229166"
+       x="294.75101"
+       y="-2.2489729"
+       transform="rotate(90)" />
+    <rect
+       
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1433"
+       width="1.0583333"
+       height="1.0583333"
+       x="294.8833"
+       y="-2.1166792"
+       transform="rotate(90)" />
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-east.svg b/icons/Color/scalable/gimp-pivot-east.svg
new file mode 100644
index 0000000000..28b6c01b84
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-east.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-east.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1461">
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,295.94165 v 1.05833"
+         id="path7422"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,295.94165 v 1.05833"
+         id="path7422-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,294.88331 v -1.05833"
+         id="path7439"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,294.88331 v -1.05833"
+         id="path7439-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 1.5875,295.67706 v 1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 1.5875,295.1479 v -1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.75101"
+         x="0.92604166"
+         height="1.3229166"
+         width="1.3229166"
+         id="rect1433-3"
+         
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-north-east.svg b/icons/Color/scalable/gimp-pivot-north-east.svg
new file mode 100644
index 0000000000..88bb0e276a
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-north-east.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-north-east.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g12895"
+       transform="rotate(90,1.5875,295.41248)">
+      <g
+         id="g1461">
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7422"
+           d="m 1.190625,295.94165 v 1.05833"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7422-6"
+           d="m 1.984375,295.94165 v 1.05833"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7439"
+           d="M 2.1166667,295.80936 H 3.175"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7439-7"
+           d="M 2.1166667,295.01561 H 3.175"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 1.5875,295.67706 v 1.32292"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 1.8520833,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <rect
+           
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <rect
+           
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433-3"
+           width="1.3229166"
+           height="1.3229166"
+           x="0.92604166"
+           y="294.75101" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-north-west.svg b/icons/Color/scalable/gimp-pivot-north-west.svg
new file mode 100644
index 0000000000..6b33662cb0
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-north-west.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-north-west.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="2.6673663"
+     inkscape:cy="6.0013256"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1461">
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,295.94165 v 1.05833"
+         id="path7422"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,295.94165 v 1.05833"
+         id="path7422-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 2.1166667,295.80936 H 3.175"
+         id="path7439"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 2.1166667,295.01561 H 3.175"
+         id="path7439-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 1.5875,295.67706 0,1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 1.8520833,295.41248 1.3229167,0"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.75101"
+         x="0.92604166"
+         height="1.3229166"
+         width="1.3229166"
+         id="rect1433-3"
+         
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458333;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-north.svg b/icons/Color/scalable/gimp-pivot-north.svg
new file mode 100644
index 0000000000..af3b2ddba8
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-north.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-north.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1461"
+       transform="rotate(90,1.5875,295.41248)">
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,295.94165 v 1.05833"
+         id="path7422"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,295.94165 v 1.05833"
+         id="path7422-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,294.88331 v -1.05833"
+         id="path7439"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,294.88331 v -1.05833"
+         id="path7439-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 1.5875,295.67706 v 1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 1.5875,295.1479 v -1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.75101"
+         x="0.92604166"
+         height="1.3229166"
+         width="1.3229166"
+         id="rect1433-3"
+         
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-south-east.svg b/icons/Color/scalable/gimp-pivot-south-east.svg
new file mode 100644
index 0000000000..b97cc98552
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-south-east.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-south-east.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g12895"
+       transform="rotate(180,1.5874992,295.41248)">
+      <g
+         id="g1461">
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7422"
+           d="m 1.190625,295.94165 v 1.05833"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7422-6"
+           d="m 1.984375,295.94165 v 1.05833"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7439"
+           d="M 2.1166667,295.80936 H 3.175"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7439-7"
+           d="M 2.1166667,295.01561 H 3.175"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 1.5875,295.67706 v 1.32292"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 1.8520833,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <rect
+           
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <rect
+           
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433-3"
+           width="1.3229166"
+           height="1.3229166"
+           x="0.92604166"
+           y="294.75101" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-south-west.svg b/icons/Color/scalable/gimp-pivot-south-west.svg
new file mode 100644
index 0000000000..7b0719b145
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-south-west.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-south-west.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g12895"
+       transform="rotate(-90,1.5874975,295.41248)">
+      <g
+         id="g1461">
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7422"
+           d="m 1.190625,295.94165 v 1.05833"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7422-6"
+           d="m 1.984375,295.94165 v 1.05833"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7439"
+           d="M 2.1166667,295.80936 H 3.175"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           sodipodi:nodetypes="cc"
+           inkscape:connector-curvature="0"
+           id="path7439-7"
+           d="M 2.1166667,295.01561 H 3.175"
+           
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 />
+        <path
+           
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 1.5875,295.67706 v 1.32292"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 1.8520833,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <rect
+           
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <rect
+           
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433-3"
+           width="1.3229166"
+           height="1.3229166"
+           x="0.92604166"
+           y="294.75101" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-south.svg b/icons/Color/scalable/gimp-pivot-south.svg
new file mode 100644
index 0000000000..2bba90a32d
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-south.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-south.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1461"
+       transform="rotate(90,1.5875,295.41248)">
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,295.94165 v 1.05833"
+         id="path7422"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,295.94165 v 1.05833"
+         id="path7422-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,294.88331 v -1.05833"
+         id="path7439"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,294.88331 v -1.05833"
+         id="path7439-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 1.5875,295.67706 v 1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 1.5875,295.1479 v -1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.75101"
+         x="0.92604166"
+         height="1.3229166"
+         width="1.3229166"
+         id="rect1433-3"
+         
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Color/scalable/gimp-pivot-west.svg b/icons/Color/scalable/gimp-pivot-west.svg
new file mode 100644
index 0000000000..a199d887ab
--- /dev/null
+++ b/icons/Color/scalable/gimp-pivot-west.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-west.svg"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="6"
+     inkscape:cy="6"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1461">
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,295.94165 v 1.05833"
+         id="path7422"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,295.94165 v 1.05833"
+         id="path7422-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.984375,294.88331 v -1.05833"
+         id="path7439"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1.190625,294.88331 v -1.05833"
+         id="path7439-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 1.5875,295.67706 v 1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 1.5875,295.1479 v -1.32292"
+         
style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <rect
+         y="294.75101"
+         x="0.92604166"
+         height="1.3229166"
+         width="1.3229166"
+         id="rect1433-3"
+         
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/12/gimp-pivot-center.png b/icons/Symbolic/12/gimp-pivot-center.png
new file mode 100644
index 0000000000..dde850b419
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-center.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-east.png b/icons/Symbolic/12/gimp-pivot-east.png
new file mode 100644
index 0000000000..ee7548a40d
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-east.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-north-east.png b/icons/Symbolic/12/gimp-pivot-north-east.png
new file mode 100644
index 0000000000..bc3e44fc4e
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-north-east.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-north-west.png b/icons/Symbolic/12/gimp-pivot-north-west.png
new file mode 100644
index 0000000000..34cda68e56
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-north-west.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-north.png b/icons/Symbolic/12/gimp-pivot-north.png
new file mode 100644
index 0000000000..f6161819fb
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-north.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-south-east.png b/icons/Symbolic/12/gimp-pivot-south-east.png
new file mode 100644
index 0000000000..3419412878
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-south-east.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-south-west.png b/icons/Symbolic/12/gimp-pivot-south-west.png
new file mode 100644
index 0000000000..7be7f029e9
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-south-west.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-south.png b/icons/Symbolic/12/gimp-pivot-south.png
new file mode 100644
index 0000000000..f6161819fb
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-south.png differ
diff --git a/icons/Symbolic/12/gimp-pivot-west.png b/icons/Symbolic/12/gimp-pivot-west.png
new file mode 100644
index 0000000000..ee7548a40d
Binary files /dev/null and b/icons/Symbolic/12/gimp-pivot-west.png differ
diff --git a/icons/Symbolic/scalable/gimp-pivot-center.svg b/icons/Symbolic/scalable/gimp-pivot-center.svg
new file mode 100644
index 0000000000..75f0ff0397
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-center.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-center.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="g1562"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1562"
+       transform="rotate(90,1.5875,295.41248)">
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-east.svg b/icons/Symbolic/scalable/gimp-pivot-east.svg
new file mode 100644
index 0000000000..be32b47b57
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-east.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-vertical.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="g1562"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1562"
+       transform="rotate(90,1.5875,295.41248)">
+      <g
+         id="g1534">
+        <rect
+           
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 0.79375,295.41248 H 0"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 2.38125,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-north-east.svg 
b/icons/Symbolic/scalable/gimp-pivot-north-east.svg
new file mode 100644
index 0000000000..eda050889e
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-north-east.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-ne.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="g1472"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1472"
+       transform="rotate(90,1.5875,295.41248)">
+      <g
+         id="g1461">
+        <rect
+           
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 1.5875,296.20623 v 0.79375"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 2.38125,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-north-west.svg 
b/icons/Symbolic/scalable/gimp-pivot-north-west.svg
new file mode 100644
index 0000000000..61659be22b
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-north-west.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="gimp-pivot-nw.svg">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="67.083333"
+     inkscape:cx="3.1453416"
+     inkscape:cy="5.8062112"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1461">
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 1.5875,296.20623 0,0.79375"
+         
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 2.38125,295.41248 0.79375,0"
+         
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-north.svg b/icons/Symbolic/scalable/gimp-pivot-north.svg
new file mode 100644
index 0000000000..d2797afb91
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-north.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-horizontal.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1534">
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 0.79375,295.41248 -0.79375,0"
+         
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 2.38125,295.41248 0.79375,0"
+         
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-south-east.svg 
b/icons/Symbolic/scalable/gimp-pivot-south-east.svg
new file mode 100644
index 0000000000..1426de86c8
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-south-east.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-se.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="g1472"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1472"
+       transform="rotate(180,1.5874992,295.41248)">
+      <g
+         id="g1461">
+        <rect
+           
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 1.5875,296.20623 v 0.79375"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 2.38125,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-south-west.svg 
b/icons/Symbolic/scalable/gimp-pivot-south-west.svg
new file mode 100644
index 0000000000..acc533c2f2
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-south-west.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-sw.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="g1472"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1472"
+       transform="rotate(-90,1.5874975,295.41248)">
+      <g
+         id="g1461">
+        <rect
+           
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 1.5875,296.20623 v 0.79375"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 2.38125,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-south.svg b/icons/Symbolic/scalable/gimp-pivot-south.svg
new file mode 100644
index 0000000000..d2797afb91
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-south.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-horizontal.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1534">
+      <rect
+         y="294.8833"
+         x="1.0583333"
+         height="1.0583333"
+         width="1.0583333"
+         id="rect1433"
+         
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1435"
+         d="m 0.79375,295.41248 -0.79375,0"
+         
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1437"
+         d="m 2.38125,295.41248 0.79375,0"
+         
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+    </g>
+  </g>
+</svg>
diff --git a/icons/Symbolic/scalable/gimp-pivot-west.svg b/icons/Symbolic/scalable/gimp-pivot-west.svg
new file mode 100644
index 0000000000..be32b47b57
--- /dev/null
+++ b/icons/Symbolic/scalable/gimp-pivot-west.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="12"
+   height="12"
+   viewBox="0 0 3.1749999 3.1750001"
+   version="1.1"
+   id="svg886"
+   sodipodi:docname="gimp-pivot-vertical.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs880" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="47.43508"
+     inkscape:cx="7.0161184"
+     inkscape:cy="6.6694754"
+     inkscape:document-units="px"
+     inkscape:current-layer="g1562"
+     showgrid="true"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="35"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1431"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-293.82498)">
+    <g
+       id="g1562"
+       transform="rotate(90,1.5875,295.41248)">
+      <g
+         id="g1534">
+        <rect
+           
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1433"
+           width="1.0583333"
+           height="1.0583333"
+           x="1.0583333"
+           y="294.8833" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 0.79375,295.41248 H 0"
+           id="path1435"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           
style="fill:none;stroke:#bebebe;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 2.38125,295.41248 H 3.175"
+           id="path1437"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/icons/icon-list.mk b/icons/icon-list.mk
index 7ee24a2690..c2a0fae9f0 100644
--- a/icons/icon-list.mk
+++ b/icons/icon-list.mk
@@ -183,6 +183,15 @@ scalable_images = \
        scalable/gimp-paths.svg                                 \
        scalable/gimp-path-stroke.svg                           \
        scalable/gimp-pattern.svg                               \
+       scalable/gimp-pivot-center.svg                          \
+       scalable/gimp-pivot-east.svg                            \
+       scalable/gimp-pivot-north.svg                           \
+       scalable/gimp-pivot-north-east.svg                      \
+       scalable/gimp-pivot-north-west.svg                      \
+       scalable/gimp-pivot-south.svg                           \
+       scalable/gimp-pivot-south-east.svg                      \
+       scalable/gimp-pivot-south-west.svg                      \
+       scalable/gimp-pivot-west.svg                            \
        scalable/gimp-plugin.svg                                \
        scalable/gimp-portrait.svg                              \
        scalable/gimp-prefs-color-management.svg                \
@@ -514,6 +523,15 @@ icons12_images = \
        12/gimp-linked.png                                      \
        12/gimp-menu-left.png                                   \
        12/gimp-menu-right.png                                  \
+       12/gimp-pivot-center.png                                \
+       12/gimp-pivot-east.png                                  \
+       12/gimp-pivot-north.png                                 \
+       12/gimp-pivot-north-east.png                            \
+       12/gimp-pivot-north-west.png                            \
+       12/gimp-pivot-south.png                                 \
+       12/gimp-pivot-south-east.png                            \
+       12/gimp-pivot-south-west.png                            \
+       12/gimp-pivot-west.png                                  \
        12/gimp-quick-mask-off.png                              \
        12/gimp-quick-mask-on.png                               \
        12/gimp-swap-colors.png                                 \
diff --git a/libgimpwidgets/gimpicons.h b/libgimpwidgets/gimpicons.h
index 504a46c700..d4c52c3028 100644
--- a/libgimpwidgets/gimpicons.h
+++ b/libgimpwidgets/gimpicons.h
@@ -300,6 +300,16 @@ G_BEGIN_DECLS
 #define GIMP_ICON_PATH                      "gimp-path"
 #define GIMP_ICON_PATH_STROKE               "gimp-path-stroke"
 
+#define GIMP_ICON_PIVOT_CENTER              "gimp-pivot-center"
+#define GIMP_ICON_PIVOT_EAST                "gimp-pivot-east"
+#define GIMP_ICON_PIVOT_NORTH               "gimp-pivot-north"
+#define GIMP_ICON_PIVOT_NORTH_EAST          "gimp-pivot-north-east"
+#define GIMP_ICON_PIVOT_NORTH_WEST          "gimp-pivot-north-west"
+#define GIMP_ICON_PIVOT_SOUTH               "gimp-pivot-south"
+#define GIMP_ICON_PIVOT_SOUTH_EAST          "gimp-pivot-south-east"
+#define GIMP_ICON_PIVOT_SOUTH_WEST          "gimp-pivot-south-west"
+#define GIMP_ICON_PIVOT_WEST                "gimp-pivot-west"
+
 #define GIMP_ICON_PREFERENCES_SYSTEM        "preferences-system"
 
 #define GIMP_ICON_PROCESS_STOP              "process-stop"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]