23 int channel1,
int channel2,
49 int sizeValue = qMin(width(), height());
50 QRectF b(0, 0, sizeValue, sizeValue);
51 QLineF radius(b.center(), QPointF(b.left() +
m_barWidth - 1, b.center().y()) );
53 QPointF tl(qFloor(radius.p2().x()), qFloor(radius.p2().y()));
54 QPointF br = b.bottomRight() - tl;
57 QRect r = QRectF(tl, br).toRect();
65 int sizeValue = qMin(width(), height());
66 QRect b(0, 0, sizeValue, sizeValue);
69 QRect r(tl.toPoint(), br.toPoint());
77 int sizeValue = qMin(width(), height());
78 QPointF center(0.5 * width(), 0.5 * height());
79 qreal radius = 0.5 * sizeValue - (
m_barWidth + 4);
80 QLineF rLine(center, QPointF(center.x() + radius, center.y()));
82 QPoint br(rLine.p2().toPoint());
85 QRect bound(tl, QSize(br.x() - tl.x(), br.y() - tl.y()));
86 bound.adjust(-5, -5, 5, 5);
87 bound.translate(pos());
112 qreal a = (qreal)width()*0.5;
113 QPointF center(a, a);
114 QLineF line(center, QPoint((
m_barWidth*0.5),a));
115 qreal angle = coordinate.x()*360.0;
116 angle = 360.0 - fmod(angle+180.0, 360.0);
118 angle = (coordinate.x()/2)*360.0;
119 angle = fmod((angle+270.0), 360.0);
121 line.setAngle(angle);
123 line.setLength(qMin(coordinate.y()*(a-offset), a-offset));
134 QPointF center = QRectF(QPointF(0.0, 0.0), this->size()).center();
135 qreal a = (qreal(this->width()) / qreal(2));
136 qreal xRel = center.x()-coordinate.x();
137 qreal yRel = center.y()-coordinate.y();
138 qreal radius = sqrt(xRel*xRel+yRel*yRel);
141 qreal angle = atan2(yRel, xRel);
143 angle = fmod(angle+360, 360.0);
146 y = qBound(0.0,radius/(a-offset), 1.0);
150 qreal angle = atan2(xRel, yRel);
152 angle = fmod(angle+180, 360.0);
158 y = qBound(0.0,(radius+offset)/a, 1.0);
162 return QPointF(x, y);
169 qreal h_center = width()/2.0;
170 bool start_left = dragStart.x() < h_center;
171 bool cursor_left = pos.x() < h_center;
172 if (start_left != cursor_left) {
192 QRegion mask = QRegion(0,0,width(),height(), QRegion::Ellipse);
203 const int deviceWidth = qCeil(width() * devicePixelRatioF());
204 const int deviceHeight = qCeil(height() * devicePixelRatioF());
206 QImage alphaMask(deviceWidth, deviceHeight, QImage::Format_Alpha8);
208 alphaMask.setDevicePixelRatio(devicePixelRatioF());
209 QPainter painter(&alphaMask);
210 painter.setRenderHint(QPainter::Antialiasing);
211 painter.setBrush(Qt::white);
212 painter.setPen(Qt::NoPen);
213 QRectF circle(outerBorder, outerBorder, width() - 2*outerBorder, height() - 2*outerBorder);
214 painter.drawEllipse(circle);
217 if (innerBorder > outerBorder) {
218 circle = QRectF(innerBorder, innerBorder, width() - 2*innerBorder, height() - 2*innerBorder);
219 painter.setCompositionMode(QPainter::CompositionMode_Clear);
220 painter.drawEllipse(circle);
232 qreal innerBorder = -1;
263 const int deviceWidth = qCeil(width() * devicePixelRatioF());
264 const int deviceHeight = qCeil(height() * devicePixelRatioF());
267 m_gamutMaskImage = QImage(deviceWidth, deviceHeight, QImage::Format_ARGB32_Premultiplied);
274 painter.setRenderHint(QPainter::Antialiasing,
true);
276 painter.setBrush(QColor(0, 0, 0, 128));
282 painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
283 mask->
paint(painter,
true);
290 painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
301 QBrush fill(Qt::SolidPattern);
306 painter.setPen(Qt::white);
307 fill.setColor(Qt::white);
308 painter.setBrush(fill);
309 painter.drawEllipse(cursorPoint, cursorwidth, cursorwidth);
310 QPointF mirror(width() - cursorPoint.x(), cursorPoint.y());
311 painter.drawEllipse(mirror, cursorwidth, cursorwidth);
313 painter.setPen(Qt::black);
314 painter.setBrush(fill);
315 painter.drawEllipse(cursorPoint, cursorwidth-1, cursorwidth-1);
316 painter.drawEllipse(mirror, cursorwidth-1, cursorwidth-1);
319 painter.setPen(Qt::white);
320 fill.setColor(Qt::white);
321 painter.setBrush(fill);
322 painter.drawEllipse(cursorPoint, cursorwidth, cursorwidth);
324 painter.setPen(Qt::black);
325 painter.setBrush(fill);
326 painter.drawEllipse(cursorPoint, cursorwidth-1.0, cursorwidth-1.0);
The KisVisualColorSelectorShape class A 2d widget can represent at maximum 2 coordinates....
KisVisualColorSelector * colorSelector() const
void forceImageUpdate()
forceImageUpdate force the image to recache.
QPointF getCursorPosition() const
getCursorPosition
QColor getColorFromConverter(KoColor c)
getColorFromConverter
KoColor getCurrentColor()
getCurrentColor
bool isHueControl() const
Dimensions getDimensions() const
getDimensions
Dimensions
The Dimensions enum Whether or not the shape is single or two dimensional.
The KisVisualColorSelector class.
KoGamutMask * activeGamutMask() const
RenderMode renderMode() const
QTransform m_gamutMaskTransform
void drawCursor(QPainter &painter) override
QImage renderAlphaMask() const override
render the alpha mask for the widget background the returned image is expected to be QImage::Format_A...
QRect getSpaceForTriangle(QRect geom) override
void setBorderWidth(int width) override
setBorderWidth set the border of the single dimensional selector.
void updateGamutMask() override
Notify shape that the gamut mask changed.
~KisVisualEllipticalSelectorShape() override
bool supportsGamutMask() const override
QPointF convertWidgetCoordinateToShapeCoordinate(QPointF coordinate) const override
convertWidgetCoordinateToShapeCoordinate Convert a coordinate in the widget's height/width to a shape...
bool m_gamutMaskNeedsUpdate
QImage renderAlphaMaskImpl(qreal outerBorder, qreal innerBorder) const
KisVisualEllipticalSelectorShape(KisVisualColorSelector *parent, Dimensions dimension, int channel1, int channel2, int barWidth=20, KisVisualEllipticalSelectorShape::singelDTypes d=KisVisualEllipticalSelectorShape::border)
QRegion getMaskMap() override
getPixmap
void drawGamutMask(QPainter &painter) override
QImage renderStaticAlphaMask() const override
QRect getSpaceForCircle(QRect geom) override
QRect getSpaceForSquare(QRect geom) override
getSpaceForSquare
QPointF mousePositionToShapeCoordinate(const QPointF &pos, const QPointF &dragStart) const override
default implementation just calls convertWidgetCoordinateToShapeCoordinate(pos)
QPointF convertShapeCoordinateToWidgetCoordinate(QPointF coordinate) const override
convertShapeCoordinateToWidgetCoordinate
The resource type for gamut masks used by the artistic color selector.
void paint(QPainter &painter, bool preview)
QTransform viewToMaskTransform(qreal viewSize)
QTransform maskToViewTransform(qreal viewSize)
void paintStroke(QPainter &painter, bool preview)
bool coordIsClear(const QPointF &coord, bool preview)
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
T kisRadiansToDegrees(T radians)