Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAsyncColorSamplerHelper::Private Struct Reference

Public Types

typedef KisSignalCompressorWithParam< QPointF > SamplingCompressor
 

Public Member Functions

QRectF colorPreviewDocRect (const QPointF &outlineDocPoint)
 
QRectF colorPreviewRectForCircle ()
 
QRectF colorPreviewRectForRectangle () const
 
const KoViewConverterconverter () const
 
QPainterPath crosshairForOffsettedCircle ()
 
 Private (KisCanvas2 *_canvas)
 
QRect standardizeZoomPreviewPixelRect (QRect pixelRect)
 
KisStrokesFacadestrokesFacade () const
 

Public Attributes

QTimer activationDelayTimer
 
QColor backgroundColor
 
QColor baseColor
 
QPixmap cache
 
QImage cacheCanvasPreviewImage
 
QRect cacheCanvasPreviewRect
 
QPainterPath cacheCircleInnerClip
 
int cacheCirclePreviewDiameter
 
QPainterPath cacheCrosshairPath
 
bool cacheMirror = false
 
qreal cacheRotation = 0.0
 
KisCanvas2canvas
 
QWeakPointer< boost::none_t > canvasPreviewFetchCookie
 
int circlePreviewDiameter {180}
 
bool circlePreviewExtraCircles {true}
 
bool circlePreviewOutlineEnabled {true}
 
KisConfig::ColorSamplerPreviewCirclePosition circlePreviewPosition = KisConfig::ColorSamplerPreviewCirclePosition::Center
 
qreal circlePreviewThickness {0.12}
 
bool circleZoomPreviewEnabled {false}
 
qreal circleZoomPreviewScale {10}
 
QColor currentColor
 
bool haveSample {false}
 
bool isActive {false}
 
QRectF previewDocRect
 
bool sampleCurrentLayer {true}
 
QPointF sampleDocPoint
 
int sampleResourceId {0}
 
QScopedPointer< SamplingCompressorsamplingCompressor
 
bool showPreview {false}
 
KisStrokeId strokeId
 
KisConfig::ColorSamplerPreviewStyle style = KisConfig::ColorSamplerPreviewStyle::Circle
 
bool updateGlobalColor {true}
 
QRectF zoomDocRectF
 
bool zoomPreviewHasPainted {false}
 

Static Public Attributes

static constexpr qreal PREVIEW_RECT_SIZE = 48.0
 

Detailed Description

Definition at line 44 of file KisAsyncColorSamplerHelper.cpp.

Member Typedef Documentation

◆ SamplingCompressor

Constructor & Destructor Documentation

◆ Private()

KisAsyncColorSamplerHelper::Private::Private ( KisCanvas2 * _canvas)
inline

Definition at line 48 of file KisAsyncColorSamplerHelper.cpp.

Member Function Documentation

◆ colorPreviewDocRect()

QRectF KisAsyncColorSamplerHelper::Private::colorPreviewDocRect ( const QPointF & outlineDocPoint)
inline

Definition at line 207 of file KisAsyncColorSamplerHelper.cpp.

208 {
209 QRectF colorPreviewViewRect;
210 switch (style) {
212 return QRectF();
216 colorPreviewViewRect = colorPreviewRectForRectangle();
217 break;
218 default:
219 // Showing a preview without sampling a color (by just holding a
220 // modifier) is used to compare the foreground color with the
221 // canvas. The circle doesn't work well for that purpose, so we
222 // use the handedness-independent rectangle above instead.
223 if (haveSample) {
224 colorPreviewViewRect = colorPreviewRectForCircle();
225 } else {
226 colorPreviewViewRect = colorPreviewRectForRectangle();
227 }
228 break;
229 }
230
231 const QRectF colorPreviewDocumentRect = converter().viewToDocument(colorPreviewViewRect);
232 return colorPreviewDocumentRect.translated(outlineDocPoint);
233 }
virtual QPointF viewToDocument(const QPointF &viewPoint) const
KisConfig::ColorSamplerPreviewStyle style

References colorPreviewRectForCircle(), colorPreviewRectForRectangle(), converter(), haveSample, KisConfig::None, KisConfig::RectangleAbove, KisConfig::RectangleLeft, KisConfig::RectangleRight, style, and KoViewConverter::viewToDocument().

◆ colorPreviewRectForCircle()

QRectF KisAsyncColorSamplerHelper::Private::colorPreviewRectForCircle ( )
inline

Definition at line 155 of file KisAsyncColorSamplerHelper.cpp.

156 {
158
159 // If zoom preview enabled, it's possible to offset the color sampler preview and still be accurate
160 // This can help when sampling color using finger gesture
163
164 constexpr qreal OFFSET = 10.0;
165 constexpr qreal OFFSET_ABOVE = 20.0;
166 bool mirrored = canvas->xAxisMirrored();
167 bool flipped = canvas->yAxisMirrored();
171 }
174 }
175 else effectivePos = circlePreviewPosition;
176
177 qreal x = 0;
178 qreal y = flipped ? circlePreviewDiameter / 2.0 + OFFSET_ABOVE : -circlePreviewDiameter / 2.0 - OFFSET_ABOVE;
179
180 switch (effectivePos) {
182 x = -circlePreviewDiameter / 2.0 - OFFSET;
183 break;
185 x = circlePreviewDiameter / 2.0 + OFFSET;
186 break;
187 default:
188 x = 0;
189 break;
190 }
191
192 QTransform tf;
193
194 qreal canvasRotationAngle = canvas->rotationAngle();
195 if (!qFuzzyIsNull(canvasRotationAngle)) {
196 tf.rotate(mirrored ? canvasRotationAngle : -canvasRotationAngle);
197 }
198
199 QPointF offset = tf.map(QPointF(x,y));
200
201 circleRect.translate(offset.x(), offset.y());
202 }
203
204 return circleRect;
205 }
qreal rotationAngle() const
canvas rotation in degrees
bool xAxisMirrored() const
Bools indicating canvasmirroring.
bool yAxisMirrored() const
ColorSamplerPreviewCirclePosition
Definition kis_config.h:168
static bool qFuzzyIsNull(half h)
KisConfig::ColorSamplerPreviewCirclePosition circlePreviewPosition

References canvas, KisConfig::Center, circlePreviewDiameter, circlePreviewPosition, circleZoomPreviewEnabled, qFuzzyIsNull(), KisCanvas2::rotationAngle(), KisConfig::TopLeft, KisConfig::TopRight, KisCanvas2::xAxisMirrored(), and KisCanvas2::yAxisMirrored().

◆ colorPreviewRectForRectangle()

QRectF KisAsyncColorSamplerHelper::Private::colorPreviewRectForRectangle ( ) const
inline

Definition at line 105 of file KisAsyncColorSamplerHelper.cpp.

106 {
107 // Offsetting to the sides is both vertical and horizontal, when
108 // offsetting above it's only vertical, so it needs a bit more space.
109 constexpr qreal OFFSET = 32.0;
110 constexpr qreal OFFSET_ABOVE = OFFSET * 1.5;
111 constexpr qreal SIZE = PREVIEW_RECT_SIZE;
112
113 bool mirrored = canvas->xAxisMirrored();
114 bool flipped = canvas->yAxisMirrored();
115
121 } else {
122 effectiveStyle = style;
123 }
124
125 qreal width = haveSample ? SIZE * 2.0 : SIZE;
126
127 qreal x, y;
128 switch (effectiveStyle) {
130 x = -(OFFSET + width);
131 y = flipped ? -(OFFSET + SIZE) : OFFSET;
132 break;
134 x = OFFSET;
135 y = flipped ? -(OFFSET + SIZE) : OFFSET;
136 break;
137 default:
138 x = width / -2.0;
139 y = flipped ? OFFSET_ABOVE : -(OFFSET_ABOVE + SIZE);
140 break;
141 }
142
143 QRectF rect(x, y, width, SIZE);
144
145 qreal canvasRotationAngle = canvas->rotationAngle();
146 if (!qFuzzyIsNull(canvasRotationAngle)) {
147 QTransform tf;
148 tf.rotate(mirrored ? canvasRotationAngle : -canvasRotationAngle);
149 rect = tf.mapRect(rect);
150 }
151
152 return rect;
153 }
ColorSamplerPreviewStyle
Definition kis_config.h:138

References canvas, haveSample, PREVIEW_RECT_SIZE, qFuzzyIsNull(), KisConfig::RectangleLeft, KisConfig::RectangleRight, KisCanvas2::rotationAngle(), style, KisCanvas2::xAxisMirrored(), and KisCanvas2::yAxisMirrored().

◆ converter()

const KoViewConverter & KisAsyncColorSamplerHelper::Private::converter ( ) const
inline

Definition at line 101 of file KisAsyncColorSamplerHelper.cpp.

101 {
102 return *canvas->imageView()->viewConverter();
103 }
QPointer< KisView > imageView() const

References canvas, and KisCanvas2::imageView().

◆ crosshairForOffsettedCircle()

QPainterPath KisAsyncColorSamplerHelper::Private::crosshairForOffsettedCircle ( )
inline

Definition at line 253 of file KisAsyncColorSamplerHelper.cpp.

253 {
255
257
258 int gapRadius = 3;
259 int crosshairRadius = circlePreviewDiameter / 2 * 0.2;
260 cacheCrosshairPath = QPainterPath(QPointF(-crosshairRadius, 0));
261
262 cacheCrosshairPath.lineTo(-gapRadius, 0);
263 cacheCrosshairPath.moveTo(gapRadius, 0);
264 cacheCrosshairPath.lineTo(crosshairRadius, 0);
265
266 QTransform tf;
267 tf.translate(0, 0);
268 tf.rotate(90);
269
270 cacheCrosshairPath.moveTo(0,0);
271
272 cacheCrosshairPath.addPath(tf.map(cacheCrosshairPath));
273
274 return cacheCrosshairPath;
275 }

References cacheCirclePreviewDiameter, cacheCrosshairPath, and circlePreviewDiameter.

◆ standardizeZoomPreviewPixelRect()

QRect KisAsyncColorSamplerHelper::Private::standardizeZoomPreviewPixelRect ( QRect pixelRect)
inline

Definition at line 235 of file KisAsyncColorSamplerHelper.cpp.

235 {
236 // If width and height get rounded to different number, the center will be stuck between pixel border
237 if (pixelRect.width() != pixelRect.height()) {
238 if (pixelRect.width() % 2 == 0) pixelRect.setWidth(pixelRect.height());
239 else pixelRect.setHeight(pixelRect.width());
240 }
241 // If width and height is even, the center will be stuck in pixel corner
242 else if (pixelRect.width() % 2 == 0) {
243 pixelRect.setWidth(pixelRect.width() - 1);
244 pixelRect.setHeight(pixelRect.height() - 1);
245 }
246
247 // Minimum sample size should be 3 to be meaningful
248 if (pixelRect.width() < 3 || pixelRect.height() < 3) pixelRect.setSize(QSize(3, 3));
249
250 return pixelRect;
251 }

◆ strokesFacade()

KisStrokesFacade * KisAsyncColorSamplerHelper::Private::strokesFacade ( ) const
inline

Definition at line 97 of file KisAsyncColorSamplerHelper.cpp.

97 {
98 return canvas->image().data();
99 }
KisImageWSP image() const

References canvas, KisWeakSharedPtr< T >::data(), and KisCanvas2::image().

Member Data Documentation

◆ activationDelayTimer

QTimer KisAsyncColorSamplerHelper::Private::activationDelayTimer

Definition at line 66 of file KisAsyncColorSamplerHelper.cpp.

◆ backgroundColor

QColor KisAsyncColorSamplerHelper::Private::backgroundColor

Definition at line 91 of file KisAsyncColorSamplerHelper.cpp.

◆ baseColor

QColor KisAsyncColorSamplerHelper::Private::baseColor

Definition at line 90 of file KisAsyncColorSamplerHelper.cpp.

◆ cache

QPixmap KisAsyncColorSamplerHelper::Private::cache

Definition at line 93 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheCanvasPreviewImage

QImage KisAsyncColorSamplerHelper::Private::cacheCanvasPreviewImage

Definition at line 83 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheCanvasPreviewRect

QRect KisAsyncColorSamplerHelper::Private::cacheCanvasPreviewRect

Definition at line 82 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheCircleInnerClip

QPainterPath KisAsyncColorSamplerHelper::Private::cacheCircleInnerClip

Definition at line 81 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheCirclePreviewDiameter

int KisAsyncColorSamplerHelper::Private::cacheCirclePreviewDiameter

Definition at line 85 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheCrosshairPath

QPainterPath KisAsyncColorSamplerHelper::Private::cacheCrosshairPath

Definition at line 84 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheMirror

bool KisAsyncColorSamplerHelper::Private::cacheMirror = false

Definition at line 95 of file KisAsyncColorSamplerHelper.cpp.

◆ cacheRotation

qreal KisAsyncColorSamplerHelper::Private::cacheRotation = 0.0

Definition at line 94 of file KisAsyncColorSamplerHelper.cpp.

◆ canvas

KisCanvas2* KisAsyncColorSamplerHelper::Private::canvas

Definition at line 52 of file KisAsyncColorSamplerHelper.cpp.

◆ canvasPreviewFetchCookie

QWeakPointer<boost::none_t> KisAsyncColorSamplerHelper::Private::canvasPreviewFetchCookie

Definition at line 86 of file KisAsyncColorSamplerHelper.cpp.

◆ circlePreviewDiameter

int KisAsyncColorSamplerHelper::Private::circlePreviewDiameter {180}

Definition at line 69 of file KisAsyncColorSamplerHelper.cpp.

69{180};

◆ circlePreviewExtraCircles

bool KisAsyncColorSamplerHelper::Private::circlePreviewExtraCircles {true}

Definition at line 72 of file KisAsyncColorSamplerHelper.cpp.

72{true};

◆ circlePreviewOutlineEnabled

bool KisAsyncColorSamplerHelper::Private::circlePreviewOutlineEnabled {true}

Definition at line 71 of file KisAsyncColorSamplerHelper.cpp.

71{true};

◆ circlePreviewPosition

KisConfig::ColorSamplerPreviewCirclePosition KisAsyncColorSamplerHelper::Private::circlePreviewPosition = KisConfig::ColorSamplerPreviewCirclePosition::Center

Definition at line 77 of file KisAsyncColorSamplerHelper.cpp.

◆ circlePreviewThickness

qreal KisAsyncColorSamplerHelper::Private::circlePreviewThickness {0.12}

Definition at line 70 of file KisAsyncColorSamplerHelper.cpp.

70{0.12};

◆ circleZoomPreviewEnabled

bool KisAsyncColorSamplerHelper::Private::circleZoomPreviewEnabled {false}

Definition at line 75 of file KisAsyncColorSamplerHelper.cpp.

75{false};

◆ circleZoomPreviewScale

qreal KisAsyncColorSamplerHelper::Private::circleZoomPreviewScale {10}

Definition at line 76 of file KisAsyncColorSamplerHelper.cpp.

76{10};

◆ currentColor

QColor KisAsyncColorSamplerHelper::Private::currentColor

Definition at line 89 of file KisAsyncColorSamplerHelper.cpp.

◆ haveSample

bool KisAsyncColorSamplerHelper::Private::haveSample {false}

Definition at line 60 of file KisAsyncColorSamplerHelper.cpp.

60{false};

◆ isActive

bool KisAsyncColorSamplerHelper::Private::isActive {false}

Definition at line 58 of file KisAsyncColorSamplerHelper.cpp.

58{false};

◆ PREVIEW_RECT_SIZE

constexpr qreal KisAsyncColorSamplerHelper::Private::PREVIEW_RECT_SIZE = 48.0
staticconstexpr

Definition at line 46 of file KisAsyncColorSamplerHelper.cpp.

◆ previewDocRect

QRectF KisAsyncColorSamplerHelper::Private::previewDocRect

Definition at line 73 of file KisAsyncColorSamplerHelper.cpp.

◆ sampleCurrentLayer

bool KisAsyncColorSamplerHelper::Private::sampleCurrentLayer {true}

Definition at line 55 of file KisAsyncColorSamplerHelper.cpp.

55{true};

◆ sampleDocPoint

QPointF KisAsyncColorSamplerHelper::Private::sampleDocPoint

Definition at line 78 of file KisAsyncColorSamplerHelper.cpp.

◆ sampleResourceId

int KisAsyncColorSamplerHelper::Private::sampleResourceId {0}

Definition at line 54 of file KisAsyncColorSamplerHelper.cpp.

54{0};

◆ samplingCompressor

QScopedPointer<SamplingCompressor> KisAsyncColorSamplerHelper::Private::samplingCompressor

Definition at line 64 of file KisAsyncColorSamplerHelper.cpp.

◆ showPreview

bool KisAsyncColorSamplerHelper::Private::showPreview {false}

Definition at line 59 of file KisAsyncColorSamplerHelper.cpp.

59{false};

◆ strokeId

KisStrokeId KisAsyncColorSamplerHelper::Private::strokeId

Definition at line 62 of file KisAsyncColorSamplerHelper.cpp.

◆ style

Definition at line 68 of file KisAsyncColorSamplerHelper.cpp.

◆ updateGlobalColor

bool KisAsyncColorSamplerHelper::Private::updateGlobalColor {true}

Definition at line 56 of file KisAsyncColorSamplerHelper.cpp.

56{true};

◆ zoomDocRectF

QRectF KisAsyncColorSamplerHelper::Private::zoomDocRectF

Definition at line 79 of file KisAsyncColorSamplerHelper.cpp.

◆ zoomPreviewHasPainted

bool KisAsyncColorSamplerHelper::Private::zoomPreviewHasPainted {false}

Definition at line 87 of file KisAsyncColorSamplerHelper.cpp.

87{false};

The documentation for this struct was generated from the following file: