[graphics/krita] libs/ui/tool: Instant preview now working
Emmet O'Neill <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 356243d61cdb6f80669dd63ddb0a39b8ca7f8e27 by Emmet O'Neill, on behalf of Dat Le.
Committed on 13/08/2026 at 23:16.
Pushed by emmetoneill into branch 'master'.
Instant preview now working
M +0 -5 libs/ui/tool/KisAsyncColorSamplerHelper.cpp
M +6 -8 libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
M +6 -2 libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
https://invent.kde.org/graphics/krita/-/commit/356243d61cdb6f80669dd63ddb0a39b8ca7f8e27
diff --git a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
index 1d3cdffc675..70e33d193d4 100644
--- a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
+++ b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
@@ -729,7 +729,6 @@ QImage KisAsyncColorSamplerHelper::fetchCanvasPreview(QRect &canvasPixelRect, Ki
// If not already have a job fetching canvas image, then do it
// TODO: If LOD is involved, the cookie seems leaked. Also, Q_EMIT never trigger the slot?
if (!m_d->canvasPreviewFetchingCookie && m_d->cacheCanvasPreviewRect != canvasPixelRect) {
- qDebug() << "Original rect:" << canvasPixelRect;
KisColorSamplerStrokeStrategy::GenerateCanvasZoomPreviewData *data =
new KisColorSamplerStrokeStrategy::GenerateCanvasZoomPreviewData(canvasImage->projection(), canvasPixelRect, m_d->canvas->displayColorConverter());
@@ -739,8 +738,6 @@ QImage KisAsyncColorSamplerHelper::fetchCanvasPreview(QRect &canvasPixelRect, Ki
m_d->strokesFacade()->addJob(m_d->strokeId, data);
}
- // qDebug() << "Has fetching finished: " << m_d->canvasPreviewFetchingCookie.isNull();
-
// Render the last frame if available
if (!m_d->cacheCanvasPreviewRect.isNull()) canvasPixelRect = QRect(QPoint(0,0), m_d->cacheCanvasPreviewRect.size());
@@ -840,8 +837,6 @@ void KisAsyncColorSamplerHelper::slotCanvasZoomPreviewUpdated(const QImage &canv
m_d->cacheCanvasPreviewRect = canvasRect;
m_d->cacheCanvasPreviewImage = canvasImage;
- qDebug() << "Canvas fetching finished";
-
Q_EMIT sigRequestUpdateOutline();
}
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 97dc2191f09..f846bcdcb9a 100644
--- a/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
+++ b/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.cpp
@@ -19,6 +19,8 @@ struct KisColorSamplerStrokeStrategy::Private
int blend = 100;
boost::optional<KoColor> lastSelectedColor;
+
+ QSharedPointer<boost::none_t> strokeCookie = nullptr;
};
KisColorSamplerStrokeStrategy::KisColorSamplerStrokeStrategy(int radius, int blend, int lod)
@@ -61,24 +63,17 @@ void KisColorSamplerStrokeStrategy::doStrokeCallback(KisStrokeJobData *data)
tmpDev->makeCloneFrom(previewData->canvasDev, previewData->canvasPixelRect);
QImage image = previewData->colorConverter->convertImageToDisplayColorSpace(tmpDev, previewData->canvasPixelRect, true);
- qDebug() << "Scaled image rect: " << image.rect();
if (previewData->levelOfDetail > 0) {
- qDebug() << previewData->levelOfDetail;
- qDebug() << "Modified rect" << previewData->canvasPixelRect;
KisLodTransform transform(previewData->levelOfDetail);
-
qreal scale = transform.lodToInvScale(previewData->levelOfDetail);
- qDebug() << "Lod to scale" << scale;
image = image.scaled(QSize(scale * image.width(), scale * image.height()));
- qDebug() << "Restored image rect: " << image.rect();
previewData->canvasPixelRect = transform.mapInverted(previewData->canvasPixelRect);
- qDebug() << "Restored rect: " << previewData->canvasPixelRect;
}
- Q_EMIT sigCanvasZoomPreviewUpdated(QImage(), QRect());
+ Q_EMIT sigCanvasZoomPreviewUpdated(image, previewData->canvasPixelRect);
}
}
@@ -90,5 +85,8 @@ KisStrokeStrategy* KisColorSamplerStrokeStrategy::createLodClone(int levelOfDeta
connect(lodStrategy, &KisColorSamplerStrokeStrategy::sigColorUpdated,
this, &KisColorSamplerStrokeStrategy::sigColorUpdated,
Qt::DirectConnection);
+ connect(lodStrategy, &KisColorSamplerStrokeStrategy::sigCanvasZoomPreviewUpdated,
+ this, &KisColorSamplerStrokeStrategy::sigCanvasZoomPreviewUpdated,
+ Qt::DirectConnection);
return lodStrategy;
}
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 0681b580482..90280926a72 100644
--- a/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
+++ b/libs/ui/tool/strokes/kis_color_sampler_stroke_strategy.h
@@ -50,14 +50,18 @@ public:
class GenerateCanvasZoomPreviewData : public KisStrokeJobData {
public:
GenerateCanvasZoomPreviewData(KisPaintDeviceSP _canvasDev, const QRect &_canvasPixelRect, KisDisplayColorConverter *_colorConverter,
- int _levelOfDetail = -1, QSharedPointer<boost::none_t> _cookie = nullptr)
+ int _levelOfDetail = 0, QSharedPointer<boost::none_t> _cookie = nullptr)
: canvasDev(_canvasDev), canvasPixelRect(_canvasPixelRect), colorConverter(_colorConverter), levelOfDetail(_levelOfDetail), fetchingCookie(_cookie)
{}
KisStrokeJobData* createLodClone(int levelOfDetail) override {
KisLodTransform transform(levelOfDetail);
QRect lodPixelRect = transform.map(canvasPixelRect);
- return new GenerateCanvasZoomPreviewData(canvasDev, lodPixelRect, colorConverter, levelOfDetail, fetchingCookie);
+ GenerateCanvasZoomPreviewData *newData = new GenerateCanvasZoomPreviewData(canvasDev, lodPixelRect, colorConverter, levelOfDetail);
+ // When Lod is involved, swap the cookie to the new Lod clone to track execution, the original object seems to leaks
+ newData->fetchingCookie.swap(fetchingCookie);
+
+ return newData;
}
QWeakPointer<boost::none_t> cookie() {