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

List:       kde-kimageshop
Subject:    [graphics/krita/krita/4.3] libs: Fill Layers: create layer without additional update jobs
From:       L. E. Segovia <null () kde ! org>
Date:       2020-08-18 23:04:39
Message-ID: 20200818230439.3B2E41240178 () leptone ! kde ! org
[Download RAW message or body]

Git commit 8c3a4c8dc9268bf434007e4ce07b2a8821cec405 by L. E. Segovia.
Committed on 18/08/2020 at 22:51.
Pushed by lsegovia into branch 'krita/4.3'.

Fill Layers: create layer without additional update jobs

This still preserves a last setFilter which fixes in-place the
configuration, as the updates are throttled via the dialog's signal
compressor.

CCMAIL: kimageshop@kde.org

M  +21   -4    libs/image/generator/kis_generator_layer.cpp
M  +13   -1    libs/image/generator/kis_generator_layer.h
M  +3    -3    libs/image/generator/kis_generator_stroke_strategy.cpp
M  +3    -2    libs/ui/dialogs/kis_dlg_generator_layer.cpp

https://invent.kde.org/graphics/krita/commit/8c3a4c8dc9268bf434007e4ce07b2a8821cec405

diff --git a/libs/image/generator/kis_generator_layer.cpp \
b/libs/image/generator/kis_generator_layer.cpp index cd973972e7..a79a0006a4 100644
--- a/libs/image/generator/kis_generator_layer.cpp
+++ b/libs/image/generator/kis_generator_layer.cpp
@@ -78,13 +78,18 @@ KisGeneratorLayer::~KisGeneratorLayer()
 }
 
 void KisGeneratorLayer::setFilter(KisFilterConfigurationSP filterConfig)
+{
+    setFilterWithoutUpdate(filterConfig);
+    m_d->updateSignalCompressor.start();
+}
+
+void KisGeneratorLayer::setFilterWithoutUpdate(KisFilterConfigurationSP \
filterConfig)  {
     KisSelectionBasedLayer::setFilter(filterConfig);
     {
         QMutexLocker(&m_d->mutex);
         m_d->preparedRect = QRect();
     }
-    m_d->updateSignalCompressor.start();
 }
 
 void KisGeneratorLayer::slotDelayedStaticUpdate()
@@ -116,7 +121,7 @@ void KisGeneratorLayer::requestUpdateJobsWithStroke(KisStrokeId \
strokeId, KisFil  
     if (filterConfig != m_d->preparedForFilter) {
         locker.unlock();
-        resetCache();
+        resetCacheWithoutUpdate();
         locker.relock();
     }
 
@@ -144,8 +149,9 @@ void KisGeneratorLayer::requestUpdateJobsWithStroke(KisStrokeId \
strokeId, KisFil  m_d->preparedForFilter = filterConfig;
 }
 
-void KisGeneratorLayer::previewWithStroke(const KisStrokeId strokeId, const \
KisFilterConfigurationSP filterConfig) +void \
KisGeneratorLayer::previewWithStroke(const KisStrokeId strokeId)  {
+    KisFilterConfigurationSP filterConfig = filter();
     KIS_SAFE_ASSERT_RECOVER_RETURN(filterConfig);
 
     requestUpdateJobsWithStroke(strokeId, filterConfig);
@@ -215,6 +221,12 @@ void KisGeneratorLayer::setY(qint32 y)
 }
 
 void KisGeneratorLayer::resetCache()
+{
+    resetCacheWithoutUpdate();
+    m_d->updateSignalCompressor.start();
+}
+
+void KisGeneratorLayer::resetCacheWithoutUpdate()
 {
     KisSelectionBasedLayer::resetCache();
     {
@@ -225,6 +237,11 @@ void KisGeneratorLayer::resetCache()
 
 void KisGeneratorLayer::setDirty(const QVector<QRect> &rects)
 {
-    KisSelectionBasedLayer::setDirty(rects);
+    setDirtyWithoutUpdate(rects);
+    m_d->updateSignalCompressor.start();
 }
 
+void KisGeneratorLayer::setDirtyWithoutUpdate(const QVector<QRect> &rects)
+{
+    KisSelectionBasedLayer::setDirty(rects);
+}
diff --git a/libs/image/generator/kis_generator_layer.h \
b/libs/image/generator/kis_generator_layer.h index ad8f1171b9..9ab60cc22d 100644
--- a/libs/image/generator/kis_generator_layer.h
+++ b/libs/image/generator/kis_generator_layer.h
@@ -54,6 +54,10 @@ public:
     }
 
     void setFilter(KisFilterConfigurationSP filterConfig) override;
+    /**
+     * Changes the filter configuration without triggering an update.
+     */
+    void setFilterWithoutUpdate(KisFilterConfigurationSP filterConfig);
 
     bool accept(KisNodeVisitor &) override;
     void accept(KisProcessingVisitor &visitor, KisUndoAdapter *undoAdapter) \
override; @@ -70,10 +74,14 @@ public:
      * re-runs the generator with the specified configuration.
      * Used for previewing the layer inside the stroke.
      */
-    void previewWithStroke(const KisStrokeId stroke, const KisFilterConfigurationSP \
configuration); +    void previewWithStroke(const KisStrokeId stroke);
 
     using KisSelectionBasedLayer::setDirty;
     void setDirty(const QVector<QRect> &rects) override;
+    /**
+     * Updates the selected tiles without triggering the update job.
+     */
+    void setDirtyWithoutUpdate(const QVector<QRect> &rects);
     void setX(qint32 x) override;
     void setY(qint32 y) override;
 
@@ -87,6 +95,10 @@ private:
      * Injects render jobs into the given stroke.
      */
     void requestUpdateJobsWithStroke(const KisStrokeId stroke, const \
KisFilterConfigurationSP configuration); +    /**
+     * Resets the projection cache without triggering the update job.
+     */
+    void resetCacheWithoutUpdate();
 
 public:
     // KisIndirectPaintingSupport
diff --git a/libs/image/generator/kis_generator_stroke_strategy.cpp \
b/libs/image/generator/kis_generator_stroke_strategy.cpp index 8a41803f3b..68060e3d80 \
                100644
--- a/libs/image/generator/kis_generator_stroke_strategy.cpp
+++ b/libs/image/generator/kis_generator_stroke_strategy.cpp
@@ -28,7 +28,7 @@
 #include "kis_generator_stroke_strategy.h"
 
 KisGeneratorStrokeStrategy::KisGeneratorStrokeStrategy()
-    : KisRunnableBasedStrokeStrategy(QLatin1String("KisGenerator"), \
kundo2_noi18n("KisGenerator")) +    : \
KisRunnableBasedStrokeStrategy(QLatin1String("KisGenerator"), kundo2_i18n("Fill Layer \
Render"))  {
     enableJob(KisSimpleStrokeStrategy::JOB_INIT, true, KisStrokeJobData::BARRIER, \
KisStrokeJobData::EXCLUSIVE);  enableJob(KisSimpleStrokeStrategy::JOB_DOSTROKE);
@@ -62,7 +62,7 @@ QVector<KisStrokeJobData \
*>KisGeneratorStrokeStrategy::createJobsData(const KisG  
                     // HACK ALERT!!!
                     // this avoids cyclic loop with \
                KisRecalculateGeneratorLayerJob::run()
-                    const_cast<KisGeneratorLayerSP &>(layer)->setDirty({tile});
+                    const_cast<KisGeneratorLayerSP \
&>(layer)->setDirtyWithoutUpdate({tile});  });
             }
         } else {
@@ -75,7 +75,7 @@ QVector<KisStrokeJobData \
*>KisGeneratorStrokeStrategy::createJobsData(const KisG  
                 // HACK ALERT!!!
                 // this avoids cyclic loop with \
                KisRecalculateGeneratorLayerJob::run()
-                const_cast<KisGeneratorLayerSP &>(layer)->setDirty({rc});
+                const_cast<KisGeneratorLayerSP \
&>(layer)->setDirtyWithoutUpdate({rc});  });
         }
     }
diff --git a/libs/ui/dialogs/kis_dlg_generator_layer.cpp \
b/libs/ui/dialogs/kis_dlg_generator_layer.cpp index caea203707..1998f33eb0 100644
--- a/libs/ui/dialogs/kis_dlg_generator_layer.cpp
+++ b/libs/ui/dialogs/kis_dlg_generator_layer.cpp
@@ -71,7 +71,7 @@ KisDlgGeneratorLayer::KisDlgGeneratorLayer(const QString & \
                defaultName, KisViewM
     connect(&m_compressor, SIGNAL(timeout()), this, \
SLOT(slotDelayedPreviewGenerator()));  
     if (layer && !isEditing) {
-        layer->setFilter(configuration());
+        slotDelayedPreviewGenerator();
     }
 }
 
@@ -125,7 +125,8 @@ void KisDlgGeneratorLayer::slotNameChanged(const QString & text)
 void KisDlgGeneratorLayer::slotDelayedPreviewGenerator()
 {
     if (!m_stroke.isNull()) {
-        layer->previewWithStroke(m_stroke, configuration());
+        layer->setFilterWithoutUpdate(configuration());
+        layer->previewWithStroke(m_stroke);
     }
 }
 


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

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