Issue #40 - Layer offset tool
Add a new Offset filter tool, as a front-end to gimp:offset. The tool replaces, and provides the same interface as, the drawable- offset dialog, while also providing live preview and on-canvas interaction. Note that we don't simply use a custom propgui constructor for gimp:offset, since we need a little more control.
|
@ -51,14 +51,7 @@ static const GimpActionEntry drawable_actions[] =
|
|||
NC_("drawable-action", "_White Balance"), NULL,
|
||||
NC_("drawable-action", "Automatic white balance correction"),
|
||||
G_CALLBACK (drawable_levels_stretch_cmd_callback),
|
||||
GIMP_HELP_LAYER_WHITE_BALANCE },
|
||||
|
||||
{ "drawable-offset", NULL,
|
||||
NC_("drawable-action", "_Offset..."), "<primary><shift>O",
|
||||
NC_("drawable-action",
|
||||
"Shift the pixels, optionally wrapping them at the borders"),
|
||||
G_CALLBACK (drawable_offset_cmd_callback),
|
||||
GIMP_HELP_LAYER_OFFSET }
|
||||
GIMP_HELP_LAYER_WHITE_BALANCE }
|
||||
};
|
||||
|
||||
static const GimpToggleActionEntry drawable_toggle_actions[] =
|
||||
|
@ -215,7 +208,6 @@ drawable_actions_update (GimpActionGroup *group,
|
|||
|
||||
SET_SENSITIVE ("drawable-equalize", writable && !children);
|
||||
SET_SENSITIVE ("drawable-levels-stretch", writable && !children && is_rgb);
|
||||
SET_SENSITIVE ("drawable-offset", writable && !children);
|
||||
|
||||
SET_SENSITIVE ("drawable-visible", drawable);
|
||||
SET_SENSITIVE ("drawable-linked", drawable);
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "core/gimp.h"
|
||||
#include "core/gimpdrawable-equalize.h"
|
||||
#include "core/gimpdrawable-levels.h"
|
||||
#include "core/gimpdrawable-offset.h"
|
||||
#include "core/gimpdrawable-operation.h"
|
||||
#include "core/gimpimage.h"
|
||||
#include "core/gimpimage-undo.h"
|
||||
|
@ -37,7 +36,6 @@
|
|||
#include "core/gimpprogress.h"
|
||||
|
||||
#include "dialogs/dialogs.h"
|
||||
#include "dialogs/offset-dialog.h"
|
||||
|
||||
#include "actions.h"
|
||||
#include "drawable-commands.h"
|
||||
|
@ -45,17 +43,6 @@
|
|||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
/* local function prototypes */
|
||||
|
||||
static void drawable_offset_callback (GtkWidget *dialog,
|
||||
GimpDrawable *drawable,
|
||||
GimpContext *context,
|
||||
gboolean wrap_around,
|
||||
GimpOffsetType fill_type,
|
||||
gint offset_x,
|
||||
gint offset_y);
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
void
|
||||
|
@ -95,35 +82,6 @@ drawable_levels_stretch_cmd_callback (GtkAction *action,
|
|||
gimp_image_flush (image);
|
||||
}
|
||||
|
||||
void
|
||||
drawable_offset_cmd_callback (GtkAction *action,
|
||||
gpointer data)
|
||||
{
|
||||
GimpImage *image;
|
||||
GimpDrawable *drawable;
|
||||
GtkWidget *widget;
|
||||
GtkWidget *dialog;
|
||||
return_if_no_drawable (image, drawable, data);
|
||||
return_if_no_widget (widget, data);
|
||||
|
||||
#define OFFSET_DIALOG_KEY "gimp-offset-dialog"
|
||||
|
||||
dialog = dialogs_get_dialog (G_OBJECT (drawable), OFFSET_DIALOG_KEY);
|
||||
|
||||
if (! dialog)
|
||||
{
|
||||
dialog = offset_dialog_new (drawable, action_data_get_context (data),
|
||||
widget,
|
||||
drawable_offset_callback,
|
||||
NULL);
|
||||
|
||||
dialogs_attach_dialog (G_OBJECT (drawable),
|
||||
OFFSET_DIALOG_KEY, dialog);
|
||||
}
|
||||
|
||||
gtk_window_present (GTK_WINDOW (dialog));
|
||||
}
|
||||
|
||||
void
|
||||
drawable_linked_cmd_callback (GtkAction *action,
|
||||
gpointer data)
|
||||
|
@ -336,25 +294,3 @@ drawable_rotate_cmd_callback (GtkAction *action,
|
|||
|
||||
gimp_image_flush (image);
|
||||
}
|
||||
|
||||
|
||||
/* private functions */
|
||||
|
||||
static void
|
||||
drawable_offset_callback (GtkWidget *dialog,
|
||||
GimpDrawable *drawable,
|
||||
GimpContext *context,
|
||||
gboolean wrap_around,
|
||||
GimpOffsetType fill_type,
|
||||
gint offset_x,
|
||||
gint offset_y)
|
||||
{
|
||||
GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
|
||||
|
||||
gimp_drawable_offset (drawable, context,
|
||||
wrap_around, fill_type,
|
||||
offset_x, offset_y);
|
||||
gimp_image_flush (image);
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
|
|
@ -23,8 +23,6 @@ void drawable_equalize_cmd_callback (GtkAction *action,
|
|||
gpointer data);
|
||||
void drawable_levels_stretch_cmd_callback (GtkAction *action,
|
||||
gpointer data);
|
||||
void drawable_offset_cmd_callback (GtkAction *action,
|
||||
gpointer data);
|
||||
|
||||
void drawable_linked_cmd_callback (GtkAction *action,
|
||||
gpointer data);
|
||||
|
|
|
@ -523,6 +523,11 @@ static const GimpStringActionEntry filters_interactive_actions[] =
|
|||
"gegl:noise-spread",
|
||||
GIMP_HELP_FILTER_NOISE_SPREAD },
|
||||
|
||||
{ "filters-offset", GIMP_ICON_TOOL_OFFSET,
|
||||
NC_("filters-action", "_Offset..."), "<primary><shift>O", NULL,
|
||||
"gimp:offset",
|
||||
GIMP_HELP_TOOL_OFFSET },
|
||||
|
||||
{ "filters-oilify", GIMP_ICON_GEGL,
|
||||
NC_("filters-action", "Oili_fy..."), NULL, NULL,
|
||||
"gegl:oilify",
|
||||
|
@ -922,6 +927,7 @@ filters_actions_update (GimpActionGroup *group,
|
|||
SET_SENSITIVE ("filters-noise-slur", writable);
|
||||
SET_SENSITIVE ("filters-noise-solid", writable);
|
||||
SET_SENSITIVE ("filters-noise-spread", writable);
|
||||
SET_SENSITIVE ("filters-offset", writable);
|
||||
SET_SENSITIVE ("filters-oilify", writable);
|
||||
SET_SENSITIVE ("filters-panorama-projection", writable);
|
||||
SET_SENSITIVE ("filters-photocopy", writable);
|
||||
|
|
|
@ -339,6 +339,10 @@ gimp_gegl_procedure_execute_async (GimpProcedure *procedure,
|
|||
{
|
||||
tool_name = "gimp-threshold-tool";
|
||||
}
|
||||
else if (! strcmp (procedure->original_name, "gimp:offset"))
|
||||
{
|
||||
tool_name = "gimp-offset-tool";
|
||||
}
|
||||
else
|
||||
{
|
||||
tool_name = "gimp-operation-tool";
|
||||
|
|
|
@ -69,8 +69,6 @@ libappdialogs_a_sources = \
|
|||
lebl-dialog.h \
|
||||
module-dialog.c \
|
||||
module-dialog.h \
|
||||
offset-dialog.c \
|
||||
offset-dialog.h \
|
||||
palette-import-dialog.c \
|
||||
palette-import-dialog.h \
|
||||
preferences-dialog.c \
|
||||
|
|
|
@ -234,6 +234,7 @@ static const GimpDialogFactoryEntry entries[] =
|
|||
FOREIGN ("gimp-hue-saturation-tool-dialog", TRUE, FALSE),
|
||||
FOREIGN ("gimp-levels-tool-dialog", TRUE, TRUE),
|
||||
FOREIGN ("gimp-measure-tool-dialog", TRUE, FALSE),
|
||||
FOREIGN ("gimp-offset-tool-dialog", TRUE, FALSE),
|
||||
FOREIGN ("gimp-operation-tool-dialog", TRUE, FALSE),
|
||||
FOREIGN ("gimp-posterize-tool-dialog", TRUE, FALSE),
|
||||
FOREIGN ("gimp-rotate-tool-dialog", TRUE, FALSE),
|
||||
|
|
|
@ -1,337 +0,0 @@
|
|||
/* GIMP - The GNU Image Manipulation Program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* 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 "libgimpmath/gimpmath.h"
|
||||
#include "libgimpwidgets/gimpwidgets.h"
|
||||
|
||||
#include "dialogs-types.h"
|
||||
|
||||
#include "core/gimp.h"
|
||||
#include "core/gimpcontext.h"
|
||||
#include "core/gimpdrawable.h"
|
||||
#include "core/gimpitem.h"
|
||||
#include "core/gimplayer.h"
|
||||
#include "core/gimplayermask.h"
|
||||
#include "core/gimpimage.h"
|
||||
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
#include "widgets/gimpviewabledialog.h"
|
||||
|
||||
#include "offset-dialog.h"
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
#define WRAP_AROUND (1 << 3)
|
||||
#define FILL_MASK (GIMP_OFFSET_BACKGROUND | GIMP_OFFSET_TRANSPARENT)
|
||||
|
||||
|
||||
typedef struct _OffsetDialog OffsetDialog;
|
||||
|
||||
struct _OffsetDialog
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
GimpContext *context;
|
||||
GimpOffsetType fill_type;
|
||||
GimpOffsetCallback callback;
|
||||
gpointer user_data;
|
||||
|
||||
GtkWidget *off_se;
|
||||
};
|
||||
|
||||
|
||||
/* local function prototypes */
|
||||
|
||||
static void offset_dialog_free (OffsetDialog *private);
|
||||
static void offset_dialog_response (GtkWidget *dialog,
|
||||
gint response_id,
|
||||
OffsetDialog *private);
|
||||
static void offset_dialog_half_xy_callback (GtkWidget *widget,
|
||||
OffsetDialog *private);
|
||||
static void offset_dialog_half_x_callback (GtkWidget *widget,
|
||||
OffsetDialog *private);
|
||||
static void offset_dialog_half_y_callback (GtkWidget *widget,
|
||||
OffsetDialog *private);
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
||||
GtkWidget *
|
||||
offset_dialog_new (GimpDrawable *drawable,
|
||||
GimpContext *context,
|
||||
GtkWidget *parent,
|
||||
GimpOffsetCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
OffsetDialog *private;
|
||||
GimpImage *image;
|
||||
GimpItem *item;
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *button;
|
||||
GtkWidget *spinbutton;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *radio_button;
|
||||
GtkAdjustment *adjustment;
|
||||
gdouble xres;
|
||||
gdouble yres;
|
||||
const gchar *title = NULL;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (parent), NULL);
|
||||
g_return_val_if_fail (callback != NULL, NULL);
|
||||
|
||||
item = GIMP_ITEM (drawable);
|
||||
image = gimp_item_get_image (item);
|
||||
|
||||
private = g_slice_new0 (OffsetDialog);
|
||||
|
||||
private->drawable = drawable;
|
||||
private->context = context;
|
||||
private->fill_type = gimp_drawable_has_alpha (drawable) | WRAP_AROUND;
|
||||
private->callback = callback;
|
||||
private->user_data = user_data;
|
||||
|
||||
gimp_image_get_resolution (image, &xres, &yres);
|
||||
|
||||
if (GIMP_IS_LAYER (drawable))
|
||||
title = _("Offset Layer");
|
||||
else if (GIMP_IS_LAYER_MASK (drawable))
|
||||
title = _("Offset Layer Mask");
|
||||
else if (GIMP_IS_CHANNEL (drawable))
|
||||
title = _("Offset Channel");
|
||||
else
|
||||
g_warning ("%s: unexpected drawable type", G_STRFUNC);
|
||||
|
||||
dialog = gimp_viewable_dialog_new (GIMP_VIEWABLE (drawable), context,
|
||||
_("Offset"), "gimp-drawable-offset",
|
||||
GIMP_ICON_TOOL_MOVE,
|
||||
title,
|
||||
parent,
|
||||
gimp_standard_help_func,
|
||||
GIMP_HELP_LAYER_OFFSET,
|
||||
|
||||
_("_Cancel"), GTK_RESPONSE_CANCEL,
|
||||
/* offset, used as a verb */
|
||||
_("_Offset"), GTK_RESPONSE_OK,
|
||||
|
||||
NULL);
|
||||
|
||||
gimp_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
|
||||
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
||||
|
||||
g_object_weak_ref (G_OBJECT (dialog),
|
||||
(GWeakNotify) offset_dialog_free, private);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (offset_dialog_response),
|
||||
private);
|
||||
|
||||
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
|
||||
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
|
||||
main_vbox, TRUE, TRUE, 0);
|
||||
gtk_widget_show (main_vbox);
|
||||
|
||||
/* The offset frame */
|
||||
frame = gimp_frame_new (_("Offset"));
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
||||
gtk_container_add (GTK_CONTAINER (frame), vbox);
|
||||
gtk_widget_show (vbox);
|
||||
|
||||
adjustment = gtk_adjustment_new (1, 1, 1, 1, 10, 0);
|
||||
spinbutton = gimp_spin_button_new (adjustment, 1.0, 2);
|
||||
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
|
||||
gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10);
|
||||
|
||||
private->off_se = gimp_size_entry_new (1, GIMP_UNIT_PIXEL, "%a",
|
||||
TRUE, TRUE, FALSE, 10,
|
||||
GIMP_SIZE_ENTRY_UPDATE_SIZE);
|
||||
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (private->off_se),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
gtk_grid_attach (GTK_GRID (private->off_se), spinbutton, 1, 0, 1, 1);
|
||||
gtk_widget_show (spinbutton);
|
||||
|
||||
gimp_size_entry_attach_label (GIMP_SIZE_ENTRY (private->off_se),
|
||||
_("_X:"), 0, 0, 0.0);
|
||||
gimp_size_entry_attach_label (GIMP_SIZE_ENTRY (private->off_se),
|
||||
_("_Y:"), 1, 0, 0.0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox), private->off_se, FALSE, FALSE, 0);
|
||||
gtk_widget_show (private->off_se);
|
||||
|
||||
gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (private->off_se), GIMP_UNIT_PIXEL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (private->off_se), 0,
|
||||
xres, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (private->off_se), 1,
|
||||
yres, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (private->off_se), 0,
|
||||
- gimp_item_get_width (item),
|
||||
gimp_item_get_width (item));
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (private->off_se), 1,
|
||||
- gimp_item_get_height (item),
|
||||
gimp_item_get_height (item));
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (private->off_se), 0,
|
||||
0, gimp_item_get_width (item));
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (private->off_se), 1,
|
||||
0, gimp_item_get_height (item));
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->off_se), 0, 0);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->off_se), 1, 0);
|
||||
|
||||
button = gtk_button_new_with_mnemonic (_("By width/_2, height/2"));
|
||||
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (offset_dialog_half_xy_callback),
|
||||
private);
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
button = gtk_button_new_with_mnemonic ("By _width/2");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (offset_dialog_half_x_callback),
|
||||
private);
|
||||
|
||||
button = gtk_button_new_with_mnemonic ("By _height/2");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (offset_dialog_half_y_callback),
|
||||
private);
|
||||
|
||||
/* The edge behavior frame */
|
||||
frame = gimp_int_radio_group_new (TRUE, _("Edge Behavior"),
|
||||
G_CALLBACK (gimp_radio_button_update),
|
||||
&private->fill_type, private->fill_type,
|
||||
|
||||
_("W_rap around"),
|
||||
WRAP_AROUND, NULL,
|
||||
|
||||
_("Fill with _background color"),
|
||||
GIMP_OFFSET_BACKGROUND, NULL,
|
||||
|
||||
_("Make _transparent"),
|
||||
GIMP_OFFSET_TRANSPARENT, &radio_button,
|
||||
NULL);
|
||||
|
||||
if (! gimp_drawable_has_alpha (drawable))
|
||||
gtk_widget_set_sensitive (radio_button, FALSE);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
||||
|
||||
/* private functions */
|
||||
|
||||
static void
|
||||
offset_dialog_free (OffsetDialog *private)
|
||||
{
|
||||
g_slice_free (OffsetDialog, private);
|
||||
}
|
||||
|
||||
static void
|
||||
offset_dialog_response (GtkWidget *dialog,
|
||||
gint response_id,
|
||||
OffsetDialog *private)
|
||||
{
|
||||
if (response_id == GTK_RESPONSE_OK)
|
||||
{
|
||||
gint offset_x;
|
||||
gint offset_y;
|
||||
|
||||
offset_x =
|
||||
RINT (gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (private->off_se),
|
||||
0));
|
||||
offset_y =
|
||||
RINT (gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (private->off_se),
|
||||
1));
|
||||
|
||||
private->callback (dialog,
|
||||
private->drawable,
|
||||
private->context,
|
||||
private->fill_type & WRAP_AROUND ? TRUE : FALSE,
|
||||
private->fill_type & FILL_MASK,
|
||||
offset_x,
|
||||
offset_y);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
offset_dialog_half_xy_callback (GtkWidget *widget,
|
||||
OffsetDialog *private)
|
||||
{
|
||||
GimpItem *item = GIMP_ITEM (private->drawable);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->off_se),
|
||||
0, gimp_item_get_width (item) / 2);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->off_se),
|
||||
1, gimp_item_get_height (item) / 2);
|
||||
}
|
||||
|
||||
static void
|
||||
offset_dialog_half_x_callback (GtkWidget *widget,
|
||||
OffsetDialog *private)
|
||||
{
|
||||
GimpItem *item = GIMP_ITEM (private->drawable);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->off_se),
|
||||
0, gimp_item_get_width (item) / 2);
|
||||
}
|
||||
|
||||
static void
|
||||
offset_dialog_half_y_callback (GtkWidget *widget,
|
||||
OffsetDialog *private)
|
||||
{
|
||||
GimpItem *item = GIMP_ITEM (private->drawable);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->off_se),
|
||||
1, gimp_item_get_height (item) / 2);
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
/* GIMP - The GNU Image Manipulation Program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* 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 __OFFSET_DIALOG_H__
|
||||
#define __OFFSET_DIALOG_H__
|
||||
|
||||
|
||||
typedef void (* GimpOffsetCallback) (GtkWidget *dialog,
|
||||
GimpDrawable *drawable,
|
||||
GimpContext *context,
|
||||
gboolean wrap_around,
|
||||
GimpOffsetType fill_type,
|
||||
gint offset_x,
|
||||
gint offset_y);
|
||||
|
||||
|
||||
GtkWidget * offset_dialog_new (GimpDrawable *drawable,
|
||||
GimpContext *context,
|
||||
GtkWidget *parent,
|
||||
GimpOffsetCallback callback,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
#endif /* __OFFSET_DIALOG_H__ */
|
|
@ -124,6 +124,8 @@ libapptools_a_sources = \
|
|||
gimpiscissorstool.h \
|
||||
gimplevelstool.c \
|
||||
gimplevelstool.h \
|
||||
gimpoffsettool.c \
|
||||
gimpoffsettool.h \
|
||||
gimpoperationtool.c \
|
||||
gimpoperationtool.h \
|
||||
gimpmagnifyoptions.c \
|
||||
|
|
|
@ -71,6 +71,7 @@
|
|||
#include "gimpmovetool.h"
|
||||
#include "gimpmybrushtool.h"
|
||||
#include "gimpnpointdeformationtool.h"
|
||||
#include "gimpoffsettool.h"
|
||||
#include "gimppaintbrushtool.h"
|
||||
#include "gimppenciltool.h"
|
||||
#include "gimpperspectiveclonetool.h"
|
||||
|
@ -172,12 +173,13 @@ gimp_tools_init (Gimp *gimp)
|
|||
gimp_smudge_tool_register,
|
||||
gimp_dodge_burn_tool_register,
|
||||
|
||||
/* color tools */
|
||||
/* filter tools */
|
||||
|
||||
gimp_brightness_contrast_tool_register,
|
||||
gimp_threshold_tool_register,
|
||||
gimp_levels_tool_register,
|
||||
gimp_curves_tool_register,
|
||||
gimp_offset_tool_register,
|
||||
gimp_gegl_tool_register,
|
||||
gimp_operation_tool_register
|
||||
};
|
||||
|
|
|
@ -0,0 +1,791 @@
|
|||
/* GIMP - The GNU Image Manipulation Program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* 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 <string.h>
|
||||
|
||||
#include <gegl.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "libgimpmath/gimpmath.h"
|
||||
#include "libgimpwidgets/gimpwidgets.h"
|
||||
|
||||
#include "tools-types.h"
|
||||
|
||||
#include "core/gimpchannel.h"
|
||||
#include "core/gimpdrawable.h"
|
||||
#include "core/gimpdrawablefilter.h"
|
||||
#include "core/gimpimage.h"
|
||||
#include "core/gimplayer.h"
|
||||
#include "core/gimplayermask.h"
|
||||
|
||||
#include "widgets/gimphelp-ids.h"
|
||||
|
||||
#include "display/gimpdisplay.h"
|
||||
#include "display/gimptoolgui.h"
|
||||
|
||||
#include "gimpoffsettool.h"
|
||||
#include "gimpfilteroptions.h"
|
||||
#include "gimptoolcontrol.h"
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
static gboolean gimp_offset_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
GError **error);
|
||||
static void gimp_offset_tool_control (GimpTool *tool,
|
||||
GimpToolAction action,
|
||||
GimpDisplay *display);
|
||||
static void gimp_offset_tool_button_press (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpButtonPressType press_type,
|
||||
GimpDisplay *display);
|
||||
static void gimp_offset_tool_button_release (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpButtonReleaseType release_type,
|
||||
GimpDisplay *display);
|
||||
static void gimp_offset_tool_motion (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static void gimp_offset_tool_oper_update (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
gboolean proximity,
|
||||
GimpDisplay *display);
|
||||
static void gimp_offset_tool_cursor_update (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
static void gimp_offset_tool_options_notify (GimpTool *tool,
|
||||
GimpToolOptions *options,
|
||||
const GParamSpec *pspec);
|
||||
|
||||
static gchar * gimp_offset_tool_get_operation (GimpFilterTool *filter_tool,
|
||||
gchar **description);
|
||||
static void gimp_offset_tool_dialog (GimpFilterTool *filter_tool);
|
||||
static void gimp_offset_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec);
|
||||
|
||||
static void gimp_offset_tool_offset_changed (GimpSizeEntry *se,
|
||||
GimpOffsetTool *offset_tool);
|
||||
|
||||
static void gimp_offset_tool_half_xy_clicked (GtkButton *button,
|
||||
GimpOffsetTool *offset_tool);
|
||||
static void gimp_offset_tool_half_x_clicked (GtkButton *button,
|
||||
GimpOffsetTool *offset_tool);
|
||||
static void gimp_offset_tool_half_y_clicked (GtkButton *button,
|
||||
GimpOffsetTool *offset_tool);
|
||||
|
||||
static void gimp_offset_tool_edge_behavior_toggled (GtkToggleButton *toggle,
|
||||
GimpOffsetTool *offset_tool);
|
||||
|
||||
static void gimp_offset_tool_background_changed (GimpContext *context,
|
||||
const GimpRGB *color,
|
||||
GimpOffsetTool *offset_tool);
|
||||
|
||||
static gint gimp_offset_tool_get_width (GimpOffsetTool *offset_tool);
|
||||
static gint gimp_offset_tool_get_height (GimpOffsetTool *offset_tool);
|
||||
|
||||
static void gimp_offset_tool_update (GimpOffsetTool *offset_tool);
|
||||
|
||||
static void gimp_offset_tool_halt (GimpOffsetTool *offset_tool);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpOffsetTool, gimp_offset_tool,
|
||||
GIMP_TYPE_FILTER_TOOL)
|
||||
|
||||
#define parent_class gimp_offset_tool_parent_class
|
||||
|
||||
|
||||
void
|
||||
gimp_offset_tool_register (GimpToolRegisterCallback callback,
|
||||
gpointer data)
|
||||
{
|
||||
(* callback) (GIMP_TYPE_OFFSET_TOOL,
|
||||
GIMP_TYPE_FILTER_OPTIONS, NULL,
|
||||
GIMP_CONTEXT_PROP_MASK_BACKGROUND,
|
||||
"gimp-offset-tool",
|
||||
_("Offset"),
|
||||
_("Shift the pixels, optionally wrapping them at the borders"),
|
||||
N_("_Offset..."), NULL,
|
||||
NULL, GIMP_HELP_TOOL_OFFSET,
|
||||
GIMP_ICON_TOOL_OFFSET,
|
||||
data);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_class_init (GimpOffsetToolClass *klass)
|
||||
{
|
||||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
|
||||
|
||||
tool_class->initialize = gimp_offset_tool_initialize;
|
||||
tool_class->control = gimp_offset_tool_control;
|
||||
tool_class->button_press = gimp_offset_tool_button_press;
|
||||
tool_class->button_release = gimp_offset_tool_button_release;
|
||||
tool_class->motion = gimp_offset_tool_motion;
|
||||
tool_class->oper_update = gimp_offset_tool_oper_update;
|
||||
tool_class->cursor_update = gimp_offset_tool_cursor_update;
|
||||
tool_class->options_notify = gimp_offset_tool_options_notify;
|
||||
|
||||
filter_tool_class->get_operation = gimp_offset_tool_get_operation;
|
||||
filter_tool_class->dialog = gimp_offset_tool_dialog;
|
||||
filter_tool_class->config_notify = gimp_offset_tool_config_notify;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_init (GimpOffsetTool *offset_tool)
|
||||
{
|
||||
GimpTool *tool = GIMP_TOOL (offset_tool);
|
||||
|
||||
gimp_tool_control_set_scroll_lock (tool->control, TRUE);
|
||||
gimp_tool_control_set_precision (tool->control,
|
||||
GIMP_CURSOR_PRECISION_PIXEL_CENTER);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_offset_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
GError **error)
|
||||
{
|
||||
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (tool);
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (tool);
|
||||
GimpContext *context = GIMP_CONTEXT (GIMP_TOOL_GET_OPTIONS (tool));
|
||||
GimpImage *image;
|
||||
gdouble xres;
|
||||
gdouble yres;
|
||||
|
||||
if (! GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error))
|
||||
return FALSE;
|
||||
|
||||
image = gimp_item_get_image (GIMP_ITEM (tool->drawable));
|
||||
|
||||
gimp_image_get_resolution (image, &xres, &yres);
|
||||
|
||||
g_signal_handlers_block_by_func (offset_tool->offset_se,
|
||||
gimp_offset_tool_offset_changed,
|
||||
offset_tool);
|
||||
|
||||
gimp_size_entry_set_resolution (
|
||||
GIMP_SIZE_ENTRY (offset_tool->offset_se), 0,
|
||||
xres, FALSE);
|
||||
gimp_size_entry_set_resolution (
|
||||
GIMP_SIZE_ENTRY (offset_tool->offset_se), 1,
|
||||
yres, FALSE);
|
||||
|
||||
if (GIMP_IS_LAYER (tool->drawable))
|
||||
gimp_tool_gui_set_description (filter_tool->gui, _("Offset Layer"));
|
||||
else if (GIMP_IS_LAYER_MASK (tool->drawable))
|
||||
gimp_tool_gui_set_description (filter_tool->gui, _("Offset Layer Mask"));
|
||||
else if (GIMP_IS_CHANNEL (tool->drawable))
|
||||
gimp_tool_gui_set_description (filter_tool->gui, _("Offset Channel"));
|
||||
else
|
||||
g_warning ("%s: unexpected drawable type", G_STRFUNC);
|
||||
|
||||
gtk_widget_set_sensitive (offset_tool->transparent_radio,
|
||||
gimp_drawable_has_alpha (tool->drawable));
|
||||
|
||||
g_signal_handlers_unblock_by_func (offset_tool->offset_se,
|
||||
gimp_offset_tool_offset_changed,
|
||||
offset_tool);
|
||||
|
||||
gegl_node_set (
|
||||
filter_tool->operation,
|
||||
"context", context,
|
||||
NULL);
|
||||
|
||||
g_signal_connect (context, "background-changed",
|
||||
G_CALLBACK (gimp_offset_tool_background_changed),
|
||||
offset_tool);
|
||||
|
||||
gimp_offset_tool_update (offset_tool);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_control (GimpTool *tool,
|
||||
GimpToolAction action,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (tool);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case GIMP_TOOL_ACTION_PAUSE:
|
||||
case GIMP_TOOL_ACTION_RESUME:
|
||||
break;
|
||||
|
||||
case GIMP_TOOL_ACTION_HALT:
|
||||
gimp_offset_tool_halt (offset_tool);
|
||||
break;
|
||||
|
||||
case GIMP_TOOL_ACTION_COMMIT:
|
||||
break;
|
||||
}
|
||||
|
||||
GIMP_TOOL_CLASS (parent_class)->control (tool, action, display);
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gimp_offset_tool_get_operation (GimpFilterTool *filter_tool,
|
||||
gchar **description)
|
||||
{
|
||||
return g_strdup ("gimp:offset");
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_button_press (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpButtonPressType press_type,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (tool);
|
||||
|
||||
offset_tool->dragging = ! gimp_filter_tool_on_guide (GIMP_FILTER_TOOL (tool),
|
||||
coords, display);
|
||||
|
||||
if (! offset_tool->dragging)
|
||||
{
|
||||
GIMP_TOOL_CLASS (parent_class)->button_press (tool, coords, time, state,
|
||||
press_type, display);
|
||||
}
|
||||
else
|
||||
{
|
||||
offset_tool->x = coords->x;
|
||||
offset_tool->y = coords->y;
|
||||
|
||||
g_object_get (GIMP_FILTER_TOOL (tool)->config,
|
||||
"x", &offset_tool->offset_x,
|
||||
"y", &offset_tool->offset_y,
|
||||
NULL);
|
||||
|
||||
tool->display = display;
|
||||
|
||||
gimp_tool_control_activate (tool->control);
|
||||
|
||||
gimp_tool_pop_status (tool, display);
|
||||
|
||||
gimp_tool_push_status_coords (tool, display,
|
||||
GIMP_CURSOR_PRECISION_PIXEL_CENTER,
|
||||
_("Offset: "),
|
||||
0,
|
||||
", ",
|
||||
0,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_button_release (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpButtonReleaseType release_type,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (tool);
|
||||
|
||||
if (! offset_tool->dragging)
|
||||
{
|
||||
GIMP_TOOL_CLASS (parent_class)->button_release (tool, coords, time, state,
|
||||
release_type, display);
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_tool_control_halt (tool->control);
|
||||
|
||||
offset_tool->dragging = FALSE;
|
||||
|
||||
if (release_type == GIMP_BUTTON_RELEASE_CANCEL)
|
||||
{
|
||||
g_object_set (GIMP_FILTER_TOOL (tool)->config,
|
||||
"x", offset_tool->offset_x,
|
||||
"y", offset_tool->offset_y,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_motion (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
guint32 time,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (tool);
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (tool);
|
||||
|
||||
if (! offset_tool->dragging)
|
||||
{
|
||||
GIMP_TOOL_CLASS (parent_class)->motion (tool, coords, time, state,
|
||||
display);
|
||||
}
|
||||
else
|
||||
{
|
||||
GimpOffsetType type;
|
||||
gint offset_x;
|
||||
gint offset_y;
|
||||
gint x;
|
||||
gint y;
|
||||
gint width;
|
||||
gint height;
|
||||
|
||||
g_object_get (filter_tool->config,
|
||||
"type", &type,
|
||||
NULL);
|
||||
|
||||
offset_x = RINT (coords->x - offset_tool->x);
|
||||
offset_y = RINT (coords->y - offset_tool->y);
|
||||
|
||||
x = offset_tool->offset_x + offset_x;
|
||||
y = offset_tool->offset_y + offset_y;
|
||||
|
||||
width = gimp_offset_tool_get_width (offset_tool);
|
||||
height = gimp_offset_tool_get_height (offset_tool);
|
||||
|
||||
if (type == GIMP_OFFSET_WRAP_AROUND)
|
||||
{
|
||||
x %= MAX (width, 1);
|
||||
y %= MAX (height, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
x = CLAMP (x, -width, +width);
|
||||
y = CLAMP (y, -height, +height);
|
||||
}
|
||||
|
||||
g_object_set (filter_tool->config,
|
||||
"x", x,
|
||||
"y", y,
|
||||
NULL);
|
||||
|
||||
gimp_tool_pop_status (tool, display);
|
||||
|
||||
gimp_tool_push_status_coords (tool, display,
|
||||
GIMP_CURSOR_PRECISION_PIXEL_CENTER,
|
||||
_("Offset: "),
|
||||
offset_x,
|
||||
", ",
|
||||
offset_y,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_oper_update (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
gboolean proximity,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
if (! tool->drawable ||
|
||||
gimp_filter_tool_on_guide (GIMP_FILTER_TOOL (tool),
|
||||
coords, display))
|
||||
{
|
||||
GIMP_TOOL_CLASS (parent_class)->oper_update (tool, coords, state,
|
||||
proximity, display);
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_tool_pop_status (tool, display);
|
||||
|
||||
gimp_tool_push_status (tool, display, "%s",
|
||||
_("Click-Drag to offset drawable"));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_cursor_update (GimpTool *tool,
|
||||
const GimpCoords *coords,
|
||||
GdkModifierType state,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
if (! tool->drawable ||
|
||||
gimp_filter_tool_on_guide (GIMP_FILTER_TOOL (tool),
|
||||
coords, display))
|
||||
{
|
||||
GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state,
|
||||
display);
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_tool_set_cursor (tool, display,
|
||||
GIMP_CURSOR_MOUSE,
|
||||
GIMP_TOOL_CURSOR_MOVE,
|
||||
GIMP_CURSOR_MODIFIER_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_options_notify (GimpTool *tool,
|
||||
GimpToolOptions *options,
|
||||
const GParamSpec *pspec)
|
||||
{
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (tool);
|
||||
|
||||
GIMP_TOOL_CLASS (parent_class)->options_notify (tool, options, pspec);
|
||||
|
||||
if (! strcmp (pspec->name, "region"))
|
||||
gimp_offset_tool_update (offset_tool);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_dialog (GimpFilterTool *filter_tool)
|
||||
{
|
||||
GimpOffsetTool *offset_tool = GIMP_OFFSET_TOOL (filter_tool);
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *button;
|
||||
GtkWidget *spinbutton;
|
||||
GtkWidget *frame;
|
||||
GtkAdjustment *adjustment;
|
||||
|
||||
main_vbox = gimp_filter_tool_dialog_get_vbox (filter_tool);
|
||||
|
||||
/* The offset frame */
|
||||
frame = gimp_frame_new (_("Offset"));
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
||||
gtk_container_add (GTK_CONTAINER (frame), vbox);
|
||||
gtk_widget_show (vbox);
|
||||
|
||||
adjustment = (GtkAdjustment *)
|
||||
gtk_adjustment_new (1, 1, 1, 1, 10, 0);
|
||||
spinbutton = gimp_spin_button_new (adjustment, 1.0, 2);
|
||||
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
|
||||
gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10);
|
||||
|
||||
offset_tool->offset_se = gimp_size_entry_new (1, GIMP_UNIT_PIXEL, "%a",
|
||||
TRUE, TRUE, FALSE, 10,
|
||||
GIMP_SIZE_ENTRY_UPDATE_SIZE);
|
||||
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (offset_tool->offset_se),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
gtk_grid_attach (GTK_GRID (offset_tool->offset_se), spinbutton, 1, 0, 1, 1);
|
||||
gtk_widget_show (spinbutton);
|
||||
|
||||
gimp_size_entry_attach_label (GIMP_SIZE_ENTRY (offset_tool->offset_se),
|
||||
_("_X:"), 0, 0, 0.0);
|
||||
gimp_size_entry_attach_label (GIMP_SIZE_ENTRY (offset_tool->offset_se),
|
||||
_("_Y:"), 1, 0, 0.0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox), offset_tool->offset_se, FALSE, FALSE, 0);
|
||||
gtk_widget_show (offset_tool->offset_se);
|
||||
|
||||
gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (offset_tool->offset_se),
|
||||
GIMP_UNIT_PIXEL);
|
||||
|
||||
g_signal_connect (offset_tool->offset_se, "refval-changed",
|
||||
G_CALLBACK (gimp_offset_tool_offset_changed),
|
||||
offset_tool);
|
||||
g_signal_connect (offset_tool->offset_se, "value-changed",
|
||||
G_CALLBACK (gimp_offset_tool_offset_changed),
|
||||
offset_tool);
|
||||
|
||||
button = gtk_button_new_with_mnemonic (_("By width/_2, height/2"));
|
||||
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (gimp_offset_tool_half_xy_clicked),
|
||||
offset_tool);
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
button = gtk_button_new_with_mnemonic ("By _width/2");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (gimp_offset_tool_half_x_clicked),
|
||||
offset_tool);
|
||||
|
||||
button = gtk_button_new_with_mnemonic ("By _height/2");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (gimp_offset_tool_half_y_clicked),
|
||||
offset_tool);
|
||||
|
||||
/* The edge behavior frame */
|
||||
frame = gimp_int_radio_group_new (TRUE, _("Edge Behavior"),
|
||||
|
||||
G_CALLBACK (gimp_offset_tool_edge_behavior_toggled),
|
||||
offset_tool,
|
||||
|
||||
GIMP_OFFSET_WRAP_AROUND,
|
||||
|
||||
_("W_rap around"),
|
||||
GIMP_OFFSET_WRAP_AROUND, NULL,
|
||||
|
||||
_("Fill with _background color"),
|
||||
GIMP_OFFSET_BACKGROUND, NULL,
|
||||
|
||||
_("Make _transparent"),
|
||||
GIMP_OFFSET_TRANSPARENT,
|
||||
&offset_tool->transparent_radio,
|
||||
NULL);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec)
|
||||
{
|
||||
gimp_offset_tool_update (GIMP_OFFSET_TOOL (filter_tool));
|
||||
|
||||
GIMP_FILTER_TOOL_CLASS (parent_class)->config_notify (filter_tool,
|
||||
config, pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_offset_changed (GimpSizeEntry *se,
|
||||
GimpOffsetTool *offset_tool)
|
||||
{
|
||||
g_object_set (GIMP_FILTER_TOOL (offset_tool)->config,
|
||||
"x", (gint) gimp_size_entry_get_refval (se, 0),
|
||||
"y", (gint) gimp_size_entry_get_refval (se, 1),
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_half_xy_clicked (GtkButton *button,
|
||||
GimpOffsetTool *offset_tool)
|
||||
{
|
||||
g_object_set (GIMP_FILTER_TOOL (offset_tool)->config,
|
||||
"x", gimp_offset_tool_get_width (offset_tool) / 2,
|
||||
"y", gimp_offset_tool_get_height (offset_tool) / 2,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_half_x_clicked (GtkButton *button,
|
||||
GimpOffsetTool *offset_tool)
|
||||
{
|
||||
g_object_set (GIMP_FILTER_TOOL (offset_tool)->config,
|
||||
"x", gimp_offset_tool_get_width (offset_tool) / 2,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_half_y_clicked (GtkButton *button,
|
||||
GimpOffsetTool *offset_tool)
|
||||
{
|
||||
g_object_set (GIMP_FILTER_TOOL (offset_tool)->config,
|
||||
"y", gimp_offset_tool_get_height (offset_tool) / 2,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_edge_behavior_toggled (GtkToggleButton *toggle,
|
||||
GimpOffsetTool *offset_tool)
|
||||
{
|
||||
if (gtk_toggle_button_get_active (toggle))
|
||||
{
|
||||
GimpOffsetType type;
|
||||
|
||||
type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (toggle),
|
||||
"gimp-item-data"));
|
||||
|
||||
g_object_set (GIMP_FILTER_TOOL (offset_tool)->config,
|
||||
"type", type,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_background_changed (GimpContext *context,
|
||||
const GimpRGB *color,
|
||||
GimpOffsetTool *offset_tool)
|
||||
{
|
||||
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (offset_tool);
|
||||
GimpOffsetType type;
|
||||
|
||||
g_object_get (filter_tool->config,
|
||||
"type", &type,
|
||||
NULL);
|
||||
|
||||
if (type == GIMP_OFFSET_BACKGROUND)
|
||||
{
|
||||
gegl_node_set (filter_tool->operation,
|
||||
"context", context,
|
||||
NULL);
|
||||
|
||||
gimp_drawable_filter_apply (filter_tool->filter, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static gint
|
||||
gimp_offset_tool_get_width (GimpOffsetTool *offset_tool)
|
||||
{
|
||||
GeglRectangle drawable_area;
|
||||
gint drawable_offset_x;
|
||||
gint drawable_offset_y;
|
||||
|
||||
if (gimp_filter_tool_get_drawable_area (GIMP_FILTER_TOOL (offset_tool),
|
||||
&drawable_offset_x,
|
||||
&drawable_offset_y,
|
||||
&drawable_area) &&
|
||||
! gegl_rectangle_is_empty (&drawable_area))
|
||||
{
|
||||
return drawable_area.width;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gint
|
||||
gimp_offset_tool_get_height (GimpOffsetTool *offset_tool)
|
||||
{
|
||||
GeglRectangle drawable_area;
|
||||
gint drawable_offset_x;
|
||||
gint drawable_offset_y;
|
||||
|
||||
if (gimp_filter_tool_get_drawable_area (GIMP_FILTER_TOOL (offset_tool),
|
||||
&drawable_offset_x,
|
||||
&drawable_offset_y,
|
||||
&drawable_area) &&
|
||||
! gegl_rectangle_is_empty (&drawable_area))
|
||||
{
|
||||
return drawable_area.height;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_update (GimpOffsetTool *offset_tool)
|
||||
{
|
||||
GimpTool *tool = GIMP_TOOL (offset_tool);
|
||||
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (offset_tool);
|
||||
GimpOffsetType orig_type;
|
||||
gint orig_x;
|
||||
gint orig_y;
|
||||
GimpOffsetType type;
|
||||
gint x;
|
||||
gint y;
|
||||
gint width;
|
||||
gint height;
|
||||
|
||||
g_object_get (filter_tool->config,
|
||||
"type", &orig_type,
|
||||
"x", &orig_x,
|
||||
"y", &orig_y,
|
||||
NULL);
|
||||
|
||||
width = gimp_offset_tool_get_width (offset_tool);
|
||||
height = gimp_offset_tool_get_height (offset_tool);
|
||||
|
||||
x = CLAMP (orig_x, -width, +width);
|
||||
y = CLAMP (orig_y, -height, +height);
|
||||
|
||||
type = orig_type;
|
||||
|
||||
if (tool->drawable &&
|
||||
! gimp_drawable_has_alpha (tool->drawable) &&
|
||||
type == GIMP_OFFSET_TRANSPARENT)
|
||||
{
|
||||
type = GIMP_OFFSET_BACKGROUND;
|
||||
}
|
||||
|
||||
if (x != orig_x ||
|
||||
y != orig_y ||
|
||||
type != orig_type)
|
||||
{
|
||||
g_object_set (filter_tool->config,
|
||||
"type", type,
|
||||
"x", x,
|
||||
"y", y,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (offset_tool->offset_se)
|
||||
{
|
||||
gint width = gimp_offset_tool_get_width (offset_tool);
|
||||
gint height = gimp_offset_tool_get_height (offset_tool);
|
||||
|
||||
g_signal_handlers_block_by_func (offset_tool->offset_se,
|
||||
gimp_offset_tool_offset_changed,
|
||||
offset_tool);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (
|
||||
GIMP_SIZE_ENTRY (offset_tool->offset_se), 0,
|
||||
-width, +width);
|
||||
gimp_size_entry_set_refval_boundaries (
|
||||
GIMP_SIZE_ENTRY (offset_tool->offset_se), 1,
|
||||
-height, +height);
|
||||
|
||||
gimp_size_entry_set_size (
|
||||
GIMP_SIZE_ENTRY (offset_tool->offset_se), 0,
|
||||
0, width);
|
||||
gimp_size_entry_set_size (
|
||||
GIMP_SIZE_ENTRY (offset_tool->offset_se), 1,
|
||||
0, height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (offset_tool->offset_se), 0,
|
||||
x);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (offset_tool->offset_se), 1,
|
||||
y);
|
||||
|
||||
g_signal_handlers_unblock_by_func (offset_tool->offset_se,
|
||||
gimp_offset_tool_offset_changed,
|
||||
offset_tool);
|
||||
}
|
||||
|
||||
if (offset_tool->transparent_radio)
|
||||
{
|
||||
gimp_int_radio_group_set_active (
|
||||
GTK_RADIO_BUTTON (offset_tool->transparent_radio),
|
||||
type);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_offset_tool_halt (GimpOffsetTool *offset_tool)
|
||||
{
|
||||
GimpContext *context = GIMP_CONTEXT (GIMP_TOOL_GET_OPTIONS (offset_tool));
|
||||
|
||||
offset_tool->offset_se = NULL;
|
||||
offset_tool->transparent_radio = NULL;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (
|
||||
context,
|
||||
gimp_offset_tool_background_changed,
|
||||
offset_tool);
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/* GIMP - The GNU Image Manipulation Program
|
||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* 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_OFFSET_TOOL_H__
|
||||
#define __GIMP_OFFSET_TOOL_H__
|
||||
|
||||
|
||||
#include "gimpfiltertool.h"
|
||||
|
||||
|
||||
#define GIMP_TYPE_OFFSET_TOOL (gimp_offset_tool_get_type ())
|
||||
#define GIMP_OFFSET_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OFFSET_TOOL, GimpOffsetTool))
|
||||
#define GIMP_OFFSET_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OFFSET_TOOL, GimpOffsetToolClass))
|
||||
#define GIMP_IS_OFFSET_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OFFSET_TOOL))
|
||||
#define GIMP_IS_OFFSET_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OFFSET_TOOL))
|
||||
#define GIMP_OFFSET_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OFFSET_TOOL, GimpOffsetToolClass))
|
||||
|
||||
|
||||
typedef struct _GimpOffsetTool GimpOffsetTool;
|
||||
typedef struct _GimpOffsetToolClass GimpOffsetToolClass;
|
||||
|
||||
struct _GimpOffsetTool
|
||||
{
|
||||
GimpFilterTool parent_instance;
|
||||
|
||||
gboolean dragging;
|
||||
gdouble x;
|
||||
gdouble y;
|
||||
gint offset_x;
|
||||
gint offset_y;
|
||||
|
||||
/* dialog */
|
||||
GtkWidget *offset_se;
|
||||
GtkWidget *transparent_radio;
|
||||
};
|
||||
|
||||
struct _GimpOffsetToolClass
|
||||
{
|
||||
GimpFilterToolClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
void gimp_offset_tool_register (GimpToolRegisterCallback callback,
|
||||
gpointer data);
|
||||
|
||||
GType gimp_offset_tool_get_type (void) G_GNUC_CONST;
|
||||
|
||||
|
||||
#endif /* __GIMP_OFFSET_TOOL_H__ */
|
|
@ -318,6 +318,7 @@
|
|||
#define GIMP_HELP_TOOL_MOVE "gimp-tool-move"
|
||||
#define GIMP_HELP_TOOL_MYPAINT_BRUSH "gimp-tool-mypaint-brush"
|
||||
#define GIMP_HELP_TOOL_N_POINT_DEFORMATION "gimp-tool-n-point-deformation"
|
||||
#define GIMP_HELP_TOOL_OFFSET "gimp-tool-offset"
|
||||
#define GIMP_HELP_TOOL_PATH "gimp-tool-path"
|
||||
#define GIMP_HELP_TOOL_PAINTBRUSH "gimp-tool-paintbrush"
|
||||
#define GIMP_HELP_TOOL_PENCIL "gimp-tool-pencil"
|
||||
|
|
After Width: | Height: | Size: 792 B |
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,293 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
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:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg30571"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="gimp-tool-offset.svg"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<title
|
||||
id="title5690">GIMP Offset Tool</title>
|
||||
<defs
|
||||
id="defs30573">
|
||||
<linearGradient
|
||||
id="linearGradient4989-64">
|
||||
<stop
|
||||
id="stop4991-7"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4993-6"
|
||||
offset="0.20796148"
|
||||
style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4995-9"
|
||||
offset="0.8170042"
|
||||
style="stop-color:#4074ae;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4997-4"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#36486c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient6951-5">
|
||||
<stop
|
||||
id="stop6961-6"
|
||||
stop-color="#ee8719" />
|
||||
<stop
|
||||
offset="1"
|
||||
id="stop6955-9"
|
||||
stop-color="#e07c12"
|
||||
stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.01502614,0,0,0.01468232,2.9686133,1037.3257)"
|
||||
id="linearGradient6057"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="320.70001"
|
||||
x1="231.55"
|
||||
osb:paint="gradient">
|
||||
<stop
|
||||
id="stop6053"
|
||||
stop-color="#a11f7c" />
|
||||
<stop
|
||||
id="stop6055"
|
||||
offset="1"
|
||||
stop-color="#541f31"
|
||||
stop-opacity="0.984" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3204-1"
|
||||
id="linearGradient8313"
|
||||
x1="191.02673"
|
||||
y1="320.22839"
|
||||
x2="173.83766"
|
||||
y2="337.29449"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.5438992,0,0,1.5438992,-276.96693,541.42922)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3204-1">
|
||||
<stop
|
||||
id="stop3206" />
|
||||
<stop
|
||||
offset="1"
|
||||
id="stop3208"
|
||||
stop-opacity="0" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="29.541667"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
showborder="true"
|
||||
inkscape:window-width="1535"
|
||||
inkscape:window-height="876"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
showguides="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4369" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata30576">
|
||||
<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>GIMP Offset Tool</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Klaus Staedtler</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1028.3622)">
|
||||
<g
|
||||
id="gimp-tool-offset">
|
||||
<g
|
||||
inkscape:transform-center-y="0.025736985"
|
||||
inkscape:transform-center-x="-4.7441149"
|
||||
id="gimp-grid"
|
||||
transform="matrix(1.4722143,0,0,1.4723149,0.22242684,1028.5839)">
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.69205183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
id="rect1908-2"
|
||||
width="15.610076"
|
||||
height="15.608502"
|
||||
x="0.19494273"
|
||||
y="0.19574897"
|
||||
rx="0.48743445"
|
||||
ry="0.48929465" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke-width:1.34783971"
|
||||
transform="matrix(0.74197001,0,0,0.74188598,3.0967936,268.53249)"
|
||||
id="g4592">
|
||||
<path
|
||||
d="m 11.999996,1028.7375 -5.2499975,4.1247 h 3.7499985 v 6 H 4.5000897 l -1.801e-4,-3.75 -4.12459101,5.25 4.12459101,5.052 v -3.552 h 6.0000874 v 6 H 6.7499985 l 5.2499975,4.1247 5.249998,-4.1247 h -3.749999 v -6 h 5.999998 v 3.948 l 4.124681,-5.448 -4.124681,-5.25 v 3.75 h -5.999998 v -6 h 3.749999 z"
|
||||
id="gimp-tool-move"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccc"
|
||||
stroke-miterlimit="10"
|
||||
style="color:#000000;display:inline;fill:#3465a4;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8313);stroke-width:1.01177597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none"
|
||||
inkscape:export-xdpi="123.75011"
|
||||
inkscape:export-ydpi="123.75011" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.44852567;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947"
|
||||
width="21.000269"
|
||||
height="0.74999964"
|
||||
x="1.500001"
|
||||
y="1039.9872" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.44852567;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947-0"
|
||||
width="21.000269"
|
||||
height="0.74999964"
|
||||
x="1029.8619"
|
||||
y="-12.374996"
|
||||
transform="rotate(90)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="-0.15930067"
|
||||
transform="matrix(1.2979666,-0.48616464,1.064361,0.59286793,-1074.8903,415.44856)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="0.15932022"
|
||||
transform="matrix(1.2979666,0.48616464,1.064361,-0.59286793,-1074.8695,1665.3571)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="-0.15932047"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(0.48616464,-1.2979666,-0.59286793,-1.064361,636.96143,2127.3281)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2-8"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.15932002"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(-0.48616464,-1.2979666,0.59286793,-1.064361,-612.94767,2127.2153)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
|
@ -13,7 +13,7 @@
|
|||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 1411.4984 384.2294"
|
||||
sodipodi:docname="color-scalable.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
id="svg"
|
||||
height="384.2294"
|
||||
width="1411.4984"
|
||||
|
@ -61,8 +61,8 @@
|
|||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-x="65"
|
||||
inkscape:cy="118.27566"
|
||||
inkscape:cx="616.06499"
|
||||
inkscape:cy="114.22313"
|
||||
inkscape:cx="593.4191"
|
||||
inkscape:zoom="1"
|
||||
showgrid="false"
|
||||
id="namedview88"
|
||||
|
@ -18359,6 +18359,26 @@
|
|||
offset="1"
|
||||
id="stop844" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8437"
|
||||
id="linearGradient27989"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0292666,0,0,1.0292666,-184.64471,711.74006)"
|
||||
x1="191.02673"
|
||||
y1="320.22839"
|
||||
x2="173.83766"
|
||||
y2="337.29449" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8437"
|
||||
id="linearGradient28650"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.5438992,0,0,1.5438992,-276.96693,541.42922)"
|
||||
x1="191.02673"
|
||||
y1="320.22839"
|
||||
x2="173.83766"
|
||||
y2="337.29449" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
|
@ -56028,6 +56048,246 @@
|
|||
id="rect18113"
|
||||
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-351.96097,-902.47774)"
|
||||
id="gimp-tool-offset">
|
||||
<g
|
||||
inkscape:transform-center-y="0.025736985"
|
||||
inkscape:transform-center-x="-4.7441149"
|
||||
id="gimp-grid-9"
|
||||
transform="matrix(0.96327079,0,0,0.96336725,0.2938523,1036.6552)">
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99999905;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
id="rect1908-2"
|
||||
width="15.610076"
|
||||
height="15.608502"
|
||||
x="0.19494273"
|
||||
y="0.19574897"
|
||||
rx="0.48743445"
|
||||
ry="0.48929465" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke-width:1.34784341"
|
||||
transform="matrix(0.74181427,0,0,0.74203773,2.0654856,269.40607)"
|
||||
id="g3960">
|
||||
<path
|
||||
d="m 8,1036.6124 -3.5,2.7498 H 7 v 4 H 3.0000601 l -1.201e-4,-2.5 -2.7497286,3.5 2.7497286,3.368 v -2.368 H 7 v 4 H 4.5 l 3.5,2.7498 3.5,-2.7498 H 9 v -4 h 4 v 2.632 l 2.749789,-3.632 -2.749789,-3.5 v 2.5 H 9 v -4 h 2.5 z"
|
||||
id="gimp-tool-move-1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccc"
|
||||
stroke-miterlimit="10"
|
||||
style="color:#000000;display:inline;fill:#3465a4;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient27989);stroke-width:0.67451942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none"
|
||||
inkscape:export-xdpi="123.75011"
|
||||
inkscape:export-ydpi="123.75011" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:1.63235557;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947-2"
|
||||
width="14.000186"
|
||||
height="0.5"
|
||||
x="1"
|
||||
y="1044.1122" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:1.63235557;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947-0-7"
|
||||
width="14.000186"
|
||||
height="0.5"
|
||||
x="1037.3621"
|
||||
y="-8.25"
|
||||
transform="rotate(90)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-09"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="-0.15930067"
|
||||
transform="matrix(0.86531148,-0.32410991,0.7095743,0.39524547,-716.63553,627.75291)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-3"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="0.15932022"
|
||||
transform="matrix(0.86531148,0.32410991,0.7095743,-0.39524547,-716.62169,1460.984)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2-6"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="-0.15932047"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(0.32410991,-0.86531148,-0.39524547,-0.7095743,424.64115,1769.0065)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2-8-0"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.15932002"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(-0.32410991,-0.86531148,0.39524547,-0.7095743,-408.63197,1768.9313)" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-160.06298,-902.30203)"
|
||||
id="gimp-tool-offset-6">
|
||||
<g
|
||||
inkscape:transform-center-y="0.025736985"
|
||||
inkscape:transform-center-x="-4.7441149"
|
||||
id="gimp-grid-18"
|
||||
transform="matrix(1.4722143,0,0,1.4723149,0.22242684,1028.5839)">
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.69205183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
id="rect1908-2-7"
|
||||
width="15.610076"
|
||||
height="15.608502"
|
||||
x="0.19494273"
|
||||
y="0.19574897"
|
||||
rx="0.48743445"
|
||||
ry="0.48929465" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke-width:1.34783971"
|
||||
transform="matrix(0.74197001,0,0,0.74188598,3.0967936,268.53249)"
|
||||
id="g4592">
|
||||
<path
|
||||
d="m 11.999996,1028.7375 -5.2499975,4.1247 h 3.7499985 v 6 H 4.5000897 l -1.801e-4,-3.75 -4.12459101,5.25 4.12459101,5.052 v -3.552 h 6.0000874 v 6 H 6.7499985 l 5.2499975,4.1247 5.249998,-4.1247 h -3.749999 v -6 h 5.999998 v 3.948 l 4.124681,-5.448 -4.124681,-5.25 v 3.75 h -5.999998 v -6 h 3.749999 z"
|
||||
id="gimp-tool-move-92"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccc"
|
||||
stroke-miterlimit="10"
|
||||
style="color:#000000;display:inline;fill:#3465a4;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient28650);stroke-width:1.01177597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none"
|
||||
inkscape:export-xdpi="123.75011"
|
||||
inkscape:export-ydpi="123.75011" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.44852567;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947-02"
|
||||
width="21.000269"
|
||||
height="0.74999964"
|
||||
x="1.500001"
|
||||
y="1039.9872" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.44852567;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947-0-3"
|
||||
width="21.000269"
|
||||
height="0.74999964"
|
||||
x="1029.8619"
|
||||
y="-12.374996"
|
||||
transform="rotate(90)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-7"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="-0.15930067"
|
||||
transform="matrix(1.2979666,-0.48616464,1.064361,0.59286793,-1074.8903,415.44856)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-5"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="0.15932022"
|
||||
transform="matrix(1.2979666,0.48616464,1.064361,-0.59286793,-1074.8695,1665.3571)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2-9"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="-0.15932047"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(0.48616464,-1.2979666,-0.59286793,-1.064361,636.96143,2127.3281)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69567943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2-8-2"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.15932002"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(-0.48616464,-1.2979666,0.59286793,-1.064361,-612.94767,2127.2153)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
|
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
|
@ -299,6 +299,7 @@ scalable_images = \
|
|||
scalable/gimp-tool-move.svg \
|
||||
scalable/gimp-tool-mypaint-brush.svg \
|
||||
scalable/gimp-tool-n-point-deformation.svg \
|
||||
scalable/gimp-tool-offset.svg \
|
||||
scalable/gimp-tool-options.svg \
|
||||
scalable/gimp-tool-paintbrush.svg \
|
||||
scalable/gimp-tool-path.svg \
|
||||
|
@ -474,6 +475,7 @@ vector24_images = \
|
|||
24/gimp-tool-mypaint-brush.svg \
|
||||
24/gimp-tool-measure.svg \
|
||||
24/gimp-tool-n-point-deformation.svg \
|
||||
24/gimp-tool-offset.svg \
|
||||
24/gimp-tool-options.svg \
|
||||
24/gimp-tool-paintbrush.svg \
|
||||
24/gimp-tool-path.svg \
|
||||
|
@ -763,6 +765,7 @@ icons16_images = \
|
|||
16/gimp-tool-move.png \
|
||||
16/gimp-tool-mypaint-brush.png \
|
||||
16/gimp-tool-n-point-deformation.png \
|
||||
16/gimp-tool-offset.png \
|
||||
16/gimp-tool-options.png \
|
||||
16/gimp-tool-paintbrush.png \
|
||||
16/gimp-tool-path.png \
|
||||
|
@ -974,6 +977,7 @@ icons24_images = \
|
|||
24/gimp-tool-move.png \
|
||||
24/gimp-tool-mypaint-brush.png \
|
||||
24/gimp-tool-n-point-deformation.png \
|
||||
24/gimp-tool-offset.png \
|
||||
24/gimp-tool-paintbrush.png \
|
||||
24/gimp-tool-path.png \
|
||||
24/gimp-tool-pencil.png \
|
||||
|
|
|
@ -0,0 +1,246 @@
|
|||
<?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:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
id="svg30571"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="gimp-tool-offset.svg"
|
||||
inkscape:export-xdpi="98.181816"
|
||||
inkscape:export-ydpi="98.181816">
|
||||
<title
|
||||
id="title7666">GIMP Offset Tool</title>
|
||||
<defs
|
||||
id="defs30573">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3204-1"
|
||||
id="linearGradient8313"
|
||||
x1="191.02673"
|
||||
y1="320.22839"
|
||||
x2="173.83766"
|
||||
y2="337.29449"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0292666,0,0,1.0292666,-184.64471,711.74006)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3204-1">
|
||||
<stop
|
||||
id="stop3206" />
|
||||
<stop
|
||||
offset="1"
|
||||
id="stop3208"
|
||||
stop-opacity="0" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="44.3125"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
showborder="false"
|
||||
inkscape:window-width="1535"
|
||||
inkscape:window-height="876"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
showguides="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4011" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata30576">
|
||||
<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>GIMP Offset Tool</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Klaus Staedtler</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<g
|
||||
id="gimp-tool-offset">
|
||||
<g
|
||||
inkscape:transform-center-y="0.025736985"
|
||||
inkscape:transform-center-x="-4.7441149"
|
||||
id="gimp-grid"
|
||||
transform="matrix(0.96327079,0,0,0.96336725,0.2938523,1036.6552)">
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99999905;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
|
||||
id="rect1908-2"
|
||||
width="15.610076"
|
||||
height="15.608502"
|
||||
x="0.19494273"
|
||||
y="0.19574897"
|
||||
rx="0.48743445"
|
||||
ry="0.48929465" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke-width:1.34784341"
|
||||
transform="matrix(0.74181427,0,0,0.74203773,2.0654856,269.40607)"
|
||||
id="g3960">
|
||||
<path
|
||||
d="m 8,1036.6124 -3.5,2.7498 H 7 v 4 H 3.0000601 l -1.201e-4,-2.5 -2.7497286,3.5 2.7497286,3.368 v -2.368 H 7 v 4 H 4.5 l 3.5,2.7498 3.5,-2.7498 H 9 v -4 h 4 v 2.632 l 2.749789,-3.632 -2.749789,-3.5 v 2.5 H 9 v -4 h 2.5 z"
|
||||
id="gimp-tool-move"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccc"
|
||||
stroke-miterlimit="10"
|
||||
style="color:#000000;display:inline;fill:#3465a4;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8313);stroke-width:0.67451942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none"
|
||||
inkscape:export-xdpi="123.75011"
|
||||
inkscape:export-ydpi="123.75011" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:1.63235557;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947"
|
||||
width="14.000186"
|
||||
height="0.5"
|
||||
x="1"
|
||||
y="1044.1122" />
|
||||
<rect
|
||||
style="opacity:0.33000004;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:1.63235557;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect3947-0"
|
||||
width="14.000186"
|
||||
height="0.5"
|
||||
x="1037.3621"
|
||||
y="-8.25"
|
||||
transform="rotate(90)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="-0.15930067"
|
||||
transform="matrix(0.86531148,-0.32410991,0.7095743,0.39524547,-716.63553,627.75291)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.013957276"
|
||||
inkscape:transform-center-y="0.15932022"
|
||||
transform="matrix(0.86531148,0.32410991,0.7095743,-0.39524547,-716.62169,1460.984)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="-0.15932047"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(0.32410991,-0.86531148,-0.39524547,-0.7095743,424.64115,1769.0065)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:0.5;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:2.69568682;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path3964-3-2-8"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="-8.0524263"
|
||||
sodipodi:cy="1030.9637"
|
||||
sodipodi:r1="1.2900716"
|
||||
sodipodi:r2="0.6450358"
|
||||
sodipodi:arg1="1.2298174"
|
||||
sodipodi:arg2="2.2770149"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m -7.6210137,1032.1795 -1.700032,-1.45 2.1058261,-0.7473 z"
|
||||
inkscape:transform-center-x="0.15932002"
|
||||
inkscape:transform-center-y="0.013928413"
|
||||
transform="matrix(-0.32410991,-0.86531148,0.39524547,-0.7095743,-408.63197,1768.9313)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 567 B |
After Width: | Height: | Size: 723 B |
|
@ -0,0 +1,161 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
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:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg30571"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="gimp-tool-offset.svg"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<title
|
||||
id="title4296">GIMP Offset Tool</title>
|
||||
<defs
|
||||
id="defs30573">
|
||||
<linearGradient
|
||||
id="linearGradient19282-4"
|
||||
osb:paint="solid"
|
||||
gradientTransform="matrix(0.34682586,0,0,0.30620888,-482.61525,330.965)">
|
||||
<stop
|
||||
style="stop-color:#bebebe;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19284-0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient19282-4"
|
||||
id="linearGradient9850"
|
||||
x1="-139"
|
||||
y1="68"
|
||||
x2="-125"
|
||||
y2="68"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.5714285,0,0,1.5714285,219.42856,933.50501)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient19282-4"
|
||||
id="linearGradient7060"
|
||||
x1="295.70312"
|
||||
y1="305.36914"
|
||||
x2="311.70312"
|
||||
y2="305.36914"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="24.375"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12.053195"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
showborder="true"
|
||||
inkscape:window-width="1535"
|
||||
inkscape:window-height="876"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
showguides="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4369" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata30576">
|
||||
<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>GIMP Offset Tool</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Klaus Staedtler</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1028.3622)">
|
||||
<g
|
||||
id="gimp-tool-offset">
|
||||
<rect
|
||||
y="1029.8622"
|
||||
x="1.5"
|
||||
height="21"
|
||||
width="21"
|
||||
id="rect3623"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bebebe;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<g
|
||||
inkscape:export-ydpi="123.75"
|
||||
inkscape:export-xdpi="123.75"
|
||||
transform="matrix(0.9999675,0,0,0.9999675,-96.996396,835.36912)"
|
||||
inkscape:label="gimp-tool-move"
|
||||
id="gimp-tool-move"
|
||||
style="display:inline;stroke-width:1.50000012">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path74740"
|
||||
transform="translate(-194.70344,-100.37001)"
|
||||
d="m 303.70338,297.3695 -3.33336,2.66678 h 2.66667 v 4.67756 c -1.34341,-0.0101 -3.32302,-0.0211 -4.66682,-0.0293 v -2.64822 l -2.66675,3.33344 2.66675,3.33344 v -2.66675 c 1.34376,-9e-5 3.32305,-0.003 4.66682,0 0,1.5556 0,3.11121 0,4.66681 h -2.66683 l 3.33352,2.66676 3.33344,-2.66676 h -2.66675 c 0,-1.5556 0,-3.11121 0,-4.66681 1.33334,9e-4 3.33349,0.004 4.66681,0 v 2.66675 l 2.66676,-3.33344 -2.66676,-3.33344 v 2.65018 c -1.33322,0.0235 -3.33298,0.0388 -4.66681,0.0351 v -4.68537 h 2.66675 z"
|
||||
style="fill:url(#linearGradient7060);fill-opacity:1;stroke:none;stroke-width:1.50000012" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
|
@ -0,0 +1,162 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
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:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 16.000518 16.000875"
|
||||
id="svg7384"
|
||||
height="16.000875"
|
||||
width="16.000519"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="gimp-tool-offset.svg">
|
||||
<title
|
||||
id="title8375">GIMP Offset Tool</title>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1535"
|
||||
inkscape:window-height="876"
|
||||
id="namedview1507"
|
||||
showgrid="false"
|
||||
inkscape:zoom="44.310075"
|
||||
inkscape:cx="8.0002594"
|
||||
inkscape:cy="8.0004377"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg7384" />
|
||||
<metadata
|
||||
id="metadata90">
|
||||
<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>GIMP Offset Tool</dc:title>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Barbara Muraus, Jakub Steiner, Klaus Staedtler</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:description>Images originally created as the "Art Libre" icon set. Extended and adopted for GIMP</dc:description>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs7386">
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient8074">
|
||||
<stop
|
||||
id="stop8072"
|
||||
offset="0"
|
||||
style="stop-color:#be00be;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient7561">
|
||||
<stop
|
||||
id="stop7558"
|
||||
offset="0"
|
||||
style="stop-color:#a5a5a5;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient7548">
|
||||
<stop
|
||||
id="stop7546"
|
||||
offset="0"
|
||||
style="stop-color:#ebebeb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
osb:paint="solid"
|
||||
id="linearGradient7542">
|
||||
<stop
|
||||
id="stop7538"
|
||||
offset="0"
|
||||
style="stop-color:#c9c9c9;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0,-735328.32,170712.69,0,2464326300,577972450)"
|
||||
osb:paint="solid"
|
||||
id="linearGradient19282">
|
||||
<stop
|
||||
id="stop19284"
|
||||
offset="0"
|
||||
style="stop-color:#b4b4b4;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.34682586,0,0,0.30620888,-53.35239,564.0385)"
|
||||
osb:paint="solid"
|
||||
id="linearGradient19282-4">
|
||||
<stop
|
||||
id="stop19284-0"
|
||||
offset="0"
|
||||
style="stop-color:#bebebe;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(299.26416,297.36914)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="305.36914"
|
||||
x2="311.70312"
|
||||
y1="305.36914"
|
||||
x1="295.70312"
|
||||
id="linearGradient7060"
|
||||
xlink:href="#linearGradient19282-4" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.625,0,0,0.62500005,5.22565,3.0008792)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="305.36914"
|
||||
x2="311.70312"
|
||||
y1="305.36914"
|
||||
x1="295.70312"
|
||||
id="linearGradient7060-0"
|
||||
xlink:href="#linearGradient19282-4" />
|
||||
</defs>
|
||||
<g
|
||||
id="gimp-tool-offset">
|
||||
<rect
|
||||
y="1.5008754"
|
||||
x="1.5"
|
||||
height="13"
|
||||
width="13"
|
||||
id="rect7909"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bebebe;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:url(#linearGradient7060-0);fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
d="M 8.0134312,3.000875 6.125,4.8856439 H 7.3945375 V 7.3990691 C 6.5549062,7.3927566 5.714875,7.3858816 4.875,7.3807566 V 6.134419 L 3,7.9935504 4.875,9.8795376 V 8.6258755 c 0.83985,-5.63e-5 1.6796812,-0.00188 2.5195375,0 V 9.8758751 11.128319 H 6.125 L 8.0134312,13.000875 9.875,11.128319 H 8.625 V 9.8758751 8.6258755 c 0.8333375,5.625e-4 1.666675,0.0025 2.5,0 V 9.8795376 L 13,7.9935504 11.125,6.134419 v 1.2475626 c -0.833263,0.014688 -1.6663559,0.02425 -2.5,0.021938 V 4.8856127 h 1.25 z"
|
||||
id="path74740" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
|
@ -15,7 +15,7 @@
|
|||
width="1322.0306"
|
||||
height="388.46494"
|
||||
id="svg7384"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="symbolic-scalable.svg"
|
||||
viewBox="0 0 1322.0306 388.46493">
|
||||
<metadata
|
||||
|
@ -26,7 +26,7 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:title></dc:title>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Barbara Muraus, Jakub Steiner, Klaus Staedtler</dc:title>
|
||||
|
@ -50,8 +50,8 @@
|
|||
id="namedview88"
|
||||
showgrid="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="788.00815"
|
||||
inkscape:cy="59.704507"
|
||||
inkscape:cx="866.02514"
|
||||
inkscape:cy="104.68616"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -18622,6 +18622,24 @@
|
|||
x2="808.99139"
|
||||
y2="211.67809"
|
||||
gradientTransform="matrix(0.99912557,0,0,1,-633.85747,-167.42187)" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.625,0,0,0.62500005,5.22565,3.0008792)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="305.36914"
|
||||
x2="311.70312"
|
||||
y1="305.36914"
|
||||
x1="295.70312"
|
||||
id="linearGradient7060-0"
|
||||
xlink:href="#linearGradient8670" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient19282-4"
|
||||
id="linearGradient12792"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="295.70312"
|
||||
y1="305.36914"
|
||||
x2="311.70312"
|
||||
y2="305.36914" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
|
@ -41474,6 +41492,50 @@
|
|||
id="rect22283"
|
||||
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="matrix(0.99912557,0,0,1,-365.07765,87.29202)"
|
||||
id="gimp-tool-offset">
|
||||
<rect
|
||||
y="1.5008754"
|
||||
x="1.5"
|
||||
height="13"
|
||||
width="13"
|
||||
id="rect7909"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bebebe;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:url(#linearGradient7060-0);fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
d="M 8.0134312,3.000875 6.125,4.8856439 H 7.3945375 V 7.3990691 C 6.5549062,7.3927566 5.714875,7.3858816 4.875,7.3807566 V 6.134419 L 3,7.9935504 4.875,9.8795376 V 8.6258755 c 0.83985,-5.63e-5 1.6796812,-0.00188 2.5195375,0 V 9.8758751 11.128319 H 6.125 L 8.0134312,13.000875 9.875,11.128319 H 8.625 V 9.8758751 8.6258755 c 0.8333375,5.625e-4 1.666675,0.0025 2.5,0 V 9.8795376 L 13,7.9935504 11.125,6.134419 v 1.2475626 c -0.833263,0.014688 -1.6663559,0.02425 -2.5,0.021938 V 4.8856127 h 1.25 z"
|
||||
id="path74740-6" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="matrix(0.99912557,0,0,1,-192.22893,-948.06929)"
|
||||
id="gimp-tool-offset-5">
|
||||
<rect
|
||||
y="1029.8622"
|
||||
x="1.5"
|
||||
height="21"
|
||||
width="21"
|
||||
id="rect3623"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bebebe;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<g
|
||||
inkscape:export-ydpi="123.75"
|
||||
inkscape:export-xdpi="123.75"
|
||||
transform="matrix(0.9999675,0,0,0.9999675,-96.996396,835.36912)"
|
||||
inkscape:label="gimp-tool-move"
|
||||
id="gimp-tool-move-3"
|
||||
style="display:inline;stroke-width:1.50000012">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path74740-5"
|
||||
transform="translate(-194.70344,-100.37001)"
|
||||
d="m 303.70338,297.3695 -3.33336,2.66678 h 2.66667 v 4.67756 c -1.34341,-0.0101 -3.32302,-0.0211 -4.66682,-0.0293 v -2.64822 l -2.66675,3.33344 2.66675,3.33344 v -2.66675 c 1.34376,-9e-5 3.32305,-0.003 4.66682,0 0,1.5556 0,3.11121 0,4.66681 h -2.66683 l 3.33352,2.66676 3.33344,-2.66676 h -2.66675 c 0,-1.5556 0,-3.11121 0,-4.66681 1.33334,9e-4 3.33349,0.004 4.66681,0 v 2.66675 l 2.66676,-3.33344 -2.66676,-3.33344 v 2.65018 c -1.33322,0.0235 -3.33298,0.0388 -4.66681,0.0351 v -4.68537 h 2.66675 z"
|
||||
style="fill:url(#linearGradient12792);fill-opacity:1;stroke:none;stroke-width:1.50000012" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
|
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
|
@ -362,6 +362,7 @@ G_BEGIN_DECLS
|
|||
#define GIMP_ICON_TOOL_MOVE "gimp-tool-move"
|
||||
#define GIMP_ICON_TOOL_MYPAINT_BRUSH "gimp-tool-mypaint-brush"
|
||||
#define GIMP_ICON_TOOL_N_POINT_DEFORMATION "gimp-tool-n-point-deformation"
|
||||
#define GIMP_ICON_TOOL_OFFSET "gimp-tool-offset"
|
||||
#define GIMP_ICON_TOOL_PAINTBRUSH "gimp-tool-paintbrush"
|
||||
#define GIMP_ICON_TOOL_PATH "gimp-tool-path"
|
||||
#define GIMP_ICON_TOOL_PENCIL "gimp-tool-pencil"
|
||||
|
|
|
@ -523,7 +523,7 @@
|
|||
<menuitem action="tools-rotate-arbitrary" />
|
||||
</placeholder>
|
||||
<separator />
|
||||
<menuitem action="drawable-offset" />
|
||||
<menuitem action="filters-offset" />
|
||||
</menu>
|
||||
|
||||
<!-- Layer Properties
|
||||
|
|
|
@ -229,7 +229,6 @@ app/dialogs/layer-add-mask-dialog.c
|
|||
app/dialogs/layer-options-dialog.c
|
||||
app/dialogs/lebl-dialog.c
|
||||
app/dialogs/module-dialog.c
|
||||
app/dialogs/offset-dialog.c
|
||||
app/dialogs/palette-import-dialog.c
|
||||
app/dialogs/preferences-dialog.c
|
||||
app/dialogs/print-size-dialog.c
|
||||
|
@ -470,6 +469,7 @@ app/tools/gimpmybrushoptions-gui.c
|
|||
app/tools/gimpmybrushtool.c
|
||||
app/tools/gimpnpointdeformationoptions.c
|
||||
app/tools/gimpnpointdeformationtool.c
|
||||
app/tools/gimpoffsettool.c
|
||||
app/tools/gimpoperationtool.c
|
||||
app/tools/gimppaintbrushtool.c
|
||||
app/tools/gimppaintoptions-gui.c
|
||||
|
|