[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [krita/tantsevov/T6224-watercolor] /: Added gravity support. Fixed stroke finishing when close progr
From:       Grigory Tantsevov <null () kde ! org>
Date:       2017-08-31 20:43:00
Message-ID: E1dnWIm-0005rw-Oq () code ! kde ! org
[Download RAW message or body]

Git commit 904af511be01bce2cc47e423e93fbb7e74f87e46 by Grigory Tantsevov.
Committed on 31/08/2017 at 20:40.
Pushed by tantsevov into branch 'tantsevov/T6224-watercolor'.

Added gravity support. Fixed stroke finishing when close program bug.

M  +8    -3    libs/ui/tool/kis_tool_freehand.cc
M  +3    -0    libs/ui/tool/kis_tool_freehand.h
M  +7    -1    libs/ui/tool/kis_tool_freehand_helper.cpp
M  +0    -6    libs/ui/tool/kis_tool_paint.cc
M  +1    -1    libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp
M  +0    -9    plugins/paintops/watercolor/kis_base_splats_plane.cpp
M  +0    -4    plugins/paintops/watercolor/kis_base_splats_plane.h
M  +4    -5    plugins/paintops/watercolor/kis_fixed_splats_plane.cpp
M  +11   -6    plugins/paintops/watercolor/kis_splat.cpp
M  +7    -2    plugins/paintops/watercolor/kis_splat.h
M  +25   -18   plugins/paintops/watercolor/kis_splat_generator_strategy.cpp
M  +12   -6    plugins/paintops/watercolor/kis_splat_generator_strategy.h
M  +5    -3    plugins/paintops/watercolor/kis_watercolor_paintop.cpp
M  +16   -0    plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp
M  +2    -0    plugins/paintops/watercolor/kis_watercolor_paintop_settings.h

https://commits.kde.org/krita/904af511be01bce2cc47e423e93fbb7e74f87e46

diff --git a/libs/ui/tool/kis_tool_freehand.cc b/libs/ui/tool/kis_tool_freehand.cc
index 5d3b840b766..86b6d109d2a 100644
--- a/libs/ui/tool/kis_tool_freehand.cc
+++ b/libs/ui/tool/kis_tool_freehand.cc
@@ -183,12 +183,19 @@ void KisToolFreehand::deactivate()
     KisToolPaint::deactivate();
 }
 
+void KisToolFreehand::requestStrokeEnd()
+{
+    if (!m_needEndContinuedStroke && m_helper->isRunning()) {
+        m_needEndContinuedStroke = true;
+        endStroke();
+    }
+}
+
 void KisToolFreehand::initStroke(KoPointerEvent *event)
 {
     if (m_helper->isRunning()) {
         if (m_needEndContinuedStroke)
             m_needEndContinuedStroke = false;
-        qDebug() << "Inited part of continued stroke\n";
         m_helper->initPaintInContinuedStroke(event,
                                              canvas()->resourceManager(),
                                              image(),
@@ -218,11 +225,9 @@ void KisToolFreehand::doStroke(KoPointerEvent *event)
 void KisToolFreehand::endStroke()
 {
     if (currentPaintOpPreset()->settings()->needsContinuedStroke() && \
                !m_needEndContinuedStroke) {
-            qDebug() << "Finished part of continued stroke\n" << \
ppVar(m_needEndContinuedStroke);  m_helper->endPaintInContinuedStroke();
             m_updateTimer.start(100);
     } else {
-        qDebug() << "Stroke finished finaly\n" << ppVar(m_needEndContinuedStroke);
         m_helper->endPaint();
         if (m_updateTimer.isActive())
             m_updateTimer.stop();
diff --git a/libs/ui/tool/kis_tool_freehand.h b/libs/ui/tool/kis_tool_freehand.h
index f09b1c270a9..d69e925502e 100644
--- a/libs/ui/tool/kis_tool_freehand.h
+++ b/libs/ui/tool/kis_tool_freehand.h
@@ -55,6 +55,9 @@ public Q_SLOTS:
     void activate(ToolActivation toolActivation, const QSet<KoShape*> &shapes) \
override;  void deactivate() override;
 
+public Q_SLOTS:
+    void requestStrokeEnd() override;
+
 protected:
     bool tryPickByPaintOp(KoPointerEvent *event, AlternateAction action);
 
diff --git a/libs/ui/tool/kis_tool_freehand_helper.cpp \
b/libs/ui/tool/kis_tool_freehand_helper.cpp index a40a75f93a2..9b6da46ed2b 100644
--- a/libs/ui/tool/kis_tool_freehand_helper.cpp
+++ b/libs/ui/tool/kis_tool_freehand_helper.cpp
@@ -104,6 +104,8 @@ struct KisToolFreehandHelper::Private
     int canvasRotation;
     bool canvasMirroredH;
 
+    bool strokeNotFinished;
+
     qreal effectiveSmoothnessDistance() const;
 };
 
@@ -134,6 +136,8 @@ KisToolFreehandHelper::KisToolFreehandHelper(KisPaintingInformationBuilder \
*info  [this]() {
                     emit requestExplicitUpdateOutline();
                 });
+
+    m_d->strokeNotFinished = false;
 }
 
 KisToolFreehandHelper::~KisToolFreehandHelper()
@@ -164,7 +168,7 @@ QPainterPath KisToolFreehandHelper::paintOpOutline(const QPointF \
&savedCursorPos  info.setCanvasHorizontalMirrorState( m_d->canvasMirroredH );
     KisDistanceInformation distanceInfo(prevPoint, 0, startAngle);
 
-    if (!m_d->painterInfos.isEmpty()) {
+    if (!m_d->painterInfos.isEmpty() && !m_d->strokeNotFinished) {
         settings = m_d->resources->currentPaintOpPreset()->settings();
         if (m_d->stabilizerDelayedPaintHelper.running() &&
                 m_d->stabilizerDelayedPaintHelper.hasLastPaintInformation()) {
@@ -602,6 +606,7 @@ void KisToolFreehandHelper::paint(KisPaintInformation &info)
 
 void KisToolFreehandHelper::endPaint()
 {
+    m_d->strokeNotFinished = false;
     if (!m_d->hasPaintAtLeastOnce) {
         paintAt(m_d->previousPaintInformation);
     } else if (m_d->smoothingOptions->smoothingType() != \
KisSmoothingOptions::NO_SMOOTHING) { @@ -668,6 +673,7 @@ void \
KisToolFreehandHelper::initPaintInContinuedStroke(KoPointerEvent *event,  
 void KisToolFreehandHelper::endPaintInContinuedStroke()
 {
+    m_d->strokeNotFinished = true;
     if (!m_d->hasPaintAtLeastOnce) {
         paintAt(m_d->previousPaintInformation);
     }
diff --git a/libs/ui/tool/kis_tool_paint.cc b/libs/ui/tool/kis_tool_paint.cc
index c14f3515ea1..ba1d3409189 100644
--- a/libs/ui/tool/kis_tool_paint.cc
+++ b/libs/ui/tool/kis_tool_paint.cc
@@ -686,9 +686,6 @@ QRectF KisToolPaint::colorPreviewDocRect(const QPointF \
&outlineDocPoint)  
 void KisToolPaint::requestUpdateOutline(const QPointF &outlineDocPoint, const \
KoPointerEvent *event)  {
-    ENTER_FUNCTION() << ppVar(outlineDocPoint) << ppVar(m_supportOutline);
-
-
     if (!m_supportOutline) return;
 
     KisConfig cfg;
@@ -717,7 +714,6 @@ void KisToolPaint::requestUpdateOutline(const QPointF \
&outlineDocPoint, const Ko  
     m_outlineDocPoint = outlineDocPoint;
     m_currentOutline = getOutlinePath(m_outlineDocPoint, event, outlineMode);
-
     QRectF outlinePixelRect = m_currentOutline.boundingRect();
     QRectF outlineDocRect = currentImage()->pixelToDocument(outlinePixelRect);
 
@@ -743,8 +739,6 @@ void KisToolPaint::requestUpdateOutline(const QPointF \
                &outlineDocPoint, const Ko
     // DIRTY HACK ALERT: we should fetch the assistant's dirty rect when requesting
     //                   the update, instead of just dumbly update the entire \
canvas!  
-    ENTER_FUNCTION() << ppVar(outlineDocRect);
-
     KisCanvas2 * kiscanvas = dynamic_cast<KisCanvas2*>(canvas());
     KisPaintingAssistantsDecorationSP decoration = \
kiscanvas->paintingAssistantsDecoration();  if (decoration && decoration->visible()) \
                {
diff --git a/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp \
b/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp index \
                1263c2a806c..453cb66817f 100644
--- a/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp
+++ b/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp
@@ -323,8 +323,8 @@ void KisPainterBasedStrokeStrategy::resumeStrokeCallback()
 
 void KisPainterBasedStrokeStrategy::doStrokeCallback(KisStrokeJobData *data)
 {
-    qDebug() << "Updating resources";
     UpdateResourceData *d = dynamic_cast<UpdateResourceData *>(data);
+    KIS_SAFE_ASSERT_RECOVER_RETURN(d);
     m_resources->setBrush(d->preset);
     m_resources->setFGColorOverride(d->fgColor);
     m_resources->setBGColorOverride(d->bgColor);
diff --git a/plugins/paintops/watercolor/kis_base_splats_plane.cpp \
b/plugins/paintops/watercolor/kis_base_splats_plane.cpp index \
                77e4c48449e..ff162f5bed9 100644
--- a/plugins/paintops/watercolor/kis_base_splats_plane.cpp
+++ b/plugins/paintops/watercolor/kis_base_splats_plane.cpp
@@ -22,7 +22,6 @@
 
 KisBaseSplatsPlane::KisBaseSplatsPlane(bool useCaching, KisBaseSplatsPlane \
*lowLvlPlane, const KoColorSpace* colorSpace)  : m_lowLvlPlane(lowLvlPlane),
-      m_isDirty(true),
       m_useCaching(useCaching)
 {
     if (useCaching)
@@ -81,11 +80,9 @@ QRect KisBaseSplatsPlane::update(KisWetMap *wetMap)
             {
                 // move to protected call to parent class
                 it = m_splats.erase(it);
-                setDirty(splat);
                 dirtyRect |= splat->boundingRect().toAlignedRect();
             }
         } else {
-            setDirty(splat);
             dirtyRect |= splat->boundingRect().toAlignedRect();
             ++it;
         }
@@ -93,9 +90,3 @@ QRect KisBaseSplatsPlane::update(KisWetMap *wetMap)
 
     return dirtyRect;
 }
-
-void KisBaseSplatsPlane::setDirty(KisSplat *splat)
-{
-    m_dirtySplats << splat;
-    m_isDirty = true;
-}
diff --git a/plugins/paintops/watercolor/kis_base_splats_plane.h \
b/plugins/paintops/watercolor/kis_base_splats_plane.h index 49bccafc3e9..4cc21529a99 \
                100644
--- a/plugins/paintops/watercolor/kis_base_splats_plane.h
+++ b/plugins/paintops/watercolor/kis_base_splats_plane.h
@@ -77,13 +77,9 @@ protected:
     KisBaseSplatsPlane *m_lowLvlPlane;
 
 protected:
-    void setDirty(KisSplat *splat);
-    QList<KisSplat *> m_dirtySplats;
     bool m_useCaching;
     KisPaintDeviceSP m_cachedPD;
 
-private:
-    bool m_isDirty;
 };
 
 #endif // KIS_ABSTRACT_SPLATS_PLANE_H
diff --git a/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp \
b/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp index \
                957cb3a2ba1..aab37362603 100644
--- a/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp
+++ b/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp
@@ -26,6 +26,7 @@ KisFixedSplatsPlane::KisFixedSplatsPlane(KisBaseSplatsPlane \
*driedPlane, const K  
 QRect KisFixedSplatsPlane::update(KisWetMap *wetMap)
 {
+    QRect dirtyRect;
     for (auto it = m_splats.begin(); it != m_splats.end();) {
         KisSplat *splat = *it;
 
@@ -34,17 +35,15 @@ QRect KisFixedSplatsPlane::update(KisWetMap *wetMap)
             {
                 // move to protected call to parent class
                 it = m_splats.erase(it);
-                if (m_useCaching) {
-                    m_cachedPD->clear(splat->boundingRect().toAlignedRect());
-                }
-                setDirty(splat);
+                m_cachedPD->clear(splat->boundingRect().toAlignedRect());
+                dirtyRect |= splat->boundingRect().toAlignedRect();
             }
         } else {
             ++it;
         }
     }
 
-    return QRect();
+    return dirtyRect;
 }
 
 void KisFixedSplatsPlane::rewet(KisWetMap *wetMap, QPointF pos, qreal rad, \
                KisBaseSplatsPlane *flowingPlane)
diff --git a/plugins/paintops/watercolor/kis_splat.cpp \
b/plugins/paintops/watercolor/kis_splat.cpp index 1464b7cdfdf..1dda8bdc2f8 100644
--- a/plugins/paintops/watercolor/kis_splat.cpp
+++ b/plugins/paintops/watercolor/kis_splat.cpp
@@ -35,9 +35,11 @@ double get_random(qreal min, qreal max)
 }
 
 
-KisSplat::KisSplat(QPointF offset, int width, const KoColor &color)
+KisSplat::KisSplat(QPointF offset, int width, const KoColor &color,
+                   int gravityX, int gravityY)
     : m_life(STANDART_LIFETIME), m_roughness(1.f), m_flow(1.f),
-      m_motionBias(QPointF(0.f, 0.f)), m_state(Flowing)
+      m_motionBias(QPointF(0.f, 0.f)), m_state(Flowing),
+      m_gravityX(gravityX), m_gravityY(gravityY)
 {
     m_initColor.fromKoColor(color);
     m_fix = STANDART_LIFETIME;
@@ -62,9 +64,11 @@ KisSplat::KisSplat(QPointF offset, int width, const KoColor \
&color)  }
 
 KisSplat::KisSplat(QPointF offset, QPointF velocityBias, int width, int life,
-                   qreal roughness, qreal flow, qreal radialSpeed, const KoColor \
&color) +                   qreal roughness, qreal flow, qreal radialSpeed, const \
KoColor &color, +                   int gravityX, int gravityY)
     : m_life(life), m_roughness(roughness), m_flow(flow),
-      m_motionBias(velocityBias), m_state(Flowing)
+      m_motionBias(velocityBias), m_state(Flowing),
+      m_gravityX(gravityX), m_gravityY(gravityY)
 {
     m_initColor.fromKoColor(color);
     m_fix = STANDART_LIFETIME;
@@ -190,8 +194,9 @@ int KisSplat::update(KisWetMap *wetMap)
         QPointF v = m_velocities[i];
         QPointF d = (1.f - alpha) * m_motionBias + alpha / get_random(1.f, 1.f + \
m_roughness) * v;  
-        QPointF x1 = x + m_flow * d; + QPointF(get_random(-m_roughness, \
                m_roughness),
-                                               get_random(-m_roughness, \
m_roughness)); +        QPointF x1 = x + m_flow * d + QPointF(m_gravityX / 12, \
m_gravityY / 12)/* +                + QPointF(get_random(-m_roughness, m_roughness) / \
5, +                          get_random(-m_roughness, m_roughness) / 5)*/;
         newVertices.push_back(x1);
     }
     QVector<int> wetPoints = wetMap->getWater(newVertices);
diff --git a/plugins/paintops/watercolor/kis_splat.h \
b/plugins/paintops/watercolor/kis_splat.h index 8c07853530c..ae7cef7e919 100644
--- a/plugins/paintops/watercolor/kis_splat.h
+++ b/plugins/paintops/watercolor/kis_splat.h
@@ -45,9 +45,11 @@ public:
         Dried
     };
 
-    KisSplat(QPointF offset, int width, const KoColor &color);
+    KisSplat(QPointF offset, int width, const KoColor &color,
+             int gravityX, int gravityY);
     KisSplat(QPointF offset, QPointF velocityBias, int width, int life,
-          qreal roughness, qreal flow, qreal radialSpeed, const KoColor &color);
+             qreal roughness, qreal flow, qreal radialSpeed, const KoColor &color,
+             int gravityX, int gravityY);
 
     void doPaint(KisPainter *painter);
 
@@ -79,6 +81,9 @@ private:
     int m_state;
 
     QPainterPath m_oldPath;
+
+    int m_gravityX,
+        m_gravityY;
 };
 
 #endif
diff --git a/plugins/paintops/watercolor/kis_splat_generator_strategy.cpp \
b/plugins/paintops/watercolor/kis_splat_generator_strategy.cpp index \
                2d60100e764..365ead9628a 100644
--- a/plugins/paintops/watercolor/kis_splat_generator_strategy.cpp
+++ b/plugins/paintops/watercolor/kis_splat_generator_strategy.cpp
@@ -22,18 +22,19 @@
 
 #include <QVector2D>
 
-QList<KisSplat *> KisSimpleBrushGenerator::generate(KisWetMap *wetMap, QPointF pos, \
qreal radius, const KoColor &color) +QList<KisSplat *> \
KisSimpleBrushGenerator::generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color, int gravityX, int gravityY)  {
     QList<KisSplat *> ret;
     KisSplat *newSplat = new KisSplat(pos, radius,
-                                      color);
+                                      color,
+                                      gravityX, gravityY);
     wetMap->addWater(pos.toPoint(), radius / 2);
     ret << newSplat;
 
     return ret;
 }
 
-QList<KisSplat *> KisWetOnDryGenerator::generate(KisWetMap *wetMap, QPointF pos, \
qreal radius, const KoColor &color) +QList<KisSplat *> \
KisWetOnDryGenerator::generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color, int gravityX, int gravityY)  {
     QList<KisSplat *> ret;
     wetMap->addWater(pos.toPoint(), radius / 2);
@@ -45,7 +46,8 @@ QList<KisSplat *> KisWetOnDryGenerator::generate(KisWetMap *wetMap, \
QPointF pos,  QVector2D offset;
 
     KisSplat *splat = new KisSplat(pos, radius,
-                                   color);
+                                   color,
+                                   gravityX, gravityY);
     ret << splat;
 
     for (int i = 0; i < 6; i++) {
@@ -60,27 +62,29 @@ QList<KisSplat *> KisWetOnDryGenerator::generate(KisWetMap \
*wetMap, QPointF pos,  0.5f * radialSpeed,
                              1.f,
                              radialSpeed,
-                             color);
+                             color,
+                             gravityX, gravityY);
         ret << splat;
     }
     return ret;
 }
 
-QList<KisSplat *> KisCrunchyGenerator::generate(KisWetMap *wetMap, QPointF pos, \
qreal radius, const KoColor &color) +QList<KisSplat *> \
KisCrunchyGenerator::generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color, int gravityX, int gravityY)  {
     QList<KisSplat *> ret;
     wetMap->addWater(pos.toPoint(), radius / 2);
 
     KisSplat *splat = new KisSplat(pos,
-                                      QPointF(0, 0),
-                                      radius,
-                                      15, 5, 0.25f, 2.f,
-                                   color);
+                                   QPointF(0, 0),
+                                   radius,
+                                   30, 5, 0.25f, 2.f,
+                                   color,
+                                   gravityX, gravityY);
     ret << splat;
     return ret;
 }
 
-QList<KisSplat *> KisWetOnWetGenerator::generate(KisWetMap *wetMap, QPointF pos, \
qreal radius, const KoColor &color) +QList<KisSplat *> \
KisWetOnWetGenerator::generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color, int gravityX, int gravityY)  {
     QList<KisSplat *> ret;
     wetMap->addWater(pos.toPoint(), radius / 2);
@@ -91,20 +95,22 @@ QList<KisSplat *> KisWetOnWetGenerator::generate(KisWetMap \
*wetMap, QPointF pos,  KisSplat *splat = new KisSplat(pos,
                                    QPointF(0, 0),
                                    bigD,
-                                   15, 5, 1.f, 2.f,
-                                   color);
+                                   30, 5, 1.f, 2.f,
+                                   color,
+                                   gravityX, gravityY);
     ret << splat;
 
     splat = new KisSplat(pos,
                          QPointF(0, 0),
                          smallD,
-                         15, 5, 1.f, 2.f,
-                         color);
+                         30, 5, 1.f, 2.f,
+                         color,
+                         gravityX, gravityY);
     ret << splat;
     return ret;
 }
 
-QList<KisSplat *> KisBlobbyGenerator::generate(KisWetMap *wetMap, QPointF pos, qreal \
radius, const KoColor &color) +QList<KisSplat *> \
KisBlobbyGenerator::generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color, int gravityX, int gravityY)  {
     QList<KisSplat *> ret;
     wetMap->addWater(pos.toPoint(), radius / 2);
@@ -134,8 +140,9 @@ QList<KisSplat *> KisBlobbyGenerator::generate(KisWetMap *wetMap, \
QPointF pos, q  splat = new KisSplat(posN,
                              QPointF(0, 0),
                              size,
-                             15, 5, 1.f, 2.f,
-                             color);
+                             30, 5, 1.f, 2.f,
+                             color,
+                             gravityX, gravityY);
         ret << splat;
     }
 
diff --git a/plugins/paintops/watercolor/kis_splat_generator_strategy.h \
b/plugins/paintops/watercolor/kis_splat_generator_strategy.h index \
                cb73d28446e..e96368662eb 100644
--- a/plugins/paintops/watercolor/kis_splat_generator_strategy.h
+++ b/plugins/paintops/watercolor/kis_splat_generator_strategy.h
@@ -30,38 +30,44 @@ class KisSplatGeneratorStrategy
 {
 public:
     virtual ~KisSplatGeneratorStrategy(){}
-    virtual QList<KisSplat *> generate(KisWetMap *wetMap, QPointF pos, qreal radius, \
const KoColor &color) = 0; +    virtual QList<KisSplat *> generate(KisWetMap *wetMap, \
QPointF pos, qreal radius, const KoColor &color, +                                    \
int gravityX, int gravityY) = 0;  
 };
 
 class KisSimpleBrushGenerator : public KisSplatGeneratorStrategy
 {
 public:
-    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color) override; +    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF \
pos, qreal radius, const KoColor &color, +                               int \
gravityX, int gravityY) override;  };
 
 class KisWetOnDryGenerator : public KisSplatGeneratorStrategy
 {
 public:
-    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color) override; +    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF \
pos, qreal radius, const KoColor &color, +                               int \
gravityX, int gravityY) override;  };
 
 class KisCrunchyGenerator : public KisSplatGeneratorStrategy
 {
 public:
-    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color) override; +    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF \
pos, qreal radius, const KoColor &color, +                               int \
gravityX, int gravityY) override;  };
 
 class KisWetOnWetGenerator : public KisSplatGeneratorStrategy
 {
 public:
-    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color) override; +    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF \
pos, qreal radius, const KoColor &color, +                               int \
gravityX, int gravityY) override;  };
 
 class KisBlobbyGenerator : public KisSplatGeneratorStrategy
 {
 public:
-    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF pos, qreal radius, const \
KoColor &color) override; +    QList<KisSplat *> generate(KisWetMap *wetMap, QPointF \
pos, qreal radius, const KoColor &color, +                               int \
gravityX, int gravityY) override;  };
 
 #endif // KIS_SPLAT_GENERATOR_STRATEGY_H
diff --git a/plugins/paintops/watercolor/kis_watercolor_paintop.cpp \
b/plugins/paintops/watercolor/kis_watercolor_paintop.cpp index \
                37bdd83ca7a..c990e1a8582 100644
--- a/plugins/paintops/watercolor/kis_watercolor_paintop.cpp
+++ b/plugins/paintops/watercolor/kis_watercolor_paintop.cpp
@@ -72,9 +72,11 @@ KisSpacingInformation KisWatercolorPaintOp::paintAt(const \
KisPaintInformation &i  
     QList<KisSplat *> newSplats =
             strategy->generate(m_wetMap,
-                       info.pos(),
-                       m_watercolorOption.radius,
-                       painter()->paintColor());
+                               info.pos(),
+                               m_watercolorOption.radius,
+                               painter()->paintColor(),
+                               m_watercolorOption.gravityX,
+                               m_watercolorOption.gravityY);
 
     const QString oldCompositeOpId = painter()->compositeOp()->id();
     painter()->setCompositeOp(COMPOSITE_OVER);
diff --git a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp \
b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp index \
                fdf297c8163..db6de566f16 100644
--- a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp
+++ b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp
@@ -204,3 +204,19 @@ bool KisWatercolorPaintOpSettings::needsContinuedStroke()
 {
     return true;
 }
+
+QPainterPath KisWatercolorPaintOpSettings::brushOutline(const KisPaintInformation \
&info, KisPaintOpSettings::OutlineMode mode) +{
+    QPainterPath path;
+    if (mode == CursorIsOutline || mode == CursorIsCircleOutline || mode == \
CursorTiltOutline) { +        qreal size = getInt(WATERCOLOR_RADIUS) + 1;
+        path = ellipseOutline(size, size, 1.0, 0.0);
+
+        if (mode == CursorTiltOutline) {
+            path.addPath(makeTiltIndicator(info, QPointF(0.0, 0.0), size * 0.5, \
3.0)); +        }
+
+        path.translate(info.pos());
+    }
+    return path;
+}
diff --git a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h \
b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h index \
                5dd7eefbdf9..7d901a1b9b1 100644
--- a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h
+++ b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h
@@ -39,6 +39,8 @@ public:
 
     bool needsContinuedStroke() override;
 
+    QPainterPath brushOutline(const KisPaintInformation &info, OutlineMode mode) \
override; +
 private:
     struct Private;
     const QScopedPointer<Private> m_d;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic