[gimp/mypaint-brush: 1/6] app: first draft of GimpMybrushTool, which uses MyPaint brushes



commit 1e1f27124d8a30702dc61a76906bdd9382b2e8ad
Author: Michael Natterer <mitch gimp org>
Date:   Sun Apr 6 15:48:53 2014 +0200

    app: first draft of GimpMybrushTool, which uses MyPaint brushes

 app/Makefile.am                                    |    2 +
 app/paint/Makefile.am                              |   60 +++++-
 app/paint/gimp-paint.c                             |    2 +
 app/paint/gimpmybrush.c                            |  226 ++++++++++++++++++++
 app/paint/gimpmybrush.h                            |   55 +++++
 app/paint/gimpmybrushoptions.c                     |  136 ++++++++++++
 app/paint/gimpmybrushoptions.h                     |   53 +++++
 app/paint/paint-types.h                            |    2 +
 app/tools/Makefile.am                              |    4 +
 app/tools/gimp-tools.c                             |    6 +
 app/tools/gimpmybrushoptions-gui.c                 |  166 ++++++++++++++
 app/tools/gimpmybrushoptions-gui.h                 |   25 +++
 app/tools/gimpmybrushtool.c                        |   77 +++++++
 app/tools/gimpmybrushtool.h                        |   53 +++++
 app/widgets/gimphelp-ids.h                         |    1 +
 configure.ac                                       |   13 +-
 libgimpwidgets/gimpstock.c                         |    3 +
 libgimpwidgets/gimpstock.h                         |    1 +
 menus/image-menu.xml.in                            |    1 +
 themes/Default/images/Makefile.am                  |    2 +
 .../Default/images/tools/stock-tool-mybrush-16.png |  Bin 0 -> 3474 bytes
 .../Default/images/tools/stock-tool-mybrush-22.png |  Bin 0 -> 3469 bytes
 22 files changed, 877 insertions(+), 11 deletions(-)
---
diff --git a/app/Makefile.am b/app/Makefile.am
index b145419..ca7441b 100644
--- a/app/Makefile.am
+++ b/app/Makefile.am
@@ -162,6 +162,7 @@ gimpconsoleldadd = \
        file/libappfile.a               \
        text/libapptext.a               \
        paint/libapppaint.a             \
+       paint/libmypaint.a              \
        operations/libappoperations.a   \
        gegl/libappgegl.a               \
        config/libappconfig.a           \
@@ -181,6 +182,7 @@ gimpconsoleldadd = \
        $(GLIB_LIBS)                    \
        $(GEXIV2_LIBS)                  \
        $(LCMS_LIBS)                    \
+       $(JSON_C_LIBS)                  \
        $(INTLLIBS)                     \
        $(RT_LIBS)
 
diff --git a/app/paint/Makefile.am b/app/paint/Makefile.am
index b1da3e2..c678cc5 100644
--- a/app/paint/Makefile.am
+++ b/app/paint/Makefile.am
@@ -1,17 +1,55 @@
 ## Process this file with automake to produce Makefile.in
 
 AM_CPPFLAGS = \
-       -DG_LOG_DOMAIN=\"Gimp-Paint\"   \
-       -I$(top_builddir)               \
-       -I$(top_srcdir)                 \
-       -I$(top_builddir)/app           \
-       -I$(top_srcdir)/app             \
-       $(CAIRO_CFLAGS)                 \
-       $(GEGL_CFLAGS)                  \
-       $(GDK_PIXBUF_CFLAGS)            \
+       -DG_LOG_DOMAIN=\"Gimp-Paint\"           \
+       -I$(top_builddir)                       \
+       -I$(top_srcdir)                         \
+       -I$(top_builddir)/app                   \
+       -I$(top_srcdir)/app                     \
+       -I$(top_srcdir)/app/paint/libmypaint    \
+       -std=c99                                \
+       -DHAVE_JSON_C=1                         \
+       $(JSON_C_CFLAGS)                        \
+       $(CAIRO_CFLAGS)                         \
+       $(GEGL_CFLAGS)                          \
+       $(GDK_PIXBUF_CFLAGS)                    \
        -I$(includedir)
 
-noinst_LIBRARIES = libapppaint.a
+noinst_LIBRARIES = libmypaint.a libapppaint.a
+
+libmypaint_a_SOURCES = \
+       libmypaint/mapping.c                            \
+       libmypaint/mapping.h                            \
+       libmypaint/helpers.c                            \
+       libmypaint/helpers.h                            \
+       libmypaint/brushmodes.c                         \
+       libmypaint/brushmodes.h                         \
+       libmypaint/fifo.c                               \
+       libmypaint/fifo.h                               \
+       libmypaint/operationqueue.c                     \
+       libmypaint/operationqueue.h                     \
+       libmypaint/rng-double.c                         \
+       libmypaint/rng-double.h                         \
+       libmypaint/utils.c                              \
+       libmypaint/utils.h                              \
+       libmypaint/tilemap.c                            \
+       libmypaint/tilemap.h                            \
+       libmypaint/mypaint.c                            \
+       libmypaint/mypaint.h                            \
+       libmypaint/mypaint-brush.c                      \
+       libmypaint/mypaint-brush.h                      \
+       libmypaint/mypaint-brush-settings.c             \
+       libmypaint/mypaint-brush-settings.h             \
+       libmypaint/mypaint-fixed-tiled-surface.c        \
+       libmypaint/mypaint-fixed-tiled-surface.h        \
+       libmypaint/mypaint-surface.c                    \
+       libmypaint/mypaint-surface.h                    \
+       libmypaint/mypaint-tiled-surface.c              \
+       libmypaint/mypaint-tiled-surface.h              \
+       libmypaint/mypaint-rectangle.c                  \
+       libmypaint/mypaint-rectangle.h                  \
+       libmypaint/gegl/mypaint-gegl-surface.c          \
+       libmypaint/gegl/mypaint-gegl-surface.h
 
 libapppaint_a_sources = \
        paint-enums.h                   \
@@ -51,6 +89,10 @@ libapppaint_a_sources = \
        gimpinkoptions.h                \
        gimpinkundo.c                   \
        gimpinkundo.h                   \
+       gimpmybrush.c                   \
+       gimpmybrush.h                   \
+       gimpmybrushoptions.c            \
+       gimpmybrushoptions.h            \
        gimppaintcore.c                 \
        gimppaintcore.h                 \
        gimppaintcore-loops.c           \
diff --git a/app/paint/gimp-paint.c b/app/paint/gimp-paint.c
index 28c721b..1cc0215 100644
--- a/app/paint/gimp-paint.c
+++ b/app/paint/gimp-paint.c
@@ -34,6 +34,7 @@
 #include "gimperaser.h"
 #include "gimpheal.h"
 #include "gimpink.h"
+#include "gimpmybrush.h"
 #include "gimppaintoptions.h"
 #include "gimppaintbrush.h"
 #include "gimppencil.h"
@@ -64,6 +65,7 @@ gimp_paint_init (Gimp *gimp)
     gimp_perspective_clone_register,
     gimp_heal_register,
     gimp_clone_register,
+    gimp_mybrush_register,
     gimp_ink_register,
     gimp_airbrush_register,
     gimp_eraser_register,
diff --git a/app/paint/gimpmybrush.c b/app/paint/gimpmybrush.c
new file mode 100644
index 0000000..aee5bba
--- /dev/null
+++ b/app/paint/gimpmybrush.c
@@ -0,0 +1,226 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <cairo.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gegl.h>
+
+#include "libmypaint/mypaint-brush.h"
+#include "libmypaint/mypaint-tiled-surface.h"
+#include "libmypaint/gegl/mypaint-gegl-surface.h"
+
+#include "libgimpmath/gimpmath.h"
+#include "libgimpcolor/gimpcolor.h"
+
+#include "paint-types.h"
+
+#include "gegl/gimp-gegl-utils.h"
+
+#include "core/gimpdrawable.h"
+#include "core/gimpimage.h"
+#include "core/gimpimage-undo.h"
+#include "core/gimptempbuf.h"
+
+#include "gimpmybrushoptions.h"
+#include "gimpmybrush.h"
+
+#include "gimp-intl.h"
+
+
+struct _GimpMybrushPrivate
+{
+  MyPaintGeglTiledSurface *surface;
+  MyPaintBrush            *brush;
+};
+
+
+/*  local function prototypes  */
+
+static void   gimp_mybrush_paint  (GimpPaintCore    *paint_core,
+                                   GimpDrawable     *drawable,
+                                   GimpPaintOptions *paint_options,
+                                   const GimpCoords *coords,
+                                   GimpPaintState    paint_state,
+                                   guint32           time);
+static void   gimp_mybrush_motion (GimpPaintCore    *paint_core,
+                                   GimpDrawable     *drawable,
+                                   GimpPaintOptions *paint_options,
+                                   const GimpCoords *coords,
+                                   guint32           time);
+
+
+G_DEFINE_TYPE (GimpMybrush, gimp_mybrush, GIMP_TYPE_PAINT_CORE)
+
+#define parent_class gimp_mybrush_parent_class
+
+
+void
+gimp_mybrush_register (Gimp                      *gimp,
+                       GimpPaintRegisterCallback  callback)
+{
+  (* callback) (gimp,
+                GIMP_TYPE_MYBRUSH,
+                GIMP_TYPE_MYBRUSH_OPTIONS,
+                "gimp-mybrush",
+                _("Mybrush"),
+                "gimp-tool-mybrush");
+}
+
+static void
+gimp_mybrush_class_init (GimpMybrushClass *klass)
+{
+  GimpPaintCoreClass *paint_core_class = GIMP_PAINT_CORE_CLASS (klass);
+
+  paint_core_class->paint = gimp_mybrush_paint;
+
+  g_type_class_add_private (klass, sizeof (GimpMybrushPrivate));
+}
+
+static void
+gimp_mybrush_init (GimpMybrush *mybrush)
+{
+  mybrush->private = G_TYPE_INSTANCE_GET_PRIVATE (mybrush,
+                                                  GIMP_TYPE_MYBRUSH,
+                                                  GimpMybrushPrivate);
+}
+
+static void
+gimp_mybrush_paint (GimpPaintCore    *paint_core,
+                    GimpDrawable     *drawable,
+                    GimpPaintOptions *paint_options,
+                    const GimpCoords *coords,
+                    GimpPaintState    paint_state,
+                    guint32           time)
+{
+  GimpMybrush        *mybrush = GIMP_MYBRUSH (paint_core);
+  GimpMybrushOptions *options = GIMP_MYBRUSH_OPTIONS (paint_options);
+
+  switch (paint_state)
+    {
+    case GIMP_PAINT_STATE_INIT:
+      mybrush->private->surface = mypaint_gegl_tiled_surface_new ();
+      mypaint_gegl_tiled_surface_set_buffer (mybrush->private->surface,
+                                             gimp_drawable_get_buffer (drawable));
+
+      mybrush->private->brush = mypaint_brush_new ();
+      mypaint_brush_from_defaults (mybrush->private->brush);
+
+      if (options->mybrush)
+        {
+          gchar *string;
+          gsize  length;
+
+          if (g_file_get_contents (options->mybrush,
+                                   &string, &length, NULL))
+            {
+              if (! mypaint_brush_from_string (mybrush->private->brush, string))
+                g_printerr ("Failed to deserialize MyPaint brush\n");
+
+              g_free (string);
+            }
+        }
+
+      mypaint_brush_new_stroke (mybrush->private->brush);
+      break;
+
+    case GIMP_PAINT_STATE_MOTION:
+      gimp_mybrush_motion (paint_core, drawable, paint_options, coords, time);
+      break;
+
+    case GIMP_PAINT_STATE_FINISH:
+      mypaint_surface_unref ((MyPaintSurface *) mybrush->private->surface);
+      mybrush->private->surface = NULL;
+
+      mypaint_brush_unref (mybrush->private->brush);
+      mybrush->private->brush = NULL;
+      break;
+    }
+}
+
+static void
+gimp_mybrush_motion (GimpPaintCore    *paint_core,
+                     GimpDrawable     *drawable,
+                     GimpPaintOptions *paint_options,
+                     const GimpCoords *coords,
+                     guint32           time)
+{
+  GimpMybrush        *mybrush = GIMP_MYBRUSH (paint_core);
+  GimpMybrushOptions *options = GIMP_MYBRUSH_OPTIONS (paint_options);
+  GimpContext        *context = GIMP_CONTEXT (paint_options);
+  GimpComponentMask   active_mask;
+  GimpRGB             fg;
+  GimpHSV             hsv;
+  MyPaintRectangle    rect;
+
+  active_mask = gimp_drawable_get_active_mask (drawable);
+
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_LOCK_ALPHA,
+                                (active_mask & GIMP_COMPONENT_ALPHA) ?
+                                FALSE : TRUE);
+
+  gimp_context_get_foreground (context, &fg);
+  gimp_rgb_to_hsv (&fg, &hsv);
+
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_COLOR_H,
+                                hsv.h);
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_COLOR_S,
+                                hsv.s);
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_COLOR_V,
+                                hsv.v);
+
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_OPAQUE,
+                                gimp_context_get_opacity (context));
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_RADIUS_LOGARITHMIC,
+                                options->radius);
+  mypaint_brush_set_base_value (mybrush->private->brush,
+                                MYPAINT_BRUSH_SETTING_HARDNESS,
+                                options->hardness);
+
+  mypaint_surface_begin_atomic ((MyPaintSurface *) mybrush->private->surface);
+
+  mypaint_brush_stroke_to (mybrush->private->brush,
+                           (MyPaintSurface *) mybrush->private->surface,
+                           coords->x,
+                           coords->y,
+                           coords->pressure,
+                           coords->xtilt,
+                           coords->ytilt,
+                           1);
+
+  mypaint_surface_end_atomic ((MyPaintSurface *) mybrush->private->surface,
+                              &rect);
+
+  g_printerr ("painted rect: %d %d %d %d\n",
+              rect.x, rect.y, rect.width, rect.height);
+
+  paint_core->x1 = MIN (paint_core->x1, rect.x);
+  paint_core->y1 = MIN (paint_core->y1, rect.y);
+  paint_core->x2 = MAX (paint_core->x2, rect.x + rect.width);
+  paint_core->y2 = MAX (paint_core->y2, rect.y + rect.height);
+
+  gimp_drawable_update (drawable, rect.x, rect.y, rect.width, rect.height);
+}
diff --git a/app/paint/gimpmybrush.h b/app/paint/gimpmybrush.h
new file mode 100644
index 0000000..2a5d765
--- /dev/null
+++ b/app/paint/gimpmybrush.h
@@ -0,0 +1,55 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef  __GIMP_MYBRUSH_H__
+#define  __GIMP_MYBRUSH_H__
+
+
+#include "gimppaintcore.h"
+
+
+#define GIMP_TYPE_MYBRUSH            (gimp_mybrush_get_type ())
+#define GIMP_MYBRUSH(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_MYBRUSH, GimpMybrush))
+#define GIMP_MYBRUSH_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_MYBRUSH, GimpMybrushClass))
+#define GIMP_IS_MYBRUSH(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_MYBRUSH))
+#define GIMP_IS_MYBRUSH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_MYBRUSH))
+#define GIMP_MYBRUSH_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_MYBRUSH, GimpMybrushClass))
+
+
+typedef struct _GimpMybrushPrivate GimpMybrushPrivate;
+typedef struct _GimpMybrushClass   GimpMybrushClass;
+
+struct _GimpMybrush
+{
+  GimpPaintCore       parent_instance;
+
+  GimpMybrushPrivate *private;
+};
+
+struct _GimpMybrushClass
+{
+  GimpPaintCoreClass  parent_class;
+};
+
+
+void    gimp_mybrush_register (Gimp                      *gimp,
+                               GimpPaintRegisterCallback  callback);
+
+GType   gimp_mybrush_get_type (void) G_GNUC_CONST;
+
+
+#endif  /*  __GIMP_MYBRUSH_H__  */
diff --git a/app/paint/gimpmybrushoptions.c b/app/paint/gimpmybrushoptions.c
new file mode 100644
index 0000000..487e787
--- /dev/null
+++ b/app/paint/gimpmybrushoptions.c
@@ -0,0 +1,136 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gegl.h>
+
+#include "libgimpconfig/gimpconfig.h"
+
+#include "paint-types.h"
+
+#include "core/gimp.h"
+#include "core/gimpdrawable.h"
+#include "core/gimppaintinfo.h"
+
+#include "gimpmybrushoptions.h"
+
+#include "gimp-intl.h"
+
+
+enum
+{
+  PROP_0,
+  PROP_RADIUS,
+  PROP_HARDNESS,
+  PROP_MYBRUSH
+};
+
+
+static void   gimp_mybrush_options_set_property (GObject      *object,
+                                                 guint         property_id,
+                                                 const GValue *value,
+                                                 GParamSpec   *pspec);
+static void   gimp_mybrush_options_get_property (GObject      *object,
+                                                 guint         property_id,
+                                                 GValue       *value,
+                                                 GParamSpec   *pspec);
+
+
+G_DEFINE_TYPE (GimpMybrushOptions, gimp_mybrush_options, GIMP_TYPE_PAINT_OPTIONS)
+
+
+static void
+gimp_mybrush_options_class_init (GimpMybrushOptionsClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->set_property = gimp_mybrush_options_set_property;
+  object_class->get_property = gimp_mybrush_options_get_property;
+
+  GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_RADIUS,
+                                   "radius", _("Radius"),
+                                   -2.0, 6.0, 1.0,
+                                   GIMP_PARAM_STATIC_STRINGS);
+  GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_HARDNESS,
+                                   "hardness", NULL,
+                                   0.0, 1.0, 1.0,
+                                   GIMP_PARAM_STATIC_STRINGS);
+  GIMP_CONFIG_INSTALL_PROP_STRING (object_class, PROP_MYBRUSH,
+                                   "mybrush", NULL,
+                                   NULL,
+                                   GIMP_PARAM_STATIC_STRINGS);
+}
+
+static void
+gimp_mybrush_options_init (GimpMybrushOptions *options)
+{
+}
+
+static void
+gimp_mybrush_options_set_property (GObject      *object,
+                                   guint         property_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  GimpMybrushOptions *options = GIMP_MYBRUSH_OPTIONS (object);
+
+  switch (property_id)
+    {
+    case PROP_RADIUS:
+      options->radius = g_value_get_double (value);
+      break;
+    case PROP_HARDNESS:
+      options->hardness = g_value_get_double (value);
+      break;
+    case PROP_MYBRUSH:
+      g_free (options->mybrush);
+      options->mybrush = g_value_dup_string (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+gimp_mybrush_options_get_property (GObject    *object,
+                                   guint       property_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  GimpMybrushOptions *options = GIMP_MYBRUSH_OPTIONS (object);
+
+  switch (property_id)
+    {
+    case PROP_RADIUS:
+      g_value_set_double (value, options->radius);
+      break;
+    case PROP_HARDNESS:
+      g_value_set_double (value, options->hardness);
+      break;
+    case PROP_MYBRUSH:
+      g_value_set_string (value, options->mybrush);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
diff --git a/app/paint/gimpmybrushoptions.h b/app/paint/gimpmybrushoptions.h
new file mode 100644
index 0000000..1a756d4
--- /dev/null
+++ b/app/paint/gimpmybrushoptions.h
@@ -0,0 +1,53 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef  __GIMP_MYBRUSH_OPTIONS_H__
+#define  __GIMP_MYBRUSH_OPTIONS_H__
+
+
+#include "gimppaintoptions.h"
+
+
+#define GIMP_TYPE_MYBRUSH_OPTIONS            (gimp_mybrush_options_get_type ())
+#define GIMP_MYBRUSH_OPTIONS(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_MYBRUSH_OPTIONS, 
GimpMybrushOptions))
+#define GIMP_MYBRUSH_OPTIONS_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_MYBRUSH_OPTIONS, 
GimpMybrushOptionsClass))
+#define GIMP_IS_MYBRUSH_OPTIONS(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_MYBRUSH_OPTIONS))
+#define GIMP_IS_MYBRUSH_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_MYBRUSH_OPTIONS))
+#define GIMP_MYBRUSH_OPTIONS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_MYBRUSH_OPTIONS, 
GimpMybrushOptionsClass))
+
+
+typedef struct _GimpMybrushOptionsClass GimpMybrushOptionsClass;
+
+struct _GimpMybrushOptions
+{
+  GimpPaintOptions  parent_instance;
+
+  gdouble           radius;
+  gdouble           hardness;
+  gchar            *mybrush;
+};
+
+struct _GimpMybrushOptionsClass
+{
+  GimpPaintOptionsClass  parent_instance;
+};
+
+
+GType   gimp_mybrush_options_get_type (void) G_GNUC_CONST;
+
+
+#endif  /*  __GIMP_MYBRUSH_OPTIONS_H__  */
diff --git a/app/paint/paint-types.h b/app/paint/paint-types.h
index 87e7369..118cfa6 100644
--- a/app/paint/paint-types.h
+++ b/app/paint/paint-types.h
@@ -36,6 +36,7 @@ typedef struct _GimpDodgeBurn        GimpDodgeBurn;
 typedef struct _GimpEraser           GimpEraser;
 typedef struct _GimpHeal             GimpHeal;
 typedef struct _GimpInk              GimpInk;
+typedef struct _GimpMybrush          GimpMybrush;
 typedef struct _GimpPaintbrush       GimpPaintbrush;
 typedef struct _GimpPencil           GimpPencil;
 typedef struct _GimpPerspectiveClone GimpPerspectiveClone;
@@ -53,6 +54,7 @@ typedef struct _GimpConvolveOptions         GimpConvolveOptions;
 typedef struct _GimpDodgeBurnOptions        GimpDodgeBurnOptions;
 typedef struct _GimpEraserOptions           GimpEraserOptions;
 typedef struct _GimpInkOptions              GimpInkOptions;
+typedef struct _GimpMybrushOptions          GimpMybrushOptions;
 typedef struct _GimpPencilOptions           GimpPencilOptions;
 typedef struct _GimpPerspectiveCloneOptions GimpPerspectiveCloneOptions;
 typedef struct _GimpSmudgeOptions           GimpSmudgeOptions;
diff --git a/app/tools/Makefile.am b/app/tools/Makefile.am
index d5fcd17..76a52f2 100644
--- a/app/tools/Makefile.am
+++ b/app/tools/Makefile.am
@@ -132,6 +132,10 @@ libapptools_a_sources = \
        gimpmoveoptions.h               \
        gimpmovetool.c                  \
        gimpmovetool.h                  \
+       gimpmybrushoptions-gui.c        \
+       gimpmybrushoptions-gui.h        \
+       gimpmybrushtool.c               \
+       gimpmybrushtool.h               \
        gimppaintbrushtool.c            \
        gimppaintbrushtool.h            \
        gimppaintoptions-gui.c          \
diff --git a/app/tools/gimp-tools.c b/app/tools/gimp-tools.c
index ac186f4..22689e2 100644
--- a/app/tools/gimp-tools.c
+++ b/app/tools/gimp-tools.c
@@ -70,6 +70,7 @@
 #include "gimpmagnifytool.h"
 #include "gimpmeasuretool.h"
 #include "gimpmovetool.h"
+#include "gimpmybrushtool.h"
 #include "gimppaintbrushtool.h"
 #include "gimppenciltool.h"
 #include "gimpperspectiveclonetool.h"
@@ -142,6 +143,7 @@ gimp_tools_init (Gimp *gimp)
     gimp_perspective_clone_tool_register,
     gimp_heal_tool_register,
     gimp_clone_tool_register,
+    gimp_mybrush_tool_register,
     gimp_ink_tool_register,
     gimp_airbrush_tool_register,
     gimp_eraser_tool_register,
@@ -535,6 +537,10 @@ gimp_tools_register (GType                   tool_type,
     {
       paint_core_name = "gimp-ink";
     }
+  else if (tool_type == GIMP_TYPE_MYBRUSH_TOOL)
+    {
+      paint_core_name = "gimp-mybrush";
+    }
   else
     {
       paint_core_name = "gimp-paintbrush";
diff --git a/app/tools/gimpmybrushoptions-gui.c b/app/tools/gimpmybrushoptions-gui.c
new file mode 100644
index 0000000..34ad30a
--- /dev/null
+++ b/app/tools/gimpmybrushoptions-gui.c
@@ -0,0 +1,166 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+#include <gtk/gtk.h>
+
+#include "libgimpbase/gimpbase.h"
+#include "libgimpwidgets/gimpwidgets.h"
+
+#include "tools-types.h"
+
+#include "paint/gimpmybrushoptions.h"
+
+#include "widgets/gimppropwidgets.h"
+
+#include "gimpmybrushoptions-gui.h"
+#include "gimppaintoptions-gui.h"
+
+#include "gimp-intl.h"
+
+
+static void
+gimp_mybrush_options_load_brush (const GimpDatafileData *file_data,
+                                 gpointer                user_data)
+{
+  if (gimp_datafiles_check_extension (file_data->basename, ".myb"))
+    {
+      GtkListStore *store  = user_data;
+      GtkTreeIter   iter   = { 0, };
+      GdkPixbuf    *pixbuf = NULL;
+      gchar        *filename;
+      gchar        *basename;
+      gchar        *preview_filename;
+
+      filename = g_strdup (file_data->filename);
+      g_object_weak_ref (G_OBJECT (store), (GWeakNotify) g_free, filename);
+
+      basename = g_strndup (filename, strlen (filename) - 4);
+      preview_filename = g_strconcat (basename, "_prev.png", NULL);
+      g_free (basename);
+
+      pixbuf = gdk_pixbuf_new_from_file (preview_filename, NULL);
+      g_free (preview_filename);
+
+      if (pixbuf)
+        {
+          GdkPixbuf *scaled;
+          gint       width  = gdk_pixbuf_get_width (pixbuf);
+          gint       height = gdk_pixbuf_get_height (pixbuf);
+          gdouble    factor = 48.0 / height;
+
+          scaled = gdk_pixbuf_scale_simple (pixbuf,
+                                            width * factor,
+                                            height * factor,
+                                            GDK_INTERP_NEAREST);
+
+          g_object_unref (pixbuf);
+          pixbuf = scaled;
+        }
+
+      gtk_list_store_append (store, &iter);
+      gtk_list_store_set (store, &iter,
+                          GIMP_INT_STORE_LABEL,     file_data->basename,
+                          GIMP_INT_STORE_PIXBUF,    pixbuf,
+                          GIMP_INT_STORE_USER_DATA, filename,
+                          -1);
+
+      if (pixbuf)
+        g_object_unref (pixbuf);
+    }
+}
+
+static void
+gimp_mybrush_options_load_recursive (const GimpDatafileData *file_data,
+                                     gpointer                user_data)
+{
+  gimp_datafiles_read_directories (file_data->filename,
+                                   G_FILE_TEST_IS_REGULAR,
+                                   gimp_mybrush_options_load_brush,
+                                   user_data);
+}
+
+static void
+gimp_mybrush_options_brush_changed (GtkComboBox *combo,
+                                    GObject     *config)
+{
+  GtkTreeIter iter;
+
+  if (gtk_combo_box_get_active_iter (combo, &iter))
+    {
+      GtkTreeModel *model = gtk_combo_box_get_model (combo);
+      const gchar  *brush;
+
+      gtk_tree_model_get (model, &iter,
+                          GIMP_INT_STORE_USER_DATA, &brush,
+                          -1);
+
+      if (brush)
+        g_object_set (config,
+                      "mybrush", brush,
+                      NULL);
+    }
+}
+
+GtkWidget *
+gimp_mybrush_options_gui (GimpToolOptions *tool_options)
+{
+  GObject      *config = G_OBJECT (tool_options);
+  GtkWidget    *vbox   = gimp_paint_options_gui (tool_options);
+  GtkWidget    *scale;
+  GtkWidget    *combo;
+  GtkTreeModel *model;
+
+  /* radius */
+  scale = gimp_prop_spin_scale_new (config, "radius",
+                                    _("Radius"),
+                                    0.1, 1.0, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
+  gtk_widget_show (scale);
+
+  /* hardness */
+  scale = gimp_prop_spin_scale_new (config, "hardness",
+                                    _("Hardness"),
+                                    0.1, 1.0, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
+  gtk_widget_show (scale);
+
+  /* brushes */
+  combo = g_object_new (GIMP_TYPE_INT_COMBO_BOX,
+                        "label",     _("Brush"),
+                        "ellipsize", PANGO_ELLIPSIZE_END,
+                        NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0);
+  gtk_widget_show (combo);
+
+  model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+
+  gimp_datafiles_read_directories ("/usr/share/mypaint/brushes",
+                                   G_FILE_TEST_IS_DIR,
+                                   gimp_mybrush_options_load_recursive,
+                                   model);
+
+  g_signal_connect (combo, "changed",
+                    G_CALLBACK (gimp_mybrush_options_brush_changed),
+                    config);
+
+  gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), 0);
+
+  return vbox;
+}
diff --git a/app/tools/gimpmybrushoptions-gui.h b/app/tools/gimpmybrushoptions-gui.h
new file mode 100644
index 0000000..59618a2
--- /dev/null
+++ b/app/tools/gimpmybrushoptions-gui.h
@@ -0,0 +1,25 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef  __GIMP_MYBRUSH_OPTIONS_GUI_H__
+#define  __GIMP_MYBRUSH_OPTIONS_GUI_H__
+
+
+GtkWidget * gimp_mybrush_options_gui (GimpToolOptions *tool_options);
+
+
+#endif  /*  __GIMP_MYBRUSH_OPTIONS_GUI_H__  */
diff --git a/app/tools/gimpmybrushtool.c b/app/tools/gimpmybrushtool.c
new file mode 100644
index 0000000..678d137
--- /dev/null
+++ b/app/tools/gimpmybrushtool.c
@@ -0,0 +1,77 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+#include <gtk/gtk.h>
+
+#include "libgimpwidgets/gimpwidgets.h"
+
+#include "tools-types.h"
+
+#include "paint/gimpmybrushoptions.h"
+
+#include "widgets/gimphelp-ids.h"
+
+#include "gimpmybrushoptions-gui.h"
+#include "gimpmybrushtool.h"
+#include "gimptoolcontrol.h"
+
+#include "gimp-intl.h"
+
+
+G_DEFINE_TYPE (GimpMybrushTool, gimp_mybrush_tool, GIMP_TYPE_PAINT_TOOL)
+
+#define parent_class gimp_mybrush_tool_parent_class
+
+
+void
+gimp_mybrush_tool_register (GimpToolRegisterCallback  callback,
+                            gpointer                  data)
+{
+  (* callback) (GIMP_TYPE_MYBRUSH_TOOL,
+                GIMP_TYPE_MYBRUSH_OPTIONS,
+                gimp_mybrush_options_gui,
+                GIMP_CONTEXT_FOREGROUND_MASK |
+                GIMP_CONTEXT_BACKGROUND_MASK |
+                GIMP_CONTEXT_OPACITY_MASK    |
+                GIMP_CONTEXT_PAINT_MODE_MASK,
+                "gimp-mybrush-tool",
+                _("MyPaint Brush"),
+                _("MyPaint Brush Tool: Use MyPaint brushes in GIMP"),
+                N_("M_yPaint Brush"), "Y",
+                NULL, GIMP_HELP_TOOL_MYBRUSH,
+                GIMP_STOCK_TOOL_MYBRUSH,
+                data);
+}
+
+static void
+gimp_mybrush_tool_class_init (GimpMybrushToolClass *klass)
+{
+}
+
+static void
+gimp_mybrush_tool_init (GimpMybrushTool *mybrush_tool)
+{
+  GimpTool *tool = GIMP_TOOL (mybrush_tool);
+
+  gimp_tool_control_set_tool_cursor   (tool->control, GIMP_TOOL_CURSOR_INK);
+
+  gimp_paint_tool_enable_color_picker (GIMP_PAINT_TOOL (mybrush_tool),
+                                       GIMP_COLOR_PICK_MODE_FOREGROUND);
+}
diff --git a/app/tools/gimpmybrushtool.h b/app/tools/gimpmybrushtool.h
new file mode 100644
index 0000000..f4413cb
--- /dev/null
+++ b/app/tools/gimpmybrushtool.h
@@ -0,0 +1,53 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef  __GIMP_MYBRUSH_TOOL_H__
+#define  __GIMP_MYBRUSH_TOOL_H__
+
+
+#include "gimppainttool.h"
+
+
+#define GIMP_TYPE_MYBRUSH_TOOL            (gimp_mybrush_tool_get_type ())
+#define GIMP_MYBRUSH_TOOL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_MYBRUSH_TOOL, 
GimpMybrushTool))
+#define GIMP_MYBRUSH_TOOL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_MYBRUSH_TOOL, 
GimpMybrushToolClass))
+#define GIMP_IS_MYBRUSH_TOOL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_MYBRUSH_TOOL))
+#define GIMP_IS_MYBRUSH_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_MYBRUSH_TOOL))
+#define GIMP_MYBRUSH_TOOL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_MYBRUSH_TOOL, 
GimpMybrushToolClass))
+
+
+typedef struct _GimpMybrushTool      GimpMybrushTool;
+typedef struct _GimpMybrushToolClass GimpMybrushToolClass;
+
+struct _GimpMybrushTool
+{
+  GimpPaintTool parent_instance;
+};
+
+struct _GimpMybrushToolClass
+{
+  GimpPaintToolClass parent_class;
+};
+
+
+void    gimp_mybrush_tool_register (GimpToolRegisterCallback  callback,
+                                    gpointer                  data);
+
+GType   gimp_mybrush_tool_get_type (void) G_GNUC_CONST;
+
+
+#endif  /*  __GIMP_MYBRUSH_TOOL_H__  */
diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h
index 95d7464..9eff3fd 100644
--- a/app/widgets/gimphelp-ids.h
+++ b/app/widgets/gimphelp-ids.h
@@ -284,6 +284,7 @@
 #define GIMP_HELP_TOOL_LEVELS                     "gimp-tool-levels"
 #define GIMP_HELP_TOOL_MEASURE                    "gimp-tool-measure"
 #define GIMP_HELP_TOOL_MOVE                       "gimp-tool-move"
+#define GIMP_HELP_TOOL_MYBRUSH                    "gimp-tool-mybrush"
 #define GIMP_HELP_TOOL_PATH                       "gimp-tool-path"
 #define GIMP_HELP_TOOL_PAINTBRUSH                 "gimp-tool-paintbrush"
 #define GIMP_HELP_TOOL_PENCIL                     "gimp-tool-pencil"
diff --git a/configure.ac b/configure.ac
index a93c639..f794e76 100644
--- a/configure.ac
+++ b/configure.ac
@@ -363,8 +363,10 @@ CFLAGS="$CFLAGS $extra_warnings"
 # We really don't want anyone using code with missing prototypes, which
 # can cause random behavior. If compile breaks due to the following,
 # come to us and we will point you to a newer version which works.
-GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes')
-CFLAGS="$CFLAGS $extra_warnings"
+#
+# Temporarily disabled -- mypaint brush
+# GIMP_DETECT_CFLAGS(extra_warnings, '-Werror=missing-prototypes')
+# CFLAGS="$CFLAGS $extra_warnings"
 
 GIMP_DETECT_CFLAGS(extra_warnings, '-Wstrict-prototypes')
 CFLAGS="$CFLAGS $extra_warnings"
@@ -1589,6 +1591,13 @@ AC_SUBST(JP2_LIBS)
 PKG_CHECK_MODULES(LCMS, lcms2 >= lcms_required_version)
 
 
+##################
+# Check for json-c -- temporary for mypaint brush
+##################
+
+PKG_CHECK_MODULES(JSON_C, json-c)
+
+
 ######################
 # Check for libXcursor
 ######################
diff --git a/libgimpwidgets/gimpstock.c b/libgimpwidgets/gimpstock.c
index cc4c4ca..9b1cd8b 100644
--- a/libgimpwidgets/gimpstock.c
+++ b/libgimpwidgets/gimpstock.c
@@ -332,6 +332,7 @@ static const GtkStockItem gimp_stock_items[] =
   { GIMP_STOCK_TOOL_LEVELS,              NULL,        0, 0, LIBGIMP_DOMAIN },
   { GIMP_STOCK_TOOL_MEASURE,             NULL,        0, 0, LIBGIMP_DOMAIN },
   { GIMP_STOCK_TOOL_MOVE,                NULL,        0, 0, LIBGIMP_DOMAIN },
+  { GIMP_STOCK_TOOL_MYBRUSH,             NULL,        0, 0, LIBGIMP_DOMAIN },
   { GIMP_STOCK_TOOL_PAINTBRUSH,          NULL,        0, 0, LIBGIMP_DOMAIN },
   { GIMP_STOCK_TOOL_PATH,                NULL,        0, 0, LIBGIMP_DOMAIN },
   { GIMP_STOCK_TOOL_PENCIL,              NULL,        0, 0, LIBGIMP_DOMAIN },
@@ -493,6 +494,7 @@ gimp_stock_button_pixbufs[] =
   { GIMP_STOCK_TOOL_LEVELS,              stock_tool_levels_22              },
   { GIMP_STOCK_TOOL_MEASURE,             stock_tool_measure_22             },
   { GIMP_STOCK_TOOL_MOVE,                stock_tool_move_22                },
+  { GIMP_STOCK_TOOL_MYBRUSH,             stock_tool_mybrush_22             },
   { GIMP_STOCK_TOOL_PAINTBRUSH,          stock_tool_paintbrush_22          },
   { GIMP_STOCK_TOOL_PATH,                stock_tool_path_22                },
   { GIMP_STOCK_TOOL_PENCIL,              stock_tool_pencil_22              },
@@ -663,6 +665,7 @@ gimp_stock_menu_pixbufs[] =
   { GIMP_STOCK_TOOL_LEVELS,              stock_tool_levels_16              },
   { GIMP_STOCK_TOOL_MEASURE,             stock_tool_measure_16             },
   { GIMP_STOCK_TOOL_MOVE,                stock_tool_move_16                },
+  { GIMP_STOCK_TOOL_MYBRUSH,             stock_tool_mybrush_16             },
   { GIMP_STOCK_TOOL_PAINTBRUSH,          stock_tool_paintbrush_16          },
   { GIMP_STOCK_TOOL_PATH,                stock_tool_path_16                },
   { GIMP_STOCK_TOOL_PENCIL,              stock_tool_pencil_16              },
diff --git a/libgimpwidgets/gimpstock.h b/libgimpwidgets/gimpstock.h
index ec9eec7..040e55d 100644
--- a/libgimpwidgets/gimpstock.h
+++ b/libgimpwidgets/gimpstock.h
@@ -132,6 +132,7 @@ G_BEGIN_DECLS
 #define GIMP_STOCK_TOOL_LEVELS              "gimp-tool-levels"
 #define GIMP_STOCK_TOOL_MEASURE             "gimp-tool-measure"
 #define GIMP_STOCK_TOOL_MOVE                "gimp-tool-move"
+#define GIMP_STOCK_TOOL_MYBRUSH             "gimp-tool-mybrush"
 #define GIMP_STOCK_TOOL_PAINTBRUSH          "gimp-tool-paintbrush"
 #define GIMP_STOCK_TOOL_PATH                "gimp-tool-path"
 #define GIMP_STOCK_TOOL_PENCIL              "gimp-tool-pencil"
diff --git a/menus/image-menu.xml.in b/menus/image-menu.xml.in
index a2aa12a..7e03696 100644
--- a/menus/image-menu.xml.in
+++ b/menus/image-menu.xml.in
@@ -579,6 +579,7 @@
         <menuitem action="tools-eraser" />
         <menuitem action="tools-airbrush" />
         <menuitem action="tools-ink" />
+        <menuitem action="tools-mybrush" />
         <menuitem action="tools-clone" />
         <menuitem action="tools-heal" />
         <menuitem action="tools-perspective-clone" />
diff --git a/themes/Default/images/Makefile.am b/themes/Default/images/Makefile.am
index 75d41e6..2adc423 100644
--- a/themes/Default/images/Makefile.am
+++ b/themes/Default/images/Makefile.am
@@ -323,6 +323,8 @@ STOCK_TOOL_IMAGES = \
        tools/stock-tool-measure-22.png                 \
        tools/stock-tool-move-16.png                    \
        tools/stock-tool-move-22.png                    \
+       tools/stock-tool-mybrush-16.png                 \
+       tools/stock-tool-mybrush-22.png                 \
        tools/stock-tool-paintbrush-16.png              \
        tools/stock-tool-paintbrush-22.png              \
        tools/stock-tool-path-16.png                    \
diff --git a/themes/Default/images/tools/stock-tool-mybrush-16.png 
b/themes/Default/images/tools/stock-tool-mybrush-16.png
new file mode 100644
index 0000000..d785457
Binary files /dev/null and b/themes/Default/images/tools/stock-tool-mybrush-16.png differ
diff --git a/themes/Default/images/tools/stock-tool-mybrush-22.png 
b/themes/Default/images/tools/stock-tool-mybrush-22.png
new file mode 100644
index 0000000..bc27d81
Binary files /dev/null and b/themes/Default/images/tools/stock-tool-mybrush-22.png differ



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