59 {
60
61
62
63
64
69 }
70 else {
73 }
74 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
75 QString shadeMyPaintType=cfg.readEntry("shadeMyPaintType", "HSV");
76
77 int sizeHD = qMin(width(), height())*devicePixelRatioF();
78 int s_radiusHD = sizeHD/2.6;
79
80 int widthHD = width()*devicePixelRatioF();
81 int heightHD = height()*devicePixelRatioF();
82
85
86 QRect pickRectHighDPI = QRect(QPoint(0, 0),
size()*devicePixelRatioF());
89
90
91 while(it.nextPixel()) {
92 borderIt.nextPixel();
93
96
97 float v_factor = 0.6f;
98 float s_factor = 0.6f;
99 float v_factor2 = 0.013f;
100 float s_factor2 = 0.013f;
101
102 int stripe_width = 15*sizeHD/255.;
103
105 float s = 0;
107
108 int dx =
x-widthHD/2;
109 int dy =
y-heightHD/2;
110 int diag = sqrt(2.0)*sizeHD/2;
111
112 int dxs, dys;
113 if (dx > 0)
114 dxs = dx - stripe_width;
115 else
116 dxs = dx + stripe_width;
117 if (dy > 0)
118 dys = dy - stripe_width;
119 else
120 dys = dy + stripe_width;
121
122 qreal
r = std::sqrt(qreal(
sqr(dxs)+
sqr(dys)));
123
124 if (qMin(
abs(dx),
abs(dy)) < stripe_width) {
125
126 bool horizontal = std::abs(dx) > std::abs(dy);
127 dx = (dx/qreal(sizeHD))*255;
128 dy = (dy/qreal(sizeHD))*255;
129
131
133 s = - (dy*s_factor +
signedSqr(dy)*s_factor2);
134
135 if (horizontal) {
136
137 s = 0.0;
138 } else {
139
141 }
142 }
143 else if (std::min(std::abs(dx - dy), std::abs(dx + dy)) < stripe_width) {
144
145 dx = (dx/qreal(sizeHD))*255;
146 dy = (dy/qreal(sizeHD))*255;
147
149
151 s = - (dy*s_factor +
signedSqr(dy)*s_factor2);
152
153 }
154 else if (r < s_radiusHD+1) {
155
156 if (dx > 0)
157 h = 90*
sqr2(r/s_radiusHD);
158 else
159 h = 360 - 90*
sqr2(r/s_radiusHD);
160 s = 256*(atan2f(std::abs(dxs),dys)/
M_PI) - 128;
161
162 if (r > s_radiusHD) {
163
164 qreal aaFactor =
r-floor(r);
165 aaFactor = 1-aaFactor;
166
170
171 fh -= floor(fh);
172 fs = qBound(qreal(0.0), fs, qreal(1.0));
173 fv = qBound(qreal(0.01), fv, qreal(1.0));
175
180 else{
dbgKrita<<
"MyPaint Color selector don't work right.";
182
185
186 h = 180 + 180*atan2f(dys,-dxs)/
M_PI;
187 v = 255*(
r-s_radiusHD)/(diag-s_radiusHD) - 128;
188 s = 0;
189
190
191 }
192 }
193 else {
194
195 h = 180 + 180*atan2f(dys,-dxs)/
M_PI;
196 v = 255*(
r-s_radiusHD)/(diag-s_radiusHD) - 128;
197 }
198
202
203 fh -= floor(fh);
204 fs = qBound(qreal(0.0), fs, qreal(1.0));
205 fv = qBound(qreal(0.01), fv, qreal(1.0));
207
212 else{
dbgKrita<<
"MyPaint Color selector don't work right.";
214
216 }
217
220
221 QPainter painter(this);
222 if (!isEnabled()) {
223 painter.setOpacity(0.2);
224 }
226 renderedImage.setDevicePixelRatio(devicePixelRatioF());
227
228 painter.drawImage(0, 0, renderedImage);
229}
KisDisplayColorConverter * converter() const
KoColor fromHsiF(qreal h, qreal s, qreal i)
QImage toQImage(KisPaintDeviceSP srcDevice, bool proofPaintColors=false) const
KoColor fromHslF(qreal h, qreal s, qreal l, qreal a=1.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)
const KoColorSpace * m_cachedColorSpace
KisPaintDeviceSP m_realCircleBorder
const KoColorSpace * colorSpace() const
virtual quint32 pixelSize() const =0
void setOpacity(quint8 alpha)
void setColorWithIterator(Iterator &it, const KoColor &color, const int pixelSize)
Point abs(const Point &pt)
int size(const Forest< T > &forest)