From kde-commits Thu Aug 31 23:21:03 2017 From: Grigory Tantsevov Date: Thu, 31 Aug 2017 23:21:03 +0000 To: kde-commits Subject: [krita/tantsevov/T6224-watercolor] plugins/paintops/watercolor: Fixed plane updates Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=150422167613642 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/plugin= s/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, K= isBaseSplatsPlane *lowL { if (useCaching) m_cachedPD =3D new KisPaintDevice(colorSpace); + m_splatsTree =3D new KoRTree(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 =3D 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 *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 +#include "KoRTree.h" = /** * Base class for the splats' containers in watercolor @@ -71,11 +72,13 @@ public: */ virtual QRect update(KisWetMap *wetMap); = - protected: QList m_splats; + KoRTree *m_splatsTree; KisBaseSplatsPlane *m_lowLvlPlane; = + KoRTree *splatsTree() const; + protected: bool m_useCaching; KisPaintDeviceSP m_cachedPD; diff --git a/plugins/paintops/watercolor/kis_fixed_splats_plane.cpp b/plugi= ns/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, c= onst 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 =3D m_splats.erase(it); + splatsTree()->remove(splat); m_cachedPD->clear(splat->boundingRect().toAlignedRect()); dirtyRect |=3D splat->boundingRect().toAlignedRect(); + QList rePaint =3D splatsTree()->intersects(spl= at->boundingRect().toAlignedRect()); + KisPainter *painter =3D new KisPainter(m_cachedPD); + Q_FOREACH(KisSplat *reSplat, rePaint) { + if (reSplat !=3D splat) + reSplat->doPaint(painter, splat->boundingRect().to= AlignedRect()); + } } } else { ++it; @@ -51,11 +57,10 @@ void KisFixedSplatsPlane::rewet(KisWetMap *wetMap, QPoi= ntF pos, qreal rad, KisBa QRectF rect(pos.x() - rad, pos.y() - rad, rad * 2, rad * 2); = - QList reweted =3D m_splatsTree.intersects(rect);\ + QList reweted =3D 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 m_splatsTree; }; = #endif // KISFIXEDSPLATSPLANE_H diff --git a/plugins/paintops/watercolor/kis_splat.cpp b/plugins/paintops/w= atercolor/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 =3D m_initSize / CalcSize(); + if (multiply < 0.f || multiply > 1.f) + multiply =3D 1; + + qint8 oldOpacity =3D painter->opacity(); + KisPainter::FillStyle oldFillStyle =3D painter->fillStyle(); + KoColor oldColor =3D painter->paintColor(); + + painter->setOpacity(START_OPACITY * multiply); + painter->setFillStyle(KisPainter::FillStyleForegroundColor); + painter->setPaintColor(m_initColor); + QPainterPath rectPath; + rectPath.addRect(rect); + QPainterPath shapeIn =3D 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 =3D m_velocities[i]; QPointF d =3D (1.f - alpha) * m_motionBias + alpha / get_random(1.= f, 1.f + m_roughness) * v; = - QPointF x1 =3D x + m_flow * d + QPointF(m_gravityX / 12, m_gravity= Y / 12)/* + QPointF x1 =3D x + m_flow * d + QPointF(m_gravityX / 10, m_gravity= Y / 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/wat= ercolor/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.cp= p 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 =3D qRound(0.5 * value); + op.radius =3D 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 uniformProperties(KisPaintOpSetting= sSP 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 m_d; diff --git a/plugins/paintops/watercolor/kis_watercolorop_option.cpp b/plug= ins/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(KisPrope= rtiesConfigurationSP sett setting->setProperty(WATERCOLOR_GRAVITY_Y, m_options->gravityY->value(= )); setting->setProperty(WATERCOLOR_TYPE, m_options->brushType->currentInd= ex()); setting->setProperty(WATERCOLOR_RADIUS, m_options->radius->value()); -// WatercolorOption op; - -// op.gravityX =3D m_options->gravityX->value(); -// op.gravityY =3D m_options->gravityY->value(); - -// op.type =3D m_options->brushType->currentIndex(); - -// op.radius =3D m_options->radius->value(); - -// op.writeOptionSettingImpl(setting); } = void KisWatercolorOpOption::readOptionSetting(const KisPropertiesConfigura= tionSP 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)= );