[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [krita/tantsevov/T6224-watercolor] plugins/paintops/watercolor: Fixed plane updates
From: Grigory Tantsevov <null () kde ! org>
Date: 2017-08-31 23:21:03
Message-ID: E1dnYlj-0003Gf-R6 () code ! kde ! org
[Download RAW message or body]
Git commit 4fbea5b9f201456ebd4728dbef2f3bcc3f2fe534 by Grigory Tantsevov.
Committed on 31/08/2017 at 23:20.
Pushed by tantsevov into branch 'tantsevov/T6224-watercolor'.
Fixed plane updates
Ref T6224
M +9 -1 plugins/paintops/watercolor/kis_base_splats_plane.cpp
M +4 -1 plugins/paintops/watercolor/kis_base_splats_plane.h
M +9 -4 plugins/paintops/watercolor/kis_fixed_splats_plane.cpp
M +0 -2 plugins/paintops/watercolor/kis_fixed_splats_plane.h
M +24 -1 plugins/paintops/watercolor/kis_splat.cpp
M +1 -0 plugins/paintops/watercolor/kis_splat.h
M +5 -1 plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp
M +3 -3 plugins/paintops/watercolor/kis_watercolor_paintop_settings.h
M +2 -15 plugins/paintops/watercolor/kis_watercolorop_option.cpp
https://commits.kde.org/krita/4fbea5b9f201456ebd4728dbef2f3bcc3f2fe534
diff --git a/plugins/paintops/watercolor/kis_base_splats_plane.cpp \
b/plugins/paintops/watercolor/kis_base_splats_plane.cpp index \
ff162f5bed9..eea58db66ce 100644
--- a/plugins/paintops/watercolor/kis_base_splats_plane.cpp
+++ b/plugins/paintops/watercolor/kis_base_splats_plane.cpp
@@ -26,6 +26,7 @@ KisBaseSplatsPlane::KisBaseSplatsPlane(bool useCaching, \
KisBaseSplatsPlane *lowL {
if (useCaching)
m_cachedPD = new KisPaintDevice(colorSpace);
+ m_splatsTree = new KoRTree<KisSplat*>(4, 2);
}
KisBaseSplatsPlane::~KisBaseSplatsPlane()
@@ -36,6 +37,7 @@ KisBaseSplatsPlane::~KisBaseSplatsPlane()
void KisBaseSplatsPlane::add(KisSplat *splat)
{
m_splats << splat;
+ m_splatsTree->insert(splat->boundingRect().toAlignedRect(), splat);
if (m_useCaching) {
KisPainter *painter = new KisPainter(m_cachedPD);
splat->doPaint(painter);
@@ -45,6 +47,7 @@ void KisBaseSplatsPlane::add(KisSplat *splat)
void KisBaseSplatsPlane::remove(KisSplat *splat)
{
m_splats.removeOne(splat);
+ m_splatsTree->remove(splat);
if (m_useCaching) {
m_cachedPD->clear(splat->boundingRect().toAlignedRect());
}
@@ -61,7 +64,7 @@ void KisBaseSplatsPlane::paint(KisPainter *gc, QRect rect)
rect);
} else {
Q_FOREACH (KisSplat *splat, m_splats) {
- if (rect.contains(splat->boundingRect().toAlignedRect()))
+// if (rect.contains(splat->boundingRect().toAlignedRect()))
splat->doPaint(gc);
}
}
@@ -90,3 +93,8 @@ QRect KisBaseSplatsPlane::update(KisWetMap *wetMap)
return dirtyRect;
}
+
+KoRTree<KisSplat *> *KisBaseSplatsPlane::splatsTree() const
+{
+ return m_splatsTree;
+}
diff --git a/plugins/paintops/watercolor/kis_base_splats_plane.h \
b/plugins/paintops/watercolor/kis_base_splats_plane.h index 4cc21529a99..6f93b32c8b5 \
100644
--- a/plugins/paintops/watercolor/kis_base_splats_plane.h
+++ b/plugins/paintops/watercolor/kis_base_splats_plane.h
@@ -25,6 +25,7 @@
#include "kis_wetmap.h"
#include "kis_paint_device.h"
#include <QRect>
+#include "KoRTree.h"
/**
* Base class for the splats' containers in watercolor
@@ -71,11 +72,13 @@ public:
*/
virtual QRect update(KisWetMap *wetMap);
-
protected:
QList<KisSplat*> m_splats;
+ KoRTree<KisSplat *> *m_splatsTree;
KisBaseSplatsPlane *m_lowLvlPlane;
+ KoRTree<KisSplat *> *splatsTree() const;
+
protected:
bool m_useCaching;
KisPaintDeviceSP m_cachedPD;
diff --git a/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp \
b/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp index \
aab37362603..6e78f0eef68 100644
--- a/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp
+++ b/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp
@@ -19,8 +19,7 @@
#include "kis_fixed_splats_plane.h"
KisFixedSplatsPlane::KisFixedSplatsPlane(KisBaseSplatsPlane *driedPlane, const \
KoColorSpace *colorSpace)
- : KisBaseSplatsPlane(true, driedPlane, colorSpace),
- m_splatsTree(4, 2)
+ : KisBaseSplatsPlane(true, driedPlane, colorSpace)
{
}
@@ -35,8 +34,15 @@ QRect KisFixedSplatsPlane::update(KisWetMap *wetMap)
{
// move to protected call to parent class
it = m_splats.erase(it);
+ splatsTree()->remove(splat);
m_cachedPD->clear(splat->boundingRect().toAlignedRect());
dirtyRect |= splat->boundingRect().toAlignedRect();
+ QList<KisSplat *> rePaint = \
splatsTree()->intersects(splat->boundingRect().toAlignedRect()); + \
KisPainter *painter = new KisPainter(m_cachedPD); + Q_FOREACH(KisSplat \
*reSplat, rePaint) { + if (reSplat != splat)
+ reSplat->doPaint(painter, \
splat->boundingRect().toAlignedRect()); + }
}
} else {
++it;
@@ -51,11 +57,10 @@ void KisFixedSplatsPlane::rewet(KisWetMap *wetMap, QPointF pos, \
qreal rad, KisBa QRectF rect(pos.x() - rad, pos.y() - rad,
rad * 2, rad * 2);
- QList<KisSplat *> reweted = m_splatsTree.intersects(rect);\
+ QList<KisSplat *> reweted = splatsTree()->intersects(rect);\
Q_FOREACH(KisSplat *splat, reweted) {
splat->rewet(wetMap, pos, rad);
remove(splat);
- m_splatsTree.remove(splat);
flowingPlane->add(splat);
}
}
diff --git a/plugins/paintops/watercolor/kis_fixed_splats_plane.h \
b/plugins/paintops/watercolor/kis_fixed_splats_plane.h index 8f6fbb8653c..14829b4264e \
100644
--- a/plugins/paintops/watercolor/kis_fixed_splats_plane.h
+++ b/plugins/paintops/watercolor/kis_fixed_splats_plane.h
@@ -20,7 +20,6 @@
#define KISFIXEDSPLATSPLANE_H
#include "kis_base_splats_plane.h"
-#include "KoRTree.h"
class KisFixedSplatsPlane : public KisBaseSplatsPlane
{
@@ -33,7 +32,6 @@ public:
private:
KisBaseSplatsPlane *m_flowingPlane;
- KoRTree<KisSplat *> m_splatsTree;
};
#endif // KISFIXEDSPLATSPLANE_H
diff --git a/plugins/paintops/watercolor/kis_splat.cpp \
b/plugins/paintops/watercolor/kis_splat.cpp index 1dda8bdc2f8..4604a7c4ff1 100644
--- a/plugins/paintops/watercolor/kis_splat.cpp
+++ b/plugins/paintops/watercolor/kis_splat.cpp
@@ -151,6 +151,29 @@ void KisSplat::doPaint(KisPainter *painter)
painter->setPaintColor(oldColor);
}
+void KisSplat::doPaint(KisPainter *painter, QRectF rect)
+{
+ qreal multiply = m_initSize / CalcSize();
+ if (multiply < 0.f || multiply > 1.f)
+ multiply = 1;
+
+ qint8 oldOpacity = painter->opacity();
+ KisPainter::FillStyle oldFillStyle = painter->fillStyle();
+ KoColor oldColor = painter->paintColor();
+
+ painter->setOpacity(START_OPACITY * multiply);
+ painter->setFillStyle(KisPainter::FillStyleForegroundColor);
+ painter->setPaintColor(m_initColor);
+ QPainterPath rectPath;
+ rectPath.addRect(rect);
+ QPainterPath shapeIn = shape().intersected(rectPath);
+ painter->fillPainterPath(shapeIn);
+
+ painter->setOpacity(oldOpacity);
+ painter->setFillStyle(oldFillStyle);
+ painter->setPaintColor(oldColor);
+}
+
QPainterPath KisSplat::shape() const
{
QPainterPath path;
@@ -194,7 +217,7 @@ 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(m_gravityX / 12, m_gravityY / 12)/*
+ QPointF x1 = x + m_flow * d + QPointF(m_gravityX / 10, m_gravityY / 10)/*
+ QPointF(get_random(-m_roughness, m_roughness) / 5,
get_random(-m_roughness, m_roughness) / 5)*/;
newVertices.push_back(x1);
diff --git a/plugins/paintops/watercolor/kis_splat.h \
b/plugins/paintops/watercolor/kis_splat.h index ae7cef7e919..4c6c6ea1b08 100644
--- a/plugins/paintops/watercolor/kis_splat.h
+++ b/plugins/paintops/watercolor/kis_splat.h
@@ -52,6 +52,7 @@ public:
int gravityX, int gravityY);
void doPaint(KisPainter *painter);
+ void doPaint(KisPainter *painter, QRectF rect);
QPainterPath shape() const;
QRectF boundingRect() const;
diff --git a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp \
b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp index \
db6de566f16..1a1c57ad64a 100644
--- a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp
+++ b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.cpp
@@ -46,16 +46,20 @@ bool KisWatercolorPaintOpSettings::paintIncremental()
void KisWatercolorPaintOpSettings::setPaintOpSize(qreal value)
{
+ qDebug() << "\n setSize";
WatercolorOption op;
op.readOptionSettingImpl(this);
- op.radius = qRound(0.5 * value);
+ op.radius = value;
+ qDebug() << ppVar(op.radius);
op.writeOptionSettingImpl(this);
}
qreal KisWatercolorPaintOpSettings::paintOpSize() const
{
+ qDebug() << "\nreadSize";
WatercolorOption op;
op.readOptionSettingImpl(this);
+ qDebug() << ppVar(op.radius);
return op.radius;
}
diff --git a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h \
b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h index \
7d901a1b9b1..91dbf8e88c9 100644
--- a/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h
+++ b/plugins/paintops/watercolor/kis_watercolor_paintop_settings.h
@@ -32,15 +32,15 @@ public:
bool paintIncremental() override;
- void setPaintOpSize(qreal value) override;
- qreal paintOpSize() const override;
-
QList<KisUniformPaintOpPropertySP> uniformProperties(KisPaintOpSettingsSP \
settings);
bool needsContinuedStroke() override;
QPainterPath brushOutline(const KisPaintInformation &info, OutlineMode mode) \
override;
+ void setPaintOpSize(qreal value) override;
+ qreal paintOpSize() const override;
+
private:
struct Private;
const QScopedPointer<Private> m_d;
diff --git a/plugins/paintops/watercolor/kis_watercolorop_option.cpp \
b/plugins/paintops/watercolor/kis_watercolorop_option.cpp index \
63e76ab3499..222cc66daaf 100644
--- a/plugins/paintops/watercolor/kis_watercolorop_option.cpp
+++ b/plugins/paintops/watercolor/kis_watercolorop_option.cpp
@@ -43,8 +43,8 @@ public:
gravityY->setSingleStep(1.0);
radius->setRange(0.0, 1000.0);
- radius->setPrefix("px");
- radius->setValue(25);
+ radius->setSuffix(i18n(" px"));
+ radius->setValue(100.0);
radius->setSingleStep(1.0);
}
};
@@ -75,23 +75,10 @@ void \
KisWatercolorOpOption::writeOptionSetting(KisPropertiesConfigurationSP \
sett
setting->setProperty(WATERCOLOR_GRAVITY_Y, m_options->gravityY->value());
setting->setProperty(WATERCOLOR_TYPE, m_options->brushType->currentIndex());
setting->setProperty(WATERCOLOR_RADIUS, m_options->radius->value());
-// WatercolorOption op;
-
-// op.gravityX = m_options->gravityX->value();
-// op.gravityY = m_options->gravityY->value();
-
-// op.type = m_options->brushType->currentIndex();
-
-// op.radius = m_options->radius->value();
-
-// op.writeOptionSettingImpl(setting);
}
void KisWatercolorOpOption::readOptionSetting(const KisPropertiesConfigurationSP \
setting) {
-// WatercolorOption op;
-// op.readOptionSettingImpl(setting);
-
m_options->gravityX->setValue(setting->getDouble(WATERCOLOR_GRAVITY_X));
m_options->gravityY->setValue(setting->getDouble(WATERCOLOR_GRAVITY_Y));
m_options->brushType->setCurrentIndex(setting->getInt(WATERCOLOR_TYPE));
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic