[graphics/krita] libs/ui/tool: Changed KisImageWSP to SP, don't pass KisCanvas2 to strategy, use cookie for task tracking instead
Emmet O'Neill <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit c491be31050e4b501515d4d6e87ec5146095e124 by Emmet O'Neill, on behalf of Dat Le.
Committed on 13/08/2026 at 23:16.
Pushed by emmetoneill into branch 'master'.
Changed KisImageWSP to SP, don't pass KisCanvas2 to strategy, use cookie for task tracking instead
M +13 -13 libs/ui/tool/KisAsyncColorSamplerHelper.cpp
M +1 -1 libs/ui/tool/KisAsyncColorSamplerHelper.h
M +4 -6 libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
M +12 -5 libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
https://invent.kde.org/graphics/krita/-/commit/c491be31050e4b501515d4d6e87ec5146095e124
diff --git a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
index e952c24fcab..71ce4bc522b 100644
--- a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
+++ b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
@@ -82,7 +82,7 @@ struct KisAsyncColorSamplerHelper::Private
QImage cacheCanvasPreviewImage;
QPainterPath cacheCrosshairPath;
int cacheCirclePreviewDiameter;
- bool canvasPreviewFetchingStarted {false};
+ QWeakPointer<boost::none_t> canvasPreviewFetchingCookie;
bool zoomPreviewHasPainted {false};
QColor currentColor;
@@ -413,7 +413,6 @@ void KisAsyncColorSamplerHelper::deactivate()
// Reset the cached zoom preview image and rect
m_d->cacheCanvasPreviewImage = QImage();
m_d->cacheCanvasPreviewRect = QRect();
- m_d->canvasPreviewFetchingStarted = false;
m_d->zoomPreviewHasPainted = false;
m_d->isActive = false;
@@ -721,19 +720,20 @@ void KisAsyncColorSamplerHelper::paintCircleCrosshair(QPainter &gc, const QRectF
gc.restore();
}
-QImage KisAsyncColorSamplerHelper::fetchCanvasPreview(QRect &canvasPixelRect) {
- KisImageWSP canvasImage = m_d->canvas->image();
-
+QImage KisAsyncColorSamplerHelper::fetchCanvasPreview(QRect &canvasPixelRect, KisImageSP canvasImage) {
if (!canvasImage->bounds().intersects(canvasPixelRect)) {
canvasPixelRect = QRect(); // Make this a null rect to imply no need to draw canvas
return QImage();
}
// If not already have a job fetching canvas image, then do it
- if (!m_d->canvasPreviewFetchingStarted && m_d->cacheCanvasPreviewRect != canvasPixelRect) {
- m_d->canvasPreviewFetchingStarted = true;
- m_d->strokesFacade()->addJob(m_d->strokeId,
- new KisColorSamplerStrokeStrategy::GenerateCanvasZoomPreviewData(m_d->canvas, canvasPixelRect));
+ if (!m_d->canvasPreviewFetchingCookie && m_d->cacheCanvasPreviewRect != canvasPixelRect) {
+ KisColorSamplerStrokeStrategy::GenerateCanvasZoomPreviewData *data =
+ new KisColorSamplerStrokeStrategy::GenerateCanvasZoomPreviewData(canvasImage->projection(), canvasPixelRect, m_d->canvas->displayColorConverter());
+
+ m_d->canvasPreviewFetchingCookie = data->cookie();
+
+ m_d->strokesFacade()->addJob(m_d->strokeId, data);
}
// Render the last frame if available
@@ -743,7 +743,9 @@ QImage KisAsyncColorSamplerHelper::fetchCanvasPreview(QRect &canvasPixelRect) {
}
bool KisAsyncColorSamplerHelper::paintCircleCanvasPreview(QPainter &gc, const QRectF &viewRectF, const QRectF &zoomDocRectF, const QPainterPath &clip) {
- KisImageWSP image = m_d->canvas->image();
+ KisImageSP image = m_d->canvas->image();
+
+ if (!image) return false;
QRectF canvasPixelRectF = image->documentToPixel(zoomDocRectF);
@@ -755,7 +757,7 @@ bool KisAsyncColorSamplerHelper::paintCircleCanvasPreview(QPainter &gc, const QR
// Make sure the center is the pixel currently sampled because standardizing may change the shape
canvasPixelRect.moveCenter(image->documentToImagePixelFloored(zoomDocRectF.center()));
- QImage cachedImage = fetchCanvasPreview(canvasPixelRect);
+ QImage cachedImage = fetchCanvasPreview(canvasPixelRect, image);
// If cachedImage and canvasPixelRect is null, painting is not needed
// If cachedImage is null and canvasPixelRect is not null, painting was deferred
if (cachedImage.isNull()) return canvasPixelRect.isNull();
@@ -833,8 +835,6 @@ void KisAsyncColorSamplerHelper::slotCanvasZoomPreviewUpdated(const QImage &canv
m_d->cacheCanvasPreviewRect = canvasRect;
m_d->cacheCanvasPreviewImage = canvasImage;
- m_d->canvasPreviewFetchingStarted = false;
-
Q_EMIT sigRequestUpdateOutline();
}
diff --git a/libs/ui/tool/KisAsyncColorSamplerHelper.h b/libs/ui/tool/KisAsyncColorSamplerHelper.h
index 8f4ed364dfb..956f3403e67 100644
--- a/libs/ui/tool/KisAsyncColorSamplerHelper.h
+++ b/libs/ui/tool/KisAsyncColorSamplerHelper.h
@@ -87,7 +87,7 @@ private:
bool paintCircleCanvasPreview(QPainter &gc, const QRectF &viewRectF, const QRectF &zoomDocRectF, const QPainterPath &clip);
void paintCircleReferenceImagePreview(QPainter &gc, const QRectF &viewRectF, const QRectF &zoomDocRectF, const QPainterPath &clip);
- QImage fetchCanvasPreview(QRect &canvasPixelRect);
+ QImage fetchCanvasPreview(QRect &canvasPixelRect, KisImageSP canvasImage);
struct Private;
QScopedPointer<Private> m_d;
diff --git a/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp b/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
index 13a43057c3a..d29b24534e7 100644
--- a/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
+++ b/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
@@ -6,9 +6,8 @@
#include "kis_color_sampler_stroke_strategy.h"
-#include "kis_canvas2.h"
-#include "kis_display_color_converter.h"
#include "kis_tool_utils.h"
+#include "kis_display_color_converter.h"
#include "kis_paint_device.h"
struct KisColorSamplerStrokeStrategy::Private
@@ -58,12 +57,11 @@ void KisColorSamplerStrokeStrategy::doStrokeCallback(KisStrokeJobData *data)
Q_EMIT sigFinalColorSelected(*m_d->lastSelectedColor);
}
} else if (previewData) {
- KisPaintDeviceSP dev = previewData->canvas->image()->projection();
- KisPaintDeviceSP tmpDev = new KisPaintDevice(dev->colorSpace());
+ KisPaintDeviceSP tmpDev = new KisPaintDevice(previewData->canvasDev->colorSpace());
- tmpDev->makeCloneFrom(dev, previewData->canvasPixelRect);
+ tmpDev->makeCloneFrom(previewData->canvasDev, previewData->canvasPixelRect);
- QImage image = previewData->canvas->displayColorConverter()->convertImageToDisplayColorSpace(tmpDev, previewData->canvasPixelRect, true);
+ QImage image = previewData->colorConverter->convertImageToDisplayColorSpace(tmpDev, previewData->canvasPixelRect, true);
Q_EMIT sigCanvasZoomPreviewUpdated(image, previewData->canvasPixelRect);
}
diff --git a/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h b/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
index 4b4117e915d..811dcca8d48 100644
--- a/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
+++ b/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
@@ -12,7 +12,7 @@
#include "kis_lod_transform.h"
#include "KoColor.h"
-class KisCanvas2;
+class KisDisplayColorConverter;
class KisColorSamplerStrokeStrategy : public QObject, public KisSimpleStrokeStrategy
{
@@ -49,17 +49,24 @@ public:
class GenerateCanvasZoomPreviewData : public KisStrokeJobData {
public:
- GenerateCanvasZoomPreviewData(KisCanvas2* _canvas, const QRect &_canvasPixelRect)
- : canvas(_canvas), canvasPixelRect(_canvasPixelRect)
+ GenerateCanvasZoomPreviewData(KisPaintDeviceSP _canvasDev, const QRect &_canvasPixelRect, KisDisplayColorConverter *_colorConverter)
+ : canvasDev(_canvasDev), canvasPixelRect(_canvasPixelRect), colorConverter(_colorConverter)
{}
KisStrokeJobData* createLodClone(int levelOfDetail) override {
Q_UNUSED(levelOfDetail);
- return new GenerateCanvasZoomPreviewData(canvas, canvasPixelRect);
+ return new GenerateCanvasZoomPreviewData(canvasDev, canvasPixelRect, colorConverter);
}
- KisCanvas2 *canvas;
+ QWeakPointer<boost::none_t> cookie() {
+ fetchingCookie.reset(new boost::none_t(boost::none));
+ return fetchingCookie;
+ }
+
+ KisPaintDeviceSP canvasDev;
QRect canvasPixelRect;
+ KisDisplayColorConverter *colorConverter;
+ QSharedPointer<boost::none_t> fetchingCookie;
};
public:
KisColorSamplerStrokeStrategy(int radius, int blend, int lod = 0);