[graphics/krita] libs/ui/tool: Test showing zoomed 2x on circle color sampler

Emmet O'Neill <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 3d78e69ae002466e6116085d96dd74a770d4c6ab by Emmet O'Neill, on behalf of Le Tien Dat.
Committed on 13/08/2026 at 23:16.
Pushed by emmetoneill into branch 'master'.

Test showing zoomed 2x on circle color sampler

M  +26   -6    libs/ui/tool/KisAsyncColorSamplerHelper.cpp

https://invent.kde.org/graphics/krita/-/commit/3d78e69ae002466e6116085d96dd74a770d4c6ab

diff --git a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
index b5e905077e2..0965c3cdbc2 100644
--- a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
+++ b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
@@ -69,6 +69,8 @@ struct KisAsyncColorSamplerHelper::Private
     bool circlePreviewOutlineEnabled {true};
     bool circlePreviewExtraCircles {true};
     QRectF previewDocRect;
+    QPointF docPoint;
+    QImage cacheCanvasImage;
 
     QColor currentColor;
     QColor baseColor;
@@ -342,6 +344,7 @@ void KisAsyncColorSamplerHelper::endAction()
 
 QRectF KisAsyncColorSamplerHelper::colorPreviewDocRect(const QPointF &docPoint)
 {
+    m_d->docPoint = docPoint;
     if (!m_d->showPreview) return QRectF();
 
     KisConfig cfg(true);
@@ -436,8 +439,6 @@ void KisAsyncColorSamplerHelper::paintCircle(QPainter &gc,
         return;
     }
 
-
-
     gc.save();
 
     qreal dpr = gc.device()->devicePixelRatioF();
@@ -455,7 +456,7 @@ void KisAsyncColorSamplerHelper::paintCircle(QPainter &gc,
     }
 
     bool needsDualColor = currentColor != baseColor;
-    if (needsNewCache || (needsDualColor && !qFuzzyCompare(m_d->cacheRotation, canvasRotationAngle))) {
+    if (true || needsNewCache || (needsDualColor && !qFuzzyCompare(m_d->cacheRotation, canvasRotationAngle))) {
         m_d->cacheRotation = canvasRotationAngle;
 
         QPainter cachePainter(&m_d->cache);
@@ -532,9 +533,28 @@ void KisAsyncColorSamplerHelper::paintCircle(QPainter &gc,
             innerPath = innerPath.intersected(innerEllipse);
         }
 
-        cachePainter.setPen(Qt::NoPen);
-        cachePainter.setCompositionMode(QPainter::CompositionMode_Clear);
-        cachePainter.drawPath(tf.map(innerPath));
+        // cachePainter.setPen(Qt::NoPen);
+        // cachePainter.setCompositionMode(QPainter::CompositionMode_Clear);
+        // cachePainter.drawPath(tf.map(innerPath));
+
+        if (true) {
+            dbgUI << "View rect: " << viewRectF;
+            QRectF docRectF = m_d->converter().viewToDocument(viewRectF);
+            QRectF docSampleRectF = QRectF(m_d->docPoint.x() - docRectF.width()/4, m_d->docPoint.y() - docRectF.height()/4, docRectF.width()/2, docRectF.height()/2);
+            QRectF canvasSampleRectF = m_d->canvas->image()->documentToPixel(docSampleRectF);
+            dbgUI << "Doc point: " << m_d->docPoint;
+            dbgUI << "Doc view rect: " << docRectF;
+            dbgUI << "Canvas point: " << canvasSampleRectF.topLeft();
+
+            m_d->cacheCanvasImage = m_d->canvas->image()->convertToQImage(canvasSampleRectF.toRect(), nullptr);
+
+            cachePainter.setClipPath(tf.map(innerPath));
+            // cachePainter.setBrush(Qt::GlobalColor::cyan);
+            cachePainter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+            cachePainter.drawImage(cacheRect, m_d->cacheCanvasImage);
+
+            cachePainter.setClipPath(QPainterPath(), Qt::NoClip);
+        }
 
         if (m_d->circlePreviewOutlineEnabled) {
             cachePainter.setBrush(Qt::transparent);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.