From f6316285be6f78628006588c36698e9d1caf7b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Wed, 30 Jun 2010 20:27:52 +0200 Subject: [PATCH] structure of the cage tool, with an options object --- app/core/gimpcage.c | 5 +- app/core/gimpcage.h | 4 +- app/gegl/gimpoperationcage.c | 30 +++++- app/gegl/gimpoperationcage.h | 1 - app/tools/Makefile.am | 2 + app/tools/gimpcageoptions.c | 58 ++++++++++ app/tools/gimpcageoptions.h | 51 +++++++++ app/tools/gimpcagetool.c | 99 +++++++++++++++--- app/tools/gimpcagetool.h | 5 +- app/tools/makefile.msc | 1 + app/widgets/gimphelp-ids.h | 1 + libgimpwidgets/gimpstock.c | 3 + libgimpwidgets/gimpstock.h | 1 + themes/Default/images/Makefile.am | 2 + themes/Default/images/makefile.msc | 2 + .../images/tools/stock-tool-cage-16.png | Bin 0 -> 687 bytes .../images/tools/stock-tool-cage-22.png | Bin 0 -> 941 bytes .../images/tools/stock-tool-cage-22.xcf | Bin 0 -> 1791 bytes 18 files changed, 241 insertions(+), 24 deletions(-) create mode 100644 app/tools/gimpcageoptions.c create mode 100644 app/tools/gimpcageoptions.h create mode 100644 themes/Default/images/tools/stock-tool-cage-16.png create mode 100644 themes/Default/images/tools/stock-tool-cage-22.png create mode 100644 themes/Default/images/tools/stock-tool-cage-22.xcf diff --git a/app/core/gimpcage.c b/app/core/gimpcage.c index ccafad987d..57017fd2bc 100644 --- a/app/core/gimpcage.c +++ b/app/core/gimpcage.c @@ -1,6 +1,7 @@ /* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * Copyright (C) 1999 Adrian Likins and Tor Lillqvist + * + * gimpcage.c + * Copyright (C) 2010 Michael Muré * * 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 diff --git a/app/core/gimpcage.h b/app/core/gimpcage.h index 65aac2a3c3..0221af39cf 100644 --- a/app/core/gimpcage.h +++ b/app/core/gimpcage.h @@ -1,5 +1,7 @@ /* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattisbvf + * + * gimpcage.h + * Copyright (C) 2010 Michael Muré * * 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 diff --git a/app/gegl/gimpoperationcage.c b/app/gegl/gimpoperationcage.c index 1567d16894..f344269d52 100644 --- a/app/gegl/gimpoperationcage.c +++ b/app/gegl/gimpoperationcage.c @@ -1,5 +1,4 @@ /* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * gimpoperationcage.c * Copyright (C) 2010 Michael Muré @@ -35,7 +34,6 @@ static gboolean gimp_operation_cage_process (GeglOperation *operation, void *in_buf, void *out_buf, - glong samples, const GeglRectangle *roi); G_DEFINE_TYPE (GimpOperationCage, gimp_operation_cage, @@ -47,7 +45,16 @@ G_DEFINE_TYPE (GimpOperationCage, gimp_operation_cage, static void gimp_operation_cage_class_init (GimpOperationCageClass *klass) { - + GeglOperationClass *operation_class; + GeglOperationFilterClass *filter_class; + + operation_class = GEGL_OPERATION_CLASS (klass); + filter_class = GEGL_OPERATION_FILTER_CLASS (klass); + + operation_class->name = "gimp:cage"; + operation_class->description = "GIMP cage transform"; + + filter_class->process = gimp_operation_cage_process; } static void @@ -59,8 +66,21 @@ static gboolean gimp_operation_cage_process (GeglOperation *operation, void *in_buf, void *out_buf, - glong samples, const GeglRectangle *roi) { - + gfloat *in = in_buf; + gfloat *out = out_buf; + + /*while (samples--) + { + out[RED] = in[RED]; + out[GREEN] = in[GREEN]; + out[BLUE] = in[BLUE]; + out[ALPHA] = in[ALPHA]; + + in += 4; + out += 4; + }*/ + + return TRUE; } diff --git a/app/gegl/gimpoperationcage.h b/app/gegl/gimpoperationcage.h index 259d917907..544166d01c 100644 --- a/app/gegl/gimpoperationcage.h +++ b/app/gegl/gimpoperationcage.h @@ -1,5 +1,4 @@ /* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * gimpoperationcage.h * Copyright (C) 2010 Michael Muré diff --git a/app/tools/Makefile.am b/app/tools/Makefile.am index 015f1afa5c..51fd38203d 100644 --- a/app/tools/Makefile.am +++ b/app/tools/Makefile.am @@ -42,6 +42,8 @@ libapptools_a_sources = \ gimpbucketfilltool.h \ gimpbycolorselecttool.c \ gimpbycolorselecttool.h \ + gimpcageoptions.c \ + gimpcageoptions.h \ gimpcagetool.c \ gimpcagetool.h \ gimpclonetool.c \ diff --git a/app/tools/gimpcageoptions.c b/app/tools/gimpcageoptions.c new file mode 100644 index 0000000000..31d5419a58 --- /dev/null +++ b/app/tools/gimpcageoptions.c @@ -0,0 +1,58 @@ +/* GIMP - The GNU Image Manipulation Program + * + * gimpcageoptions.c + * Copyright (C) 2010 Michael Muré + * + * 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 . + */ + +#include "config.h" + +#include + +#include "libgimpconfig/gimpconfig.h" +#include "libgimpwidgets/gimpwidgets.h" + +#include "tools-types.h" + +#include "config/gimpcoreconfig.h" + +#include "core/gimp.h" +#include "core/gimptoolinfo.h" + +#include "widgets/gimpwidgets-utils.h" + +#include "gimpcagetool.h" +#include "gimpcageoptions.h" + +#include "gimp-intl.h" + + +G_DEFINE_TYPE (GimpCageOptions, gimp_cage_options, + GIMP_TYPE_TRANSFORM_OPTIONS) + +#define parent_class gimp_cage_options_parent_class + + +static void +gimp_cage_options_class_init (GimpCageOptionsClass *klass) +{ + +} + +static void +gimp_cage_options_init (GimpCageOptions *options) +{ + +} diff --git a/app/tools/gimpcageoptions.h b/app/tools/gimpcageoptions.h new file mode 100644 index 0000000000..72e1f441b2 --- /dev/null +++ b/app/tools/gimpcageoptions.h @@ -0,0 +1,51 @@ +/* GIMP - The GNU Image Manipulation Program + * + * gimpcageoptions.h + * Copyright (C) 2010 Michael Muré + * + * 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 . + */ + +#ifndef __GIMP_CAGE_OPTIONS_H__ +#define __GIMP_CAGE_OPTIONS_H__ + +#include "tools/gimptransformoptions.h" + + +#define GIMP_TYPE_CAGE_OPTIONS (gimp_cage_options_get_type ()) +#define GIMP_CAGE_OPTIONS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_CAGE_OPTIONS, GimpCageOptions)) +#define GIMP_CAGE_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_CAGE_OPTIONS, GimpCageOptionsClass)) +#define GIMP_IS_CAGE_OPTIONS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CAGE_OPTIONS)) +#define GIMP_IS_CAGE_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CAGE_OPTIONS)) +#define GIMP_CAGE_OPTIONS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CAGE_OPTIONS, GimpCageOptionsClass)) + + +typedef struct _GimpCageOptionsClass GimpCageOptionsClass; +typedef struct _GimpCageOptions GimpCageOptions; + +struct _GimpCageOptions +{ + GimpTransformOptions parent_instance; +}; + + +struct _GimpCageOptionsClass +{ + GimpToolOptionsClass parent_class; +}; + + +GType gimp_cage_options_get_type (void) G_GNUC_CONST; + +#endif /* __GIMP_CAGE_OPTIONS_H__ */ \ No newline at end of file diff --git a/app/tools/gimpcagetool.c b/app/tools/gimpcagetool.c index 98560b95bb..846719eeaf 100644 --- a/app/tools/gimpcagetool.c +++ b/app/tools/gimpcagetool.c @@ -1,5 +1,7 @@ /* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995-2001 Spencer Kimball, Peter Mattis, and others + * + * gimpcagetool.c + * Copyright (C) 2010 Michael Muré * * 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 @@ -30,17 +32,29 @@ #include "core/gimp-transform-utils.h" - #include "widgets/gimphelp-ids.h" - - #include "gimpcagetool.h" +#include "gimpcageoptions.h" -#include "gimptransformoptions.h" #include "gimp-intl.h" +static void gimp_cage_tool_finalize (GObject *object); +static void gimp_cage_tool_button_press (GimpTool *tool, + const GimpCoords *coords, + guint32 time, + GdkModifierType state, + GimpButtonPressType press_type, + GimpDisplay *display); +static void gimp_cage_tool_button_release (GimpTool *tool, + const GimpCoords *coords, + guint32 time, + GdkModifierType state, + GimpButtonReleaseType release_type, + GimpDisplay *display); +static void gimp_cage_tool_draw (GimpDrawTool *draw_tool); + G_DEFINE_TYPE (GimpCageTool, gimp_cage_tool, GIMP_TYPE_TRANSFORM_TOOL) @@ -52,22 +66,32 @@ gimp_cage_tool_register (GimpToolRegisterCallback callback, gpointer data) { (* callback) (GIMP_TYPE_CAGE_TOOL, - GIMP_TYPE_TRANSFORM_OPTIONS, - gimp_transform_options_gui, - GIMP_CONTEXT_BACKGROUND_MASK, + GIMP_TYPE_CAGE_OPTIONS, + 0, //options_gui_func + 0, //context_props "gimp-cage-tool", - _("Rotate"), - _("Rotate Tool: Rotate the layer, selection or path"), - N_("_Rotate"), "R", - NULL, GIMP_HELP_TOOL_ROTATE, - GIMP_STOCK_TOOL_ROTATE, + _("Cage Transform"), + _("Cage Transform: Deform a selection with a cage"), + N_("_Cage Transform"), "R", + NULL, GIMP_HELP_TOOL_CAGE, + GIMP_STOCK_TOOL_CAGE, data); } static void gimp_cage_tool_class_init (GimpCageToolClass *klass) { - + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass); + GimpDrawToolClass *draw_tool_class = GIMP_DRAW_TOOL_CLASS (klass); + GimpTransformToolClass *transformtool_class = GIMP_TRANSFORM_TOOL_CLASS (klass); + + object_class->finalize = gimp_cage_tool_finalize; + + tool_class->button_press = gimp_cage_tool_button_press; + tool_class->button_release = gimp_cage_tool_button_release; + + draw_tool_class->draw = gimp_cage_tool_draw; } static void @@ -77,3 +101,50 @@ gimp_cage_tool_init (GimpCageTool *self) } +static void +gimp_cage_tool_finalize (GObject *object) +{ + GimpCageTool *ct = GIMP_CAGE_TOOL (object); + //GimpCageToolPrivate *priv = GET_PRIVATE (ct); + + /*g_free (priv->points); + g_free (priv->segment_indices); + g_free (priv->saved_points_lower_segment); + g_free (priv->saved_points_higher_segment);*/ + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void gimp_cage_tool_button_press (GimpTool *tool, + const GimpCoords *coords, + guint32 time, + GdkModifierType state, + GimpButtonPressType press_type, + GimpDisplay *display) +{ + + +} + +static void gimp_cage_tool_button_release (GimpTool *tool, + const GimpCoords *coords, + guint32 time, + GdkModifierType state, + GimpButtonReleaseType release_type, + GimpDisplay *display) +{ + +} + +static void gimp_cage_tool_draw (GimpDrawTool *draw_tool) +{ + GimpCageTool *fst = GIMP_CAGE_TOOL (draw_tool); + //GimpCageToolPrivate *priv = GET_PRIVATE (fst); + GimpTool *tool = GIMP_TOOL (draw_tool); + + gimp_draw_tool_draw_line(draw_tool, 10, 10, 10, 40, FALSE); + gimp_draw_tool_draw_line(draw_tool, 10, 40, 40, 40, FALSE); + gimp_draw_tool_draw_line(draw_tool, 40, 40, 40, 10, FALSE); + gimp_draw_tool_draw_line(draw_tool, 40, 10, 10, 10, FALSE); + +} \ No newline at end of file diff --git a/app/tools/gimpcagetool.h b/app/tools/gimpcagetool.h index 055f3fcc79..4a681071c5 100644 --- a/app/tools/gimpcagetool.h +++ b/app/tools/gimpcagetool.h @@ -1,5 +1,7 @@ /* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995-2001 Spencer Kimball, Peter Mattis, and others + * + * gimpcagetool.h + * Copyright (C) 2010 Michael Muré * * 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 @@ -28,6 +30,7 @@ #define GIMP_IS_CAGE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CAGE_TOOL)) #define GIMP_CAGE_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CAGE_TOOL, GimpCageToolClass)) +#define GIMP_CAGE_TOOL_GET_OPTIONS(t) (GIMP_CAGE_OPTIONS (gimp_tool_get_options (GIMP_TOOL (t)))) typedef struct _GimpCageToolClass GimpCageToolClass; typedef struct _GimpCageTool GimpCageTool; diff --git a/app/tools/makefile.msc b/app/tools/makefile.msc index 9a1c8bc8e3..afe5c20d9d 100644 --- a/app/tools/makefile.msc +++ b/app/tools/makefile.msc @@ -37,6 +37,7 @@ OBJECTS = \ gimpbucketfilltool.obj \ gimpbycolorselecttool.obj \ gimpcagetool.obj \ + gimpcageoptions.obj \ gimpclonetool.obj \ gimpcolorbalancetool.obj \ gimpcolorizetool.obj \ diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h index e8054dd5b4..528bb82d1a 100644 --- a/app/widgets/gimphelp-ids.h +++ b/app/widgets/gimphelp-ids.h @@ -246,6 +246,7 @@ #define GIMP_HELP_TOOL_BRIGHTNESS_CONTRAST "gimp-tool-brightness-contrast" #define GIMP_HELP_TOOL_BUCKET_FILL "gimp-tool-bucket-fill" #define GIMP_HELP_TOOL_BY_COLOR_SELECT "gimp-tool-by-color-select" +#define GIMP_HELP_TOOL_CAGE "gimp-tool-cage" #define GIMP_HELP_TOOL_CLONE "gimp-tool-clone" #define GIMP_HELP_TOOL_COLORIZE "gimp-tool-colorize" #define GIMP_HELP_TOOL_COLOR_BALANCE "gimp-tool-color-balance" diff --git a/libgimpwidgets/gimpstock.c b/libgimpwidgets/gimpstock.c index 8aaf949d1c..d57ffab9a1 100644 --- a/libgimpwidgets/gimpstock.c +++ b/libgimpwidgets/gimpstock.c @@ -289,6 +289,7 @@ static const GtkStockItem gimp_stock_items[] = { GIMP_STOCK_TOOL_BRIGHTNESS_CONTRAST, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TOOL_BUCKET_FILL, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TOOL_BY_COLOR_SELECT, NULL, 0, 0, LIBGIMP_DOMAIN }, + { GIMP_STOCK_TOOL_CAGE, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TOOL_CLONE, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TOOL_COLOR_BALANCE, NULL, 0, 0, LIBGIMP_DOMAIN }, { GIMP_STOCK_TOOL_COLOR_PICKER, NULL, 0, 0, LIBGIMP_DOMAIN }, @@ -441,6 +442,7 @@ gimp_stock_button_pixbufs[] = { GIMP_STOCK_TOOL_BRIGHTNESS_CONTRAST, stock_tool_brightness_contrast_22 }, { GIMP_STOCK_TOOL_BUCKET_FILL, stock_tool_bucket_fill_22 }, { GIMP_STOCK_TOOL_BY_COLOR_SELECT, stock_tool_by_color_select_22 }, + { GIMP_STOCK_TOOL_CAGE, stock_tool_cage_22 }, { GIMP_STOCK_TOOL_CLONE, stock_tool_clone_22 }, { GIMP_STOCK_TOOL_COLOR_BALANCE, stock_tool_color_balance_22 }, { GIMP_STOCK_TOOL_COLOR_PICKER, stock_tool_color_picker_22 }, @@ -605,6 +607,7 @@ gimp_stock_menu_pixbufs[] = { GIMP_STOCK_TOOL_BRIGHTNESS_CONTRAST, stock_tool_brightness_contrast_16 }, { GIMP_STOCK_TOOL_BUCKET_FILL, stock_tool_bucket_fill_16 }, { GIMP_STOCK_TOOL_BY_COLOR_SELECT, stock_tool_by_color_select_16 }, + { GIMP_STOCK_TOOL_CAGE, stock_tool_cage_16 }, { GIMP_STOCK_TOOL_CLONE, stock_tool_clone_16 }, { GIMP_STOCK_TOOL_COLOR_BALANCE, stock_tool_color_balance_16 }, { GIMP_STOCK_TOOL_COLOR_PICKER, stock_tool_color_picker_16 }, diff --git a/libgimpwidgets/gimpstock.h b/libgimpwidgets/gimpstock.h index f51389b1a5..e4c2727194 100644 --- a/libgimpwidgets/gimpstock.h +++ b/libgimpwidgets/gimpstock.h @@ -104,6 +104,7 @@ G_BEGIN_DECLS #define GIMP_STOCK_TOOL_BRIGHTNESS_CONTRAST "gimp-tool-brightness-contrast" #define GIMP_STOCK_TOOL_BUCKET_FILL "gimp-tool-bucket-fill" #define GIMP_STOCK_TOOL_BY_COLOR_SELECT "gimp-tool-by-color-select" +#define GIMP_STOCK_TOOL_CAGE "gimp-tool-cage" #define GIMP_STOCK_TOOL_CLONE "gimp-tool-clone" #define GIMP_STOCK_TOOL_COLOR_BALANCE "gimp-tool-color-balance" #define GIMP_STOCK_TOOL_COLOR_PICKER "gimp-tool-color-picker" diff --git a/themes/Default/images/Makefile.am b/themes/Default/images/Makefile.am index d8aec5aed5..cddb4a242a 100644 --- a/themes/Default/images/Makefile.am +++ b/themes/Default/images/Makefile.am @@ -273,6 +273,8 @@ STOCK_TOOL_IMAGES = \ tools/stock-tool-bucket-fill-22.png \ tools/stock-tool-by-color-select-16.png \ tools/stock-tool-by-color-select-22.png \ + tools/stock-tool-cage-16.png \ + tools/stock-tool-cage-22.png \ tools/stock-tool-clone-16.png \ tools/stock-tool-clone-22.png \ tools/stock-tool-color-balance-16.png \ diff --git a/themes/Default/images/makefile.msc b/themes/Default/images/makefile.msc index d98d927b9b..c09730a0de 100644 --- a/themes/Default/images/makefile.msc +++ b/themes/Default/images/makefile.msc @@ -246,6 +246,8 @@ STOCK_TOOL_VARIABLES = \ stock_tool_bucket_fill_22 tools/stock-tool-bucket-fill-22.png \ stock_tool_by_color_select_16 tools/stock-tool-by-color-select-16.png \ stock_tool_by_color_select_22 tools/stock-tool-by-color-select-22.png \ + stock_tool_cage_16 tools/stock-tool-cage-16.png \ + stock_tool_cage_22 tools/stock-tool-cage-22.png \ stock_tool_clone_16 tools/stock-tool-clone-16.png \ stock_tool_clone_22 tools/stock-tool-clone-22.png \ stock_tool_color_balance_16 tools/stock-tool-color-balance-16.png \ diff --git a/themes/Default/images/tools/stock-tool-cage-16.png b/themes/Default/images/tools/stock-tool-cage-16.png new file mode 100644 index 0000000000000000000000000000000000000000..d56034f69727e3d52a32aefaff186762ebc7214e GIT binary patch literal 687 zcmV;g0#N;lP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igW4 z4KD*}Gji$x001>~MObu0Z*6U5Zgc=BV<{jqFfcSAN?~htVjxp=Wod3@ataDVa%Ew3 zWn>_CX>@2HRA^-&M@dakklBlG0005*Nklzwaq71DLQ0vazsei3;*=u+UdoBqqeS;orr@d?Xn#Yt6o>U%&sTaImv6^73%1 z`{wpVkmN5uZqEOiVb1>_@1C^9(?=Oe6Ln8wN1Gl-3a>Uoq z-%5D6*fnn4dv<%-_G8Z&-yWVR{rB%bPgWM@=TgquTfYDNjWc$REUKR-AM z#hZ^TakbJ-VEX&_Uo-W@@}TFum!)j)~d)Je>a-7#M!YNeaLJ|9YqU|No~9IM`YLGcYjxf(9hcsD}YX z4tCa`c~S2FFRp3-yQVk)zlpZue+CAI7r0U`x@q^-91PcUva>Pq^Kvl+I-Axp zFfiys<^L1R3;*BlV!V0ulEtp$m!>iNXSf#WWmzCBHrW6G literal 0 HcmV?d00001 diff --git a/themes/Default/images/tools/stock-tool-cage-22.png b/themes/Default/images/tools/stock-tool-cage-22.png new file mode 100644 index 0000000000000000000000000000000000000000..f7dd1fc41b813d740744cc55992c940d844c4d59 GIT binary patch literal 941 zcmV;e15*5nP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igW4 z4K6M<_aEK>001>~MObu0Z*6U5Zgc=BV<{jqFfcSAN?~htVjxp=Wod3@ataDVa%Ew3 zWn>_CX>@2HRA^-&M@dakklBlG0008)Nkl6_s)1nB`=>6D8cVi1{Q4k_6DhPsF6y`un6)LHfMoE&4B@&1d{_g<)GGvdNDK6a0Z6}8b0jQps@n+5X7EgHRmn;m! zJj=_pzY;`gB@{3p;y#7r*xOdK;7Ya_F+4WoT3Pj%0`Pf++m}$g&KkTWjMZ7X0J#^cl^=x`uA z70whZE*ulDYgBwwtS+iY5T!LfP!R_p0>FwOO6%ctBzxRkNyUBTL(?7Q1H zG@j|OnXdwvVr7rpswm{Fe{H>Te0r`d(HI*p1?-ClSI(FXdg!AgVH9-uGBSC-vuDU8 zd)y4KD5Q{3Qb7nwADx`l7UZO%p}7Nu&`_)^g=M$u&mAcM08C7Kp^Mg5J5v(J1W}?a z1x;re))ApmYwcDOb|uB5{FEypRJnpEk^Z4^)Hb%^QT-bvB^r(wvb zCX@`Ut*)mJj!bI%hQ`s*+%XoMZ(#mB0DnLg8{{sn_|ernjFu;rDgZib6^VB}N8JuP$2q&bP4qi(Ca!`u*npqzVN9)yG8Q z=)r817Ud!@!#?ox?MFvl<9oDs4}`U~LE$TcC@ls+A$#0hOk@O{b_@2T+Q4(1BRee# z4x1Tj6(80*Gg}ytVQSWQd1h{*$`Bia?*3ue;&)th*y8Jg1#H{h0wno(j%ym7lxv^9 zZpX~rLbWzR{UIFCP=4%>(?xX}<8;?#@8UgMg5jIRB*=gDTMC-ce-YmSk#r$mkoxp{ P00000NkvXXu0mjf4NjNU literal 0 HcmV?d00001 diff --git a/themes/Default/images/tools/stock-tool-cage-22.xcf b/themes/Default/images/tools/stock-tool-cage-22.xcf new file mode 100644 index 0000000000000000000000000000000000000000..cc233f7f00f13cea6f6322c7c5381c1bc7f23671 GIT binary patch literal 1791 zcmchXe`s4(6vt1}eg zA6hM~KdLLXn@jibk80_lP$!*JT*n|yGt{ZbM3__sVQh?~OHpgdlC8&clJ`c775vK! zC--~LJ?Gp{?z{K;^ZG=e+$90E&6=^kkIZ18pDkq8ruR%Au#w(MW+K}_woTI< zS55Jq)Nk}tS*JG?2uMMN#=w)i9Ns!{kK5fSKJDp@wu#Rvk{p!6cKiOYFlR7MVX{F2ijmfP7!l?+x#M2UAvq8wDDa76Mdawr(7vpal#Z>TF2 z79FL|8TPk%ME5RtsjVY+Yg2WU+O|%rJ}>^e;M7>8+vAmkez9SXUeNA{ujkZ!&S+3p z2;SQvF?B5D^F<`(9w52m|8$i-Yg2hYv}TwGFw5nE@T}(4za{T}Ws}F-=?{mZ!O}Jw zwGe@N{*p*$)ij6OG)*1UuG02Zx^k7~lfZSjZ6wq6CemD2Zx#~zoPLUQ7Me1?uLbJp z6locC`aRsd8%0E^pUjORMG%b_QLH5@hU#<{+Vc=@+$AffQD9Q|lD*4)higLIO ziWbZ+f*qFk4qrZpw=#=13RzD7@rtKYi z>rgzAc-6tQ^tpHX<)fGw?QdXOW9>l*zU><&7p+|)G|^*JG}OOPLyH#be_r{fiW3JA|L~D8VDTJcit?6HI0&`4a_NDs zMxwa$Aq|bNG>ACe2sP~o5$Rn1brNyB;^ig0t>rJT9)T&!3xYqiFCwSazfShIv)blH%=Tsl|L|%$YV!I?p z<|ez!uQccA*I)nBz2y5ZPfwMW%iG6`Xu$d_!fvezS4rp`