Krita Source Code Documentation
Loading...
Searching...
No Matches
KisColorSelectorTriangle Class Reference

#include <kis_color_selector_triangle.h>

+ Inheritance diagram for KisColorSelectorTriangle:

Public Member Functions

 KisColorSelectorTriangle (KisColorSelector *parent)
 
void setColor (const KoColor &color) override
 set the color, blibs etc
 
- Public Member Functions inherited from KisColorSelectorComponent
KoColor currentColor ()
 return the color, that was selected by calling mouseEvent
 
int height () const
 
 KisColorSelectorComponent (KisColorSelector *parent)
 
virtual void mouseEvent (int x, int y)
 saves the mouse position, so that a blip can be created.
 
void paintEvent (QPainter *)
 
void setConfiguration (Parameter param, Type type)
 setConfiguration can be ignored (for instance ring and triangle, as they can have only one config)
 
void setDirty ()
 force subsequent redraw of the component
 
void setGamutMask (KoGamutMaskSP gamutMask)
 
void setGeometry (int x, int y, int width, int height)
 
void toggleGamutMask (bool state)
 
void unsetGamutMask ()
 
void updateGamutMaskPreview ()
 
bool wantsGrab (int x, int y)
 returns true, if this component wants to grab the mouse (normally true, if containsPoint returns true)
 
int width () const
 

Protected Member Functions

bool containsPointInComponentCoords (int x, int y) const override
 
void paint (QPainter *) override
 
KoColor selectColor (int x, int y) override
 this method must be overloaded to return the color at position x/y and draw a marker on that position
 
- Protected Member Functions inherited from KisColorSelectorComponent
virtual bool allowsColorSelectionAtPoint (const QPoint &) const
 
const KoColorSpacecolorSpace () const
 
bool isDirty () const
 returns true, if ether the color space, the size or the parameters have changed since the last paint event
 
void setLastMousePosition (int x, int y)
 

Private Member Functions

KoColor colorAt (float x, float y) const
 
int triangleHeight () const
 
QPoint triangleToWidgetCoordinates (const QPoint &point) const
 
int triangleWidth () const
 
void updatePixelCache (qreal devicePixelRatioF)
 
QPoint widgetToTriangleCoordinates (const QPoint &point) const
 

Private Attributes

qreal m_cacheDevicePixelRatioF {1.0}
 
QSize m_cachedSize
 
QPointF m_lastClickPos
 
KisPaintDeviceSP m_realPixelCache
 
QImage m_renderedPixelCache
 

Friends

class Acs::PixelCacheRenderer
 

Additional Inherited Members

- Public Types inherited from KisColorSelectorComponent
typedef KisColorSelectorConfiguration::Parameters Parameter
 
typedef KisColorSelectorConfiguration::Type Type
 
- Public Slots inherited from KisColorSelectorComponent
void setParam (qreal hue, qreal hsvSaturation, qreal value, qreal hslSaturation, qreal lightness, qreal hsiSaturation, qreal intensity, qreal hsySaturation, qreal luma)
 
- Signals inherited from KisColorSelectorComponent
void paramChanged (qreal hue, qreal hsvSaturation, qreal value, qreal hslSaturation, qreal lightness, qreal hsiSaturation, qreal intensity, qreal hsySaturation, qreal luma)
 -1, if unaffected
 
void update ()
 request for repaint, for instance, if the hue changes.
 
- Protected Attributes inherited from KisColorSelectorComponent
KoGamutMaskSP m_currentGamutMask
 
bool m_gamutMaskOn {false}
 
qreal m_hsiSaturation {0.0}
 
qreal m_hslSaturation {0.0}
 
qreal m_hsvSaturation {0.0}
 
qreal m_hsySaturation {0.0}
 
qreal m_hue {0.0}
 
qreal m_intensity {0.0}
 
qreal m_lastX {0.0}
 
qreal m_lastY {0.0}
 
qreal m_lightness {0.0}
 
qreal m_luma {0.0}
 
bool m_maskPreviewActive {false}
 
Parameter m_parameter
 
KisColorSelectorm_parent {0}
 
Type m_type
 
qreal m_value {0.0}
 
int m_x {0}
 
int m_y {0}
 

Detailed Description

Definition at line 19 of file kis_color_selector_triangle.h.

Constructor & Destructor Documentation

◆ KisColorSelectorTriangle()

KisColorSelectorTriangle::KisColorSelectorTriangle ( KisColorSelector * parent)
explicit

Definition at line 20 of file kis_color_selector_triangle.cpp.

20 :
22 m_lastClickPos(-1,-1)
23{
24}
KisColorSelectorComponent(KisColorSelector *parent)

Member Function Documentation

◆ colorAt()

KoColor KisColorSelectorTriangle::colorAt ( float x,
float y ) const
private

Definition at line 144 of file kis_color_selector_triangle.cpp.

145{
146 Q_ASSERT(x>=0 && x<=(triangleWidth() + 1));
147 Q_ASSERT(y>=0 && y<=triangleHeight());
148
149 int triangleHeight = this->triangleHeight();
150 int horizontalLineLength = y*(2./sqrt(3.));
151 int horizontalLineStart = triangleWidth()/2.-horizontalLineLength/2.;
152 int horizontalLineEnd = horizontalLineStart+horizontalLineLength;
153
154 if(x<horizontalLineStart || x>horizontalLineEnd || y>triangleHeight)
156
157 qreal relativeX = x-horizontalLineStart;
158
159 qreal value = (y)/qreal(triangleHeight);
160 qreal saturation = relativeX/qreal(horizontalLineLength);
161
162 return m_parent->converter()->fromHsvF(m_hue, saturation, value);
163}
float value(const T *src, size_t ch)
KisDisplayColorConverter * converter() const
const KoColorSpace * colorSpace() const
KoColor fromHsvF(qreal h, qreal s, qreal v, qreal a=1.0)
static KoColor createTransparent(const KoColorSpace *cs)
Definition KoColor.cpp:681

References KisColorSelectorComponent::colorSpace(), KisColorSelectorBase::converter(), KoColor::createTransparent(), KisDisplayColorConverter::fromHsvF(), KisColorSelectorComponent::m_hue, KisColorSelectorComponent::m_parent, triangleHeight(), triangleWidth(), and value().

◆ containsPointInComponentCoords()

bool KisColorSelectorTriangle::containsPointInComponentCoords ( int x,
int y ) const
overrideprotectedvirtual

a subclass can implement this method, the default returns true if the coordinates are in the component rect values for the subclasses are provided in component coordinates, eg (0,0) is top left of component

Reimplemented from KisColorSelectorComponent.

Definition at line 26 of file kis_color_selector_triangle.cpp.

27{
28 QPoint triangleCoords = widgetToTriangleCoordinates(QPoint(x, y))*m_cacheDevicePixelRatioF;
29
30 if (!m_realPixelCache) return false;
31 KoColor pixel = Acs::sampleColor(m_realPixelCache, triangleCoords);
32 return pixel.opacityU8() == OPACITY_OPAQUE_U8;
33}
const quint8 OPACITY_OPAQUE_U8
QPoint widgetToTriangleCoordinates(const QPoint &point) const
quint8 opacityU8() const
Definition KoColor.cpp:341
KoColor sampleColor(PaintDeviceSP device, const QPoint &pt)

References m_cacheDevicePixelRatioF, m_realPixelCache, OPACITY_OPAQUE_U8, KoColor::opacityU8(), Acs::sampleColor(), and widgetToTriangleCoordinates().

◆ paint()

void KisColorSelectorTriangle::paint ( QPainter * )
overrideprotectedvirtual

paint component using given painter the component should respect width() and height() (eg. scale to width and height), but doesn't have to care about x/y coordinates (top left corner)

Implements KisColorSelectorComponent.

Definition at line 35 of file kis_color_selector_triangle.cpp.

36{
37 if(isDirty()) {
38 updatePixelCache(painter->device()->devicePixelRatioF());
39 }
40
41
42 painter->drawImage(width()/2-triangleWidth()/2,
43 height()/2-triangleHeight()*(2/3.),
45
46
47 if(m_lastClickPos.x()>-0.1 && m_parent->displayBlip()) {
48 painter->setPen(QColor(0,0,0));
49 painter->drawEllipse(m_lastClickPos.x()*width()-5, m_lastClickPos.y()*height()-5, 10, 10);
50 painter->setPen(QColor(255,255,255));
51 painter->drawEllipse(m_lastClickPos.x()*width()-4, m_lastClickPos.y()*height()-4, 8, 8);
52 }
53}
bool isDirty() const
returns true, if ether the color space, the size or the parameters have changed since the last paint ...
void updatePixelCache(qreal devicePixelRatioF)
bool displayBlip() const

References KisColorSelector::displayBlip(), KisColorSelectorComponent::height(), KisColorSelectorComponent::isDirty(), m_lastClickPos, KisColorSelectorComponent::m_parent, m_renderedPixelCache, triangleHeight(), triangleWidth(), updatePixelCache(), and KisColorSelectorComponent::width().

◆ selectColor()

KoColor KisColorSelectorTriangle::selectColor ( int x,
int y )
overrideprotectedvirtual

this method must be overloaded to return the color at position x/y and draw a marker on that position

Implements KisColorSelectorComponent.

Definition at line 89 of file kis_color_selector_triangle.cpp.

90{
91 Q_EMIT update();
92
93 QPoint triangleCoords = widgetToTriangleCoordinates(QPoint(x,y));
94
95 triangleCoords.setY(qBound(0, triangleCoords.y(), int(triangleHeight())));
96
97 int horizontalLineLength = triangleCoords.y()*(2./sqrt(3.));
98 int horizontalLineStart = triangleWidth()/2.-horizontalLineLength/2.;
99 int horizontalLineEnd = horizontalLineStart+horizontalLineLength;
100
101 triangleCoords.setX(qBound(horizontalLineStart, triangleCoords.x(), horizontalLineEnd));
102
103 QPoint widgetCoords = triangleToWidgetCoordinates(triangleCoords);
104
105 m_lastClickPos.setX(widgetCoords.x()/qreal(width()));
106 m_lastClickPos.setY(widgetCoords.y()/qreal(height()));
107
108 return colorAt(triangleCoords.x(), triangleCoords.y());
109}
void update()
request for repaint, for instance, if the hue changes.
QPoint triangleToWidgetCoordinates(const QPoint &point) const
KoColor colorAt(float x, float y) const

References colorAt(), KisColorSelectorComponent::height(), m_lastClickPos, triangleHeight(), triangleToWidgetCoordinates(), triangleWidth(), KisColorSelectorComponent::update(), widgetToTriangleCoordinates(), and KisColorSelectorComponent::width().

◆ setColor()

void KisColorSelectorTriangle::setColor ( const KoColor & color)
overridevirtual

set the color, blibs etc

Reimplemented from KisColorSelectorComponent.

Definition at line 111 of file kis_color_selector_triangle.cpp.

112{
113 qreal h, s, v;
114 m_parent->converter()->getHsvF(color, &h, &s, &v);
115
116 qreal y = v * triangleHeight();
117 qreal horizontalLineLength = y * (2. / sqrt(3.));
118 qreal horizontalLineStart = 0.5 * (triangleWidth() - horizontalLineLength);
119 qreal x=s * horizontalLineLength + horizontalLineStart;
120
121 QPoint tmp = triangleToWidgetCoordinates(QPoint(x, y));
122
123 m_lastClickPos.setX(tmp.x()/qreal(width()));
124 m_lastClickPos.setY(tmp.y()/qreal(height()));
125
126 // Workaround for Bug 287001
127 setLastMousePosition(tmp.x(), tmp.y());
128
129 Q_EMIT paramChanged(-1, s, v, -1, -1, -1, -1, -1, -1);
130 Q_EMIT update();
132}
qreal v
virtual void setColor(const KoColor &color)
set the color, blibs etc
void paramChanged(qreal hue, qreal hsvSaturation, qreal value, qreal hslSaturation, qreal lightness, qreal hsiSaturation, qreal intensity, qreal hsySaturation, qreal luma)
-1, if unaffected
void getHsvF(const KoColor &srcColor, qreal *h, qreal *s, qreal *v, qreal *a=0)

References KisColorSelectorBase::converter(), KisDisplayColorConverter::getHsvF(), KisColorSelectorComponent::height(), m_lastClickPos, KisColorSelectorComponent::m_parent, KisColorSelectorComponent::paramChanged(), KisColorSelectorComponent::setColor(), KisColorSelectorComponent::setLastMousePosition(), triangleHeight(), triangleToWidgetCoordinates(), triangleWidth(), KisColorSelectorComponent::update(), v, and KisColorSelectorComponent::width().

◆ triangleHeight()

int KisColorSelectorTriangle::triangleHeight ( ) const
private

Definition at line 139 of file kis_color_selector_triangle.cpp.

140{
141 return height()*3./4.;
142}

References KisColorSelectorComponent::height().

◆ triangleToWidgetCoordinates()

QPoint KisColorSelectorTriangle::triangleToWidgetCoordinates ( const QPoint & point) const
private

Definition at line 173 of file kis_color_selector_triangle.cpp.

174{
175 QPoint triangleTopLeft(width()/2.-triangleWidth()/2.,
176 height()/2.-triangleHeight()*(2./3.));
177 QPoint ret=triangleTopLeft+point;
178 return ret;
179}

References KisColorSelectorComponent::height(), triangleHeight(), triangleWidth(), and KisColorSelectorComponent::width().

◆ triangleWidth()

int KisColorSelectorTriangle::triangleWidth ( ) const
private

Definition at line 134 of file kis_color_selector_triangle.cpp.

135{
136 return triangleHeight()*2/sqrt(3.0);
137}

References triangleHeight().

◆ updatePixelCache()

void KisColorSelectorTriangle::updatePixelCache ( qreal devicePixelRatioF)
private

Definition at line 55 of file kis_color_selector_triangle.cpp.

56{
57 int width = triangleWidth() + 1;
58 int height = triangleHeight();
59
60 QPoint pixelCacheOffset;
61
62 if (m_cachedSize != QSize(width, height) && m_realPixelCache) {
64 }
65
68 QRect(0, 0, width, height),
71 pixelCacheOffset,
72 devicePixelRatioF);
73
74 m_cacheDevicePixelRatioF = devicePixelRatioF; // save device pixel ratio of the cache
75
76// if (!pixelCacheOffset.isNull()) {
77// warnKrita << "WARNING: offset of the triangle selector is not null!";
78// }
79
80 // antialiased border
81 QPainter gc(&m_renderedPixelCache);
82 gc.setRenderHint(QPainter::Antialiasing);
83 gc.setPen(QPen(QColor(0,0,0,128), 2.5));
84 gc.setCompositionMode(QPainter::CompositionMode_Clear);
85 gc.drawLine(QPointF(0, triangleHeight()), QPointF((triangleWidth()) / 2.0, 0));
86 gc.drawLine(QPointF(triangleWidth() / 2.0 + 1.0, 0), QPointF(triangleWidth() + 1, triangleHeight()));
87}
static void render(Sampler *sampler, const KisDisplayColorConverter *converter, const QRect &sampleRect, KisPaintDeviceSP &realPixelCache, QImage &pixelCache, QPoint &pixelCacheOffset, qreal devicePixelRatioF)

References KisColorSelectorBase::converter(), KisColorSelectorComponent::height(), m_cacheDevicePixelRatioF, m_cachedSize, KisColorSelectorComponent::m_parent, m_realPixelCache, m_renderedPixelCache, Acs::PixelCacheRenderer::render(), triangleHeight(), triangleWidth(), and KisColorSelectorComponent::width().

◆ widgetToTriangleCoordinates()

QPoint KisColorSelectorTriangle::widgetToTriangleCoordinates ( const QPoint & point) const
private

Definition at line 165 of file kis_color_selector_triangle.cpp.

166{
167 QPoint triangleTopLeft(width()/2-triangleWidth()/2,
168 height()/2-triangleHeight()*(2/3.));
169 QPoint ret=point-triangleTopLeft;
170 return ret;
171}

References KisColorSelectorComponent::height(), triangleHeight(), triangleWidth(), and KisColorSelectorComponent::width().

Friends And Related Symbol Documentation

◆ Acs::PixelCacheRenderer

friend class Acs::PixelCacheRenderer
friend

Definition at line 32 of file kis_color_selector_triangle.h.

Member Data Documentation

◆ m_cacheDevicePixelRatioF

qreal KisColorSelectorTriangle::m_cacheDevicePixelRatioF {1.0}
private

Definition at line 47 of file kis_color_selector_triangle.h.

47{1.0};

◆ m_cachedSize

QSize KisColorSelectorTriangle::m_cachedSize
private

Definition at line 45 of file kis_color_selector_triangle.h.

◆ m_lastClickPos

QPointF KisColorSelectorTriangle::m_lastClickPos
private

Definition at line 46 of file kis_color_selector_triangle.h.

◆ m_realPixelCache

KisPaintDeviceSP KisColorSelectorTriangle::m_realPixelCache
private

Definition at line 44 of file kis_color_selector_triangle.h.

◆ m_renderedPixelCache

QImage KisColorSelectorTriangle::m_renderedPixelCache
private

Definition at line 43 of file kis_color_selector_triangle.h.


The documentation for this class was generated from the following files: