20#include <QApplication>
26#include <kconfiggroup.h>
27#include <ksharedconfig.h>
39inline qreal
sqr2(qreal x);
45 m_updateTimer(new QTimer(this))
51 setMinimumSize(80, 80);
74 KConfigGroup cfg = KSharedConfig::openConfig()->group(
"advancedColorSelector");
75 QString shadeMyPaintType=cfg.readEntry(
"shadeMyPaintType",
"HSV");
77 int sizeHD = qMin(width(), height())*devicePixelRatioF();
78 int s_radiusHD = sizeHD/2.6;
80 int widthHD = width()*devicePixelRatioF();
81 int heightHD = height()*devicePixelRatioF();
86 QRect pickRectHighDPI = QRect(QPoint(0, 0), size()*devicePixelRatioF());
97 float v_factor = 0.6f;
98 float s_factor = 0.6f;
99 float v_factor2 = 0.013f;
100 float s_factor2 = 0.013f;
102 int stripe_width = 15*sizeHD/255.;
108 int dx = x-widthHD/2;
109 int dy = y-heightHD/2;
110 int diag = sqrt(2.0)*sizeHD/2;
114 dxs = dx - stripe_width;
116 dxs = dx + stripe_width;
118 dys = dy - stripe_width;
120 dys = dy + stripe_width;
122 qreal r = std::sqrt(qreal(
sqr(dxs)+
sqr(dys)));
124 if (qMin(abs(dx), abs(dy)) < stripe_width) {
126 bool horizontal = std::abs(dx) > std::abs(dy);
127 dx = (dx/qreal(sizeHD))*255;
128 dy = (dy/qreal(sizeHD))*255;
133 s = - (dy*s_factor +
signedSqr(dy)*s_factor2);
143 else if (std::min(std::abs(dx - dy), std::abs(dx + dy)) < stripe_width) {
145 dx = (dx/qreal(sizeHD))*255;
146 dy = (dy/qreal(sizeHD))*255;
151 s = - (dy*s_factor +
signedSqr(dy)*s_factor2);
154 else if (r < s_radiusHD+1) {
157 h = 90*
sqr2(r/s_radiusHD);
159 h = 360 - 90*
sqr2(r/s_radiusHD);
160 s = 256*(atan2f(std::abs(dxs),dys)/
M_PI) - 128;
162 if (r > s_radiusHD) {
164 qreal aaFactor = r-floor(r);
165 aaFactor = 1-aaFactor;
172 fs = qBound(qreal(0.0), fs, qreal(1.0));
173 fv = qBound(qreal(0.01), fv, qreal(1.0));
180 else{
dbgKrita<<
"MyPaint Color selector don't work right.";
186 h = 180 + 180*atan2f(dys,-dxs)/
M_PI;
187 v = 255*(r-s_radiusHD)/(diag-s_radiusHD) - 128;
195 h = 180 + 180*atan2f(dys,-dxs)/
M_PI;
196 v = 255*(r-s_radiusHD)/(diag-s_radiusHD) - 128;
204 fs = qBound(qreal(0.0), fs, qreal(1.0));
205 fv = qBound(qreal(0.01), fv, qreal(1.0));
212 else{
dbgKrita<<
"MyPaint Color selector don't work right.";
221 QPainter painter(
this);
223 painter.setOpacity(0.2);
226 renderedImage.setDevicePixelRatio(devicePixelRatioF());
228 painter.drawImage(0, 0, renderedImage);
234 e->setAccepted(
false);
237 if (!e->isAccepted()) {
238 if(
rect().contains(e->pos())) {
248 if(
rect().contains(e->pos())) {
257 e->setAccepted(
false);
260 if(!e->isAccepted()) {
265 KConfigGroup cfg = KSharedConfig::openConfig()->group(
"advancedColorSelector");
267 bool onRightClick = cfg.readEntry(
"shadeSelectorUpdateOnRightClick",
false);
268 bool onLeftClick = cfg.readEntry(
"shadeSelectorUpdateOnLeftClick",
false);
270 bool explicitColorReset =
271 (e->button() == Qt::LeftButton && onLeftClick) ||
272 (e->button() == Qt::RightButton && onRightClick);
274 this->
updateColor(color, role, explicitColorReset);
289 KConfigGroup cfg = KSharedConfig::openConfig()->group(
"advancedColorSelector");
290 QString shadeMyPaintType=cfg.readEntry(
"shadeMyPaintType",
"HSV");
292 R = cfg.readEntry(
"lumaR", 0.2126);
293 G = cfg.readEntry(
"lumaG", 0.7152);
294 B = cfg.readEntry(
"lumaB", 0.0722);
311 KConfigGroup cfg = KSharedConfig::openConfig()->group(
"advancedColorSelector");
313 bool onForeground = cfg.readEntry(
"shadeSelectorUpdateOnForeground",
false);
314 bool onBackground = cfg.readEntry(
"shadeSelectorUpdateOnBackground",
true);
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
Base class for all color selectors, that should support color management and zooming.
void updatePreviousColorPreview()
void updateColorPreview(const KoColor &color)
virtual void updateSettings()
KisDisplayColorConverter * converter() const
const KoColorSpace * colorSpace() const
virtual void setColor(const KoColor &color)
void mouseReleaseEvent(QMouseEvent *) override
void mousePressEvent(QMouseEvent *) override
bool m_colorUpdateAllowed
void mouseMoveEvent(QMouseEvent *event) override
void updateBaseColorPreview(const KoColor &color)
void updateColor(const KoColor &color, Acs::ColorRole role, bool needsExplicitColorReset)
void getHslF(const KoColor &srcColor, qreal *h, qreal *s, qreal *l, qreal *a=0)
KoColor fromHsiF(qreal h, qreal s, qreal i)
void getHsiF(const KoColor &srcColor, qreal *h, qreal *s, qreal *i)
QImage toQImage(KisPaintDeviceSP srcDevice, bool proofPaintColors=false) const
void getHsyF(const KoColor &srcColor, qreal *h, qreal *s, qreal *y, qreal R=0.2126, qreal G=0.7152, qreal B=0.0722, qreal gamma=2.2)
KoColor fromHslF(qreal h, qreal s, qreal l, qreal a=1.0)
void getHsvF(const KoColor &srcColor, qreal *h, qreal *s, qreal *v, qreal *a=0)
KoColor fromHsyF(qreal h, qreal s, qreal y, qreal R=0.2126, qreal G=0.7152, qreal B=0.0722, qreal gamma=2.2)
KoColor fromHsvF(qreal h, qreal s, qreal v, qreal a=1.0)
KisMyPaintShadeSelector(QWidget *parent=0)
KisColorSelectorBase * createPopup() const override
void mouseMoveEvent(QMouseEvent *) override
void paintEvent(QPaintEvent *) override
void mousePressEvent(QMouseEvent *) override
const KoColorSpace * m_cachedColorSpace
void canvasResourceChanged(int key, const QVariant &v) override
KisPaintDeviceSP m_realCircleBorder
KisPaintDeviceSP m_realPixelCache
void mouseReleaseEvent(QMouseEvent *) override
void setColor(const KoColor &color) override
const KoColorSpace * colorSpace() const
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
ALWAYS_INLINE int x() const
ALWAYS_INLINE int y() const
virtual quint32 pixelSize() const =0
void setOpacity(quint8 alpha)
ColorRole buttonToRole(Qt::MouseButton button)
void setColorWithIterator(Iterator &it, const KoColor &color, const int pixelSize)
KoColor sampleColor(PaintDeviceSP device, const QPoint &pt)
@ BackgroundColor
The active background color selected for this canvas.
@ ForegroundColor
The active foreground color selected for this canvas.