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

List:       kde-kimageshop
Subject:    [graphics/krita] libs/image/generator: Fill Layers: re-render the whole layer if the image bounds ch
From:       L. E. Segovia <null () kde ! org>
Date:       2020-08-18 23:05:53
Message-ID: 20200818230553.7BFC2124023D () leptone ! kde ! org
[Download RAW message or body]

Git commit c3ce9a40d58d426188271b76a971c868153e28a9 by L. E. Segovia.
Committed on 18/08/2020 at 22:55.
Pushed by lsegovia into branch 'master'.

Fill Layers: re-render the whole layer if the image bounds change

Before this commit, if a Fill Layer was to be re-rendered as a
consequence of an image resize, it would improperly attempt to preserve
the existing rendered quadrant.

To fix this, the image bounds are saved after an update job is called.
If they change in the next update, the preparedRect is cleared and the
layer is completely re-rendered again.

CC: kimageshop@kde.org
(cherry picked from commit 3f3062e757177112645967a9955f5bcbb3eaba59)

M  +6    -0    libs/image/generator/kis_generator_layer.cpp

https://invent.kde.org/graphics/krita/commit/c3ce9a40d58d426188271b76a971c868153e28a9

diff --git a/libs/image/generator/kis_generator_layer.cpp b/libs/image/generator/kis_generator_layer.cpp
index fc34d9394e..2054165a1d 100644
--- a/libs/image/generator/kis_generator_layer.cpp
+++ b/libs/image/generator/kis_generator_layer.cpp
@@ -50,6 +50,7 @@ struct Q_DECL_HIDDEN KisGeneratorLayer::Private
 
     KisThreadSafeSignalCompressor updateSignalCompressor;
     QRect preparedRect;
+    QRect preparedImageBounds;
     KisFilterConfigurationSP preparedForFilter;
     QWeakPointer<bool> updateCookie;
     QMutex mutex;
@@ -125,6 +126,10 @@ void KisGeneratorLayer::requestUpdateJobsWithStroke(KisStrokeId strokeId, KisFil
         locker.relock();
     }
 
+    if (m_d->preparedImageBounds != image->bounds()) {
+        m_d->preparedRect = QRect();
+    }
+
     const QRegion processRegion(QRegion(updateRect) - m_d->preparedRect);
     if (processRegion.isEmpty())
         return;
@@ -146,6 +151,7 @@ void KisGeneratorLayer::requestUpdateJobsWithStroke(KisStrokeId strokeId, KisFil
 
     m_d->updateCookie = cookie;
     m_d->preparedRect = updateRect;
+    m_d->preparedImageBounds = image->bounds();
     m_d->preparedForFilter = filterConfig;
 }
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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