<div dir="ltr">Hello boud and dmitryK,<div><br></div><div>have you considered to realize the stacked brush through multihand tool?</div><div>One would have to create UI for selecting brush preset for every KisPainter in multihand tool.</div><div>Then it is just a matter of transformation, for stacking two brushes you would use identity transformation.</div><div><br></div><div>Advantages:</div><div>- useful with any brush engine </div><div>- it would be possible to stack n brushes</div><div>- new possibilities: mirroring or symetry or with different brush engines</div><div><br></div><div>Why paintop?</div><div><br></div><div>Lukas</div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-05-27 13:02 GMT+02:00 Boudewijn Rempt <span dir="ltr"><<a href="mailto:boud@valdyas.org" target="_blank">boud@valdyas.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Git commit f29dbf00eaf2014904dcd80ee741b8e8f96d5b51 by Boudewijn Rempt.<br>
Committed on 27/05/2015 at 11:01.<br>
Pushed by rempt into branch 'krita-chili-kazakov'.<br>
<br>
Add a skeleton stacked brush paintop<br>
<br>
For Dmitry to add gui and logic to :-)<br>
<br>
M  +1    -0    krita/plugins/paintops/CMakeLists.txt<br>
A  +23   -0    krita/plugins/paintops/stacked/CMakeLists.txt<br>
A  +-    --    krita/plugins/paintops/stacked/krita-stacked.png<br>
A  +35   -0    krita/plugins/paintops/stacked/stacked_brush.cpp     [License: LGPL (v2+)]<br>
A  +38   -0    krita/plugins/paintops/stacked/stacked_brush.h     [License: LGPL (v2+)]<br>
A  +43   -0    krita/plugins/paintops/stacked/stacked_paintop.cpp     [License: LGPL (v2+)]<br>
A  +45   -0    krita/plugins/paintops/stacked/stacked_paintop.h     [License: LGPL (v2+)]<br>
A  +53   -0    krita/plugins/paintops/stacked/stacked_paintop_plugin.cpp     [License: LGPL (v2+)]<br>
A  +37   -0    krita/plugins/paintops/stacked/stacked_paintop_plugin.h     [License: LGPL (v2+)]<br>
A  +48   -0    krita/plugins/paintops/stacked/stacked_paintop_settings.cpp     [License: LGPL (v2+)]<br>
A  +40   -0    krita/plugins/paintops/stacked/stacked_paintop_settings.h     [License: LGPL (v2+)]<br>
A  +54   -0    krita/plugins/paintops/stacked/stacked_paintop_settings_widget.cpp     [License: LGPL (v2+)]<br>
A  +47   -0    krita/plugins/paintops/stacked/stacked_paintop_settings_widget.h     [License: LGPL (v2+)]<br>
A  +56   -0    krita/plugins/paintops/stacked/stackedop_option.cpp     [License: GPL (v2+)]<br>
A  +42   -0    krita/plugins/paintops/stacked/stackedop_option.h     [License: GPL (v2+)]<br>
A  +43   -0    krita/plugins/paintops/stacked/stackedpaintop.desktop<br>
A  +40   -0    krita/plugins/paintops/stacked/wdgstackedoptions.ui<br>
<br>
<a href="http://commits.kde.org/calligra/f29dbf00eaf2014904dcd80ee741b8e8f96d5b51" target="_blank">http://commits.kde.org/calligra/f29dbf00eaf2014904dcd80ee741b8e8f96d5b51</a><br>
<br>
diff --git a/krita/plugins/paintops/CMakeLists.txt b/krita/plugins/paintops/CMakeLists.txt<br>
index baff8c2..fab2d11 100644<br>
--- a/krita/plugins/paintops/CMakeLists.txt<br>
+++ b/krita/plugins/paintops/CMakeLists.txt<br>
@@ -16,3 +16,4 @@ add_subdirectory( gridbrush )<br>
 add_subdirectory( hatching)<br>
 add_subdirectory( sketch )<br>
 add_subdirectory( colorsmudge )<br>
+add_subdirectory( stacked )<br>
diff --git a/krita/plugins/paintops/stacked/CMakeLists.txt b/krita/plugins/paintops/stacked/CMakeLists.txt<br>
new file mode 100644<br>
index 0000000..5b7b102<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/CMakeLists.txt<br>
@@ -0,0 +1,23 @@<br>
+set(kritastackedpaintop_PART_SRCS<br>
+    stacked_paintop_plugin.cpp<br>
+    stacked_paintop_settings.cpp<br>
+    stacked_paintop_settings_widget.cpp<br>
+    stacked_brush.cpp<br>
+    stacked_paintop.cpp<br>
+    stackedop_option.cpp<br>
+)<br>
+<br>
+kde4_add_ui_files(kritastackedpaintop_PART_SRCS wdgstackedoptions.ui )<br>
+<br>
+kde4_add_plugin(kritastackedpaintop ${kritastackedpaintop_PART_SRCS})<br>
+<br>
+<br>
+target_link_libraries(kritastackedpaintop  kritaui kritalibpaintop kritalibbrush kowidgetutils)<br>
+<br>
+install(TARGETS kritastackedpaintop  DESTINATION ${PLUGIN_INSTALL_DIR})<br>
+<br>
+########### install files ###############<br>
+<br>
+install( FILES  kritastackedpaintop.desktop  DESTINATION ${SERVICES_INSTALL_DIR}/calligra)<br>
+install( FILES<br>
+    krita-stacked.png DESTINATION ${DATA_INSTALL_DIR}/krita/images)<br>
diff --git a/krita/plugins/paintops/stacked/krita-stacked.png b/krita/plugins/paintops/stacked/krita-stacked.png<br>
new file mode 100644<br>
index 0000000..fd4d0fa<br>
Binary files /dev/null and b/krita/plugins/paintops/stacked/krita-stacked.png differ<br>
diff --git a/krita/plugins/paintops/stacked/stacked_brush.cpp b/krita/plugins/paintops/stacked/stacked_brush.cpp<br>
new file mode 100644<br>
index 0000000..dff0476<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_brush.cpp<br>
@@ -0,0 +1,35 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#include "stacked_brush.h"<br>
+<br>
+<br>
+StackedBrush::StackedBrush()<br>
+{<br>
+}<br>
+<br>
+<br>
+StackedBrush::~StackedBrush()<br>
+{<br>
+}<br>
+<br>
+<br>
+void StackedBrush::paint(KisPaintDeviceSP dev, qreal x, qreal y, const KoColor &color)<br>
+{<br>
+}<br>
+<br>
diff --git a/krita/plugins/paintops/stacked/stacked_brush.h b/krita/plugins/paintops/stacked/stacked_brush.h<br>
new file mode 100644<br>
index 0000000..0941d4b<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_brush.h<br>
@@ -0,0 +1,38 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#ifndef STACKED_BRUSH_H_<br>
+#define STACKED_BRUSH_H_<br>
+<br>
+#include <QVector><br>
+<br>
+#include <KoColor.h><br>
+<br>
+#include "kis_paint_device.h"<br>
+<br>
+class StackedBrush<br>
+{<br>
+<br>
+public:<br>
+    StackedBrush();<br>
+    ~StackedBrush();<br>
+    void paint(KisPaintDeviceSP dev, qreal x, qreal y, const KoColor &color);<br>
+<br>
+};<br>
+<br>
+#endif<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop.cpp b/krita/plugins/paintops/stacked/stacked_paintop.cpp<br>
new file mode 100644<br>
index 0000000..2675aac<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop.cpp<br>
@@ -0,0 +1,43 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#include "stacked_paintop.h"<br>
+#include "stacked_paintop_settings.h"<br>
+<br>
+StackedPaintOp::StackedPaintOp(const StackedPaintOpSettings *settings, KisPainter * painter, KisNodeSP node, KisImageSP image)<br>
+    : KisPaintOp(painter)<br>
+{<br>
+    Q_UNUSED(settings);<br>
+    Q_UNUSED(painter);<br>
+    Q_UNUSED(node);<br>
+    Q_UNUSED(image);<br>
+<br>
+    m_stackedBrush = new StackedBrush();<br>
+}<br>
+<br>
+StackedPaintOp::~StackedPaintOp()<br>
+{<br>
+    delete m_stackedBrush;<br>
+}<br>
+<br>
+KisSpacingInformation StackedPaintOp::paintAt(const KisPaintInformation& info)<br>
+{<br>
+    if (!painter()) return KisSpacingInformation(1.0);<br>
+<br>
+    return KisSpacingInformation(1.0);<br>
+}<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop.h b/krita/plugins/paintops/stacked/stacked_paintop.h<br>
new file mode 100644<br>
index 0000000..a81ba8d<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop.h<br>
@@ -0,0 +1,45 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#ifndef KIS_STACKED_PAINTOP_H_<br>
+#define KIS_STACKED_PAINTOP_H_<br>
+<br>
+#include <kis_paintop.h><br>
+#include <kis_types.h><br>
+<br>
+#include "stacked_brush.h"<br>
+#include "stacked_paintop_settings.h"<br>
+<br>
+class KisPainter;<br>
+<br>
+class StackedPaintOp : public KisPaintOp<br>
+{<br>
+<br>
+public:<br>
+<br>
+    StackedPaintOp(const StackedPaintOpSettings *settings, KisPainter * painter, KisNodeSP node, KisImageSP image);<br>
+    virtual ~StackedPaintOp();<br>
+<br>
+    KisSpacingInformation paintAt(const KisPaintInformation& info);<br>
+<br>
+private:<br>
+<br>
+    StackedBrush *m_stackedBrush;<br>
+};<br>
+<br>
+#endif // KIS_STACKED_PAINTOP_H_<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop_plugin.cpp b/krita/plugins/paintops/stacked/stacked_paintop_plugin.cpp<br>
new file mode 100644<br>
index 0000000..df52ea9<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop_plugin.cpp<br>
@@ -0,0 +1,53 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#include "stacked_paintop_plugin.h"<br>
+<br>
+<br>
+#include <klocale.h><br>
+<br>
+#include <kis_debug.h><br>
+#include <kpluginfactory.h><br>
+<br>
+#include <kis_paintop_registry.h><br>
+#include "kis_simple_paintop_factory.h"<br>
+<br>
+#include "stacked_paintop.h"<br>
+#include "stacked_paintop_settings_widget.h"<br>
+#include "stacked_paintop_settings.h"<br>
+#include "stacked_paintop_settings.h"<br>
+<br>
+#include "kis_global.h"<br>
+<br>
+K_PLUGIN_FACTORY(StackedPaintOpPluginFactory, registerPlugin<StackedPaintOpPlugin>();)<br>
+K_EXPORT_PLUGIN(StackedPaintOpPluginFactory("krita"))<br>
+<br>
+<br>
+StackedPaintOpPlugin::StackedPaintOpPlugin(QObject *parent, const QVariantList &)<br>
+    : QObject(parent)<br>
+{<br>
+    KisPaintOpRegistry *r = KisPaintOpRegistry::instance();<br>
+    r->add(new KisSimplePaintOpFactory<StackedPaintOp, StackedPaintOpSettings, StackedPaintOpSettingsWidget>("stackedbrush", i18n("Stacked Brush"),<br>
+            KisPaintOpFactory::categoryStable(), "krita-stacked.png"));<br>
+}<br>
+<br>
+StackedPaintOpPlugin::~StackedPaintOpPlugin()<br>
+{<br>
+}<br>
+<br>
+#include "stacked_paintop_plugin.moc"<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop_plugin.h b/krita/plugins/paintops/stacked/stacked_paintop_plugin.h<br>
new file mode 100644<br>
index 0000000..392fcff<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop_plugin.h<br>
@@ -0,0 +1,37 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#ifndef STACKED_PAINTOP_PLUGIN_H_<br>
+#define STACKED_PAINTOP_PLUGIN_H_<br>
+<br>
+#include <QObject><br>
+#include <QVariant><br>
+<br>
+<br>
+/**<br>
+ * A plugin wrapper that adds the paintop factories to the paintop registry.<br>
+ */<br>
+class StackedPaintOpPlugin : public QObject<br>
+{<br>
+    Q_OBJECT<br>
+public:<br>
+    StackedPaintOpPlugin(QObject *parent, const QVariantList &);<br>
+    virtual ~StackedPaintOpPlugin();<br>
+};<br>
+<br>
+#endif // STACKED_PAINTOP_PLUGIN_H_<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop_settings.cpp b/krita/plugins/paintops/stacked/stacked_paintop_settings.cpp<br>
new file mode 100644<br>
index 0000000..d67d6db<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop_settings.cpp<br>
@@ -0,0 +1,48 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#include "stacked_paintop_settings.h"<br>
+<br>
+#include <stackedop_option.h><br>
+<br>
+#include <kis_paint_action_type_option.h><br>
+#include <kis_airbrush_option.h><br>
+<br>
+StackedPaintOpSettings::StackedPaintOpSettings()<br>
+{<br>
+}<br>
+<br>
+bool StackedPaintOpSettings::paintIncremental()<br>
+{<br>
+    return (enumPaintActionType)getInt("PaintOpAction", WASH) == BUILDUP;<br>
+}<br>
+<br>
+bool StackedPaintOpSettings::isAirbrushing() const<br>
+{<br>
+    return false;<br>
+}<br>
+<br>
+int StackedPaintOpSettings::rate() const<br>
+{<br>
+    return 0;<br>
+}<br>
+<br>
+QPainterPath StackedPaintOpSettings::brushOutline(const KisPaintInformation &info, OutlineMode mode) const<br>
+{<br>
+    return QPainterPath();<br>
+}<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop_settings.h b/krita/plugins/paintops/stacked/stacked_paintop_settings.h<br>
new file mode 100644<br>
index 0000000..e6ae35f<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop_settings.h<br>
@@ -0,0 +1,40 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#ifndef KIS_STACKED_PAINTOP_SETTINGS_H_<br>
+#define KIS_STACKED_PAINTOP_SETTINGS_H_<br>
+<br>
+#include <kis_paintop_settings.h><br>
+#include <kis_types.h><br>
+<br>
+class StackedPaintOpSettings : public KisPaintOpSettings<br>
+{<br>
+<br>
+public:<br>
+    StackedPaintOpSettings();<br>
+    virtual ~StackedPaintOpSettings() {}<br>
+<br>
+    QPainterPath brushOutline(const KisPaintInformation &info, OutlineMode mode) const;<br>
+<br>
+    bool paintIncremental();<br>
+    bool isAirbrushing() const;<br>
+    int rate() const;<br>
+<br>
+};<br>
+<br>
+#endif<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop_settings_widget.cpp b/krita/plugins/paintops/stacked/stacked_paintop_settings_widget.cpp<br>
new file mode 100644<br>
index 0000000..00cd970<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop_settings_widget.cpp<br>
@@ -0,0 +1,54 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#include "stacked_paintop_settings_widget.h"<br>
+<br>
+#include <kis_paint_action_type_option.h><br>
+<br>
+#include "stacked_paintop_settings.h"<br>
+#include "stackedop_option.h"<br>
+<br>
+StackedPaintOpSettingsWidget:: StackedPaintOpSettingsWidget(QWidget* parent)<br>
+    : KisPaintOpSettingsWidget(parent)<br>
+{<br>
+    m_stackedOption = new StackedOpOption();<br>
+    addPaintOpOption(m_stackedOption, i18n("Brush size"));<br>
+    addPaintOpOption(new KisPaintActionTypeOption(), i18n("Painting Mode"));<br>
+}<br>
+<br>
+StackedPaintOpSettingsWidget::~ StackedPaintOpSettingsWidget()<br>
+{<br>
+}<br>
+<br>
+KisPropertiesConfiguration*  StackedPaintOpSettingsWidget::configuration() const<br>
+{<br>
+    StackedPaintOpSettings* config = new StackedPaintOpSettings();<br>
+    config->setOptionsWidget(const_cast<StackedPaintOpSettingsWidget*>(this));<br>
+    config->setProperty("paintop", "stackedbrush"); // XXX: make this a const id string<br>
+    writeConfiguration(config);<br>
+    return config;<br>
+}<br>
+<br>
+void StackedPaintOpSettingsWidget::changePaintOpSize(qreal x, qreal y)<br>
+{<br>
+}<br>
+<br>
+QSizeF StackedPaintOpSettingsWidget::paintOpSize() const<br>
+{<br>
+    return QSizeF(10, 10);<br>
+}<br>
diff --git a/krita/plugins/paintops/stacked/stacked_paintop_settings_widget.h b/krita/plugins/paintops/stacked/stacked_paintop_settings_widget.h<br>
new file mode 100644<br>
index 0000000..9b0a39e<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stacked_paintop_settings_widget.h<br>
@@ -0,0 +1,47 @@<br>
+/*<br>
+ *  Copyright (c) 2015 Boudewijn Rempt <<a href="mailto:boud@valdyas.org">boud@valdyas.org</a>><br>
+ *<br>
+ * This library is free software; you can redistribute it and/or<br>
+ * modify it under the terms of the GNU Library General Public<br>
+ * License as published by the Free Software Foundation; either<br>
+ * version 2 of the License, or (at your option) any later version.<br>
+ *<br>
+ * This library is distributed in the hope that it will be useful,<br>
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+ * Library General Public License for more details.<br>
+ *<br>
+ * You should have received a copy of the GNU Library General Public License<br>
+ * along with this library; see the file COPYING.LIB.  If not, write to<br>
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,<br>
+ * Boston, MA 02110-1301, USA.<br>
+ */<br>
+#ifndef KIS_STACKEDPAINTOP_SETTINGS_WIDGET_H_<br>
+#define KIS_STACKEDPAINTOP_SETTINGS_WIDGET_H_<br>
+<br>
+#include <kis_paintop_settings_widget.h><br>
+<br>
+#include "ui_wdgstackedoptions.h"<br>
+<br>
+class StackedOpOption;<br>
+<br>
+class StackedPaintOpSettingsWidget : public KisPaintOpSettingsWidget<br>
+{<br>
+    Q_OBJECT<br>
+<br>
+public:<br>
+    StackedPaintOpSettingsWidget(QWidget* parent = 0);<br>
+    virtual ~StackedPaintOpSettingsWidget();<br>
+<br>
+    KisPropertiesConfiguration* configuration() const;<br>
+<br>
+    ///Reimplemented<br>
+    void changePaintOpSize(qreal x, qreal y);<br>
+    virtual QSizeF paintOpSize() const;<br>
+private:<br>
+<br>
+    StackedOpOption *m_stackedOption;<br>
+<br>
+};<br>
+<br>
+#endif<br>
diff --git a/krita/plugins/paintops/stacked/stackedop_option.cpp b/krita/plugins/paintops/stacked/stackedop_option.cpp<br>
new file mode 100644<br>
index 0000000..17e5280<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stackedop_option.cpp<br>
@@ -0,0 +1,56 @@<br>
+/*<br>
+ *  Copyright (c) 2008,2010 Lukáš Tvrdý <<a href="mailto:lukast.dev@gmail.com">lukast.dev@gmail.com</a>><br>
+ *<br>
+ *  This program is free software; you can redistribute it and/or modify<br>
+ *  it under the terms of the GNU General Public License as published by<br>
+ *  the Free Software Foundation; either version 2 of the License, or<br>
+ *  (at your option) any later version.<br>
+ *<br>
+ *  This program is distributed in the hope that it will be useful,<br>
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>
+ *  GNU General Public License for more details.<br>
+ *<br>
+ *  You should have received a copy of the GNU General Public License<br>
+ *  along with this program; if not, write to the Free Software<br>
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<br>
+ */<br>
+#include "stackedop_option.h"<br>
+<br>
+#include "ui_wdgstackedoptions.h"<br>
+<br>
+class StackedOpOptionsWidget: public QWidget, public Ui::WdgStackedOptions<br>
+{<br>
+public:<br>
+    StackedOpOptionsWidget(QWidget *parent = 0)<br>
+        : QWidget(parent) {<br>
+        setupUi(this);<br>
+    }<br>
+};<br>
+<br>
+StackedOpOption::StackedOpOption()<br>
+    : KisPaintOpOption(KisPaintOpOption::GENERAL, false)<br>
+{<br>
+    m_checkable = false;<br>
+    m_options = new StackedOpOptionsWidget();<br>
+    m_options->hide();<br>
+<br>
+    setObjectName("StackedOpOption");<br>
+<br>
+    setConfigurationPage(m_options);<br>
+}<br>
+<br>
+StackedOpOption::~StackedOpOption()<br>
+{<br>
+    // delete m_options;<br>
+}<br>
+<br>
+void StackedOpOption::writeOptionSetting(KisPropertiesConfiguration* setting) const<br>
+{<br>
+}<br>
+<br>
+void StackedOpOption::readOptionSetting(const KisPropertiesConfiguration* setting)<br>
+{<br>
+}<br>
+<br>
+<br>
diff --git a/krita/plugins/paintops/stacked/stackedop_option.h b/krita/plugins/paintops/stacked/stackedop_option.h<br>
new file mode 100644<br>
index 0000000..f7a63dd<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stackedop_option.h<br>
@@ -0,0 +1,42 @@<br>
+/*<br>
+ *  Copyright (c) 2008,2010 Lukáš Tvrdý <<a href="mailto:lukast.dev@gmail.com">lukast.dev@gmail.com</a>><br>
+ *<br>
+ *  This program is free software; you can redistribute it and/or modify<br>
+ *  it under the terms of the GNU General Public License as published by<br>
+ *  the Free Software Foundation; either version 2 of the License, or<br>
+ *  (at your option) any later version.<br>
+ *<br>
+ *  This program is distributed in the hope that it will be useful,<br>
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>
+ *  GNU General Public License for more details.<br>
+ *<br>
+ *  You should have received a copy of the GNU General Public License<br>
+ *  along with this program; if not, write to the Free Software<br>
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<br>
+ */<br>
+#ifndef KIS_STACKEDOP_OPTION_H<br>
+#define KIS_STACKEDOP_OPTION_H<br>
+<br>
+#include <kis_paintop_option.h><br>
+#include <krita_export.h><br>
+<br>
+class StackedOpOptionsWidget;<br>
+<br>
+<br>
+class StackedOpOption : public KisPaintOpOption<br>
+{<br>
+public:<br>
+    StackedOpOption();<br>
+    ~StackedOpOption();<br>
+<br>
+    void writeOptionSetting(KisPropertiesConfiguration* setting) const;<br>
+    void readOptionSetting(const KisPropertiesConfiguration* setting);<br>
+<br>
+private:<br>
+<br>
+    StackedOpOptionsWidget * m_options;<br>
+<br>
+};<br>
+<br>
+#endif<br>
diff --git a/krita/plugins/paintops/stacked/stackedpaintop.desktop b/krita/plugins/paintops/stacked/stackedpaintop.desktop<br>
new file mode 100644<br>
index 0000000..672a602<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/stackedpaintop.desktop<br>
@@ -0,0 +1,43 @@<br>
+[Desktop Entry]<br>
+Name=Stacked brush<br>
+Name[bs]=Četka u obliku krede<br>
+Name[ca]=Pinzell de guix<br>
+Name[ca@valencia]=Pinzell de guix<br>
+Name[cs]=Křídový štětec<br>
+Name[da]=Kridtpensel<br>
+Name[de]=Kreidepinsel<br>
+Name[el]=Πινέλο κιμωλίας<br>
+Name[en_GB]=Stacked brush<br>
+Name[es]=Pincel de tiza<br>
+Name[et]=Kriidipintsel<br>
+Name[eu]=Klera-pintzela<br>
+Name[fi]=Liitusivellin<br>
+Name[fr]=Brosse craie<br>
+Name[gl]=Pincel de xiz<br>
+Name[hne]=चाक ब्रस<br>
+Name[hu]=Kréta<br>
+Name[it]=Pennello a gesso<br>
+Name[ja]=チョークブラシ<br>
+Name[kk]=Бор қылқаламы<br>
+Name[ko]=분필 브러시<br>
+Name[lt]=Kreidos teptukas<br>
+Name[lv]=Krīta ota<br>
+Name[mr]=खडू कुंचला<br>
+Name[nb]=Krittpensel<br>
+Name[nds]=Kriedpinsel<br>
+Name[nl]=Krijt-penseel<br>
+Name[pl]=Pędzel kredowy<br>
+Name[pt]=Pincel de carvão<br>
+Name[pt_BR]=Pincel de giz<br>
+Name[ru]=Мелок<br>
+Name[sk]=Kriedový štetec<br>
+Name[sv]=Kritpensel<br>
+Name[tr]=Tebeşir fırçası<br>
+Name[uk]=Крейдяний пензель<br>
+Name[wa]=Croye<br>
+Name[x-test]=xxStacked brushxx<br>
+Name[zh_TW]=粉筆刷<br>
+X-KDE-ServiceTypes=Krita/Paintop<br>
+Type=Service<br>
+X-KDE-Library=kritastackedpaintop<br>
+X-Krita-Version=28<br>
diff --git a/krita/plugins/paintops/stacked/wdgstackedoptions.ui b/krita/plugins/paintops/stacked/wdgstackedoptions.ui<br>
new file mode 100644<br>
index 0000000..d6e80ad<br>
--- /dev/null<br>
+++ b/krita/plugins/paintops/stacked/wdgstackedoptions.ui<br>
@@ -0,0 +1,40 @@<br>
+<?xml version="1.0" encoding="UTF-8"?><br>
+<ui version="4.0"><br>
+ <class>WdgStackedOptions</class><br>
+ <widget class="QWidget" name="WdgStackedOptions"><br>
+  <property name="geometry"><br>
+   <rect><br>
+    <x>0</x><br>
+    <y>0</y><br>
+    <width>330</width><br>
+    <height>192</height><br>
+   </rect><br>
+  </property><br>
+  <property name="sizePolicy"><br>
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred"><br>
+    <horstretch>210</horstretch><br>
+    <verstretch>60</verstretch><br>
+   </sizepolicy><br>
+  </property><br>
+  <property name="minimumSize"><br>
+   <size><br>
+    <width>330</width><br>
+    <height>60</height><br>
+   </size><br>
+  </property><br>
+  <layout class="QGridLayout" name="gridLayout"><br>
+   <item row="0" column="0"><br>
+    <widget class="QLabel" name="label"><br>
+     <property name="text"><br>
+      <string>Stacked Brush!!!</string><br>
+     </property><br>
+     <property name="alignment"><br>
+      <set>Qt::AlignCenter</set><br>
+     </property><br>
+    </widget><br>
+   </item><br>
+  </layout><br>
+ </widget><br>
+ <resources/><br>
+ <connections/><br>
+</ui><br>
</blockquote></div><br></div>