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

#include <kis_tone_curve_widget.h>

+ Inheritance diagram for KisToneCurveWidget:

Public Member Functions

 KisToneCurveWidget (QWidget *parent=nullptr)
 
void setCMYKCurve (QPolygonF cyan, QPolygonF magenta, QPolygonF yellow, QPolygonF key)
 
void setGreyscaleCurve (QPolygonF poly)
 
void setProfileDataAvailable (bool dataAvailable)
 
void setRGBCurve (QPolygonF red, QPolygonF green, QPolygonF blue)
 
 ~KisToneCurveWidget () override
 

Public Attributes

QPixmap curvemap
 
double gridside {0.0}
 
bool needUpdatePixmap {false}
 
QPainter painter
 
QPainter painter2
 
QPixmap pixmap
 
bool profileDataAvailable {false}
 
int pxcols {0}
 
int pxrows {0}
 
QPolygonF ToneCurveBlue
 
QPolygonF ToneCurveGray
 
QPolygonF ToneCurveGreen
 
QPolygonF ToneCurveRed
 
bool TRCGray {true}
 
bool TRCRGB {false}
 
int xBias {0}
 
int yBias {0}
 

Protected Member Functions

void drawGrid ()
 
int grids (double val) const
 
void paintEvent (QPaintEvent *) override
 
void resizeEvent (QResizeEvent *event) override
 

Private Member Functions

void biasedLine (int x1, int y1, int x2, int y2)
 
void biasedText (int x, int y, const QString &txt)
 
void mapPoint (QPointF &xy)
 
void updatePixmap ()
 
- Private Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Private Attributes

Private *const d {nullptr}
 
- Private Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

Definition at line 24 of file kis_tone_curve_widget.cpp.

Constructor & Destructor Documentation

◆ KisToneCurveWidget()

KisToneCurveWidget::KisToneCurveWidget ( QWidget * parent = nullptr)

Definition at line 51 of file kis_tone_curve_widget.cpp.

51 :
52 QWidget(parent), d(new Private)
53{
54 /*this is a tone curve widget*/
55}

◆ ~KisToneCurveWidget()

KisToneCurveWidget::~KisToneCurveWidget ( )
override

Definition at line 57 of file kis_tone_curve_widget.cpp.

58{
59 delete d;
60}

References d.

Member Function Documentation

◆ biasedLine()

void KisToneCurveWidget::biasedLine ( int x1,
int y1,
int x2,
int y2 )
private

Definition at line 108 of file kis_tone_curve_widget.cpp.

109{
110 d->painter.drawLine(x1 + d->xBias, y1, x2 + d->xBias, y2);
111}

References d.

◆ biasedText()

void KisToneCurveWidget::biasedText ( int x,
int y,
const QString & txt )
private

Definition at line 113 of file kis_tone_curve_widget.cpp.

114{
115 d->painter.drawText(QPoint(d->xBias + x, y), txt);
116}

References d.

◆ drawGrid()

void KisToneCurveWidget::drawGrid ( )
protected

Definition at line 118 of file kis_tone_curve_widget.cpp.

119{
120 d->painter.setOpacity(1.0);
121 d->painter.setPen(qRgb(255, 255, 255));
122 biasedLine(0, 0, 0, d->pxrows - 1);
123 biasedLine(0, d->pxrows-1, d->pxcols-1, d->pxrows - 1);
124
125 QFont font;
126 font.setPointSize(6);
127 d->painter.setFont(font);
128
129 for (int y = 1; y <= 9; y += 1)
130 {
131 QString s;
132 int xstart = (y * (d->pxcols - 1)) / 10;
133 int ystart = (y * (d->pxrows - 1)) / 10;
134
135 QTextStream(&s) << y;
136 biasedLine(xstart, d->pxrows - grids(1), xstart, d->pxrows - grids(4));
137 biasedText(xstart - grids(11), d->pxrows + grids(15), s);
138
139 QTextStream(&s) << 10 - y;
140 biasedLine(0, ystart, grids(3), ystart);
141 biasedText(grids(-25), ystart + grids(5), s);
142 }
143
144 d->painter.setPen(qRgb(128, 128, 128));
145 d->painter.setOpacity(0.5);
146
147 for (int y = 1; y <= 9; y += 1)
148 {
149 int xstart = (y * (d->pxcols - 1)) / 10;
150 int ystart = (y * (d->pxrows - 1)) / 10;
151
152 biasedLine(xstart, grids(4), xstart, d->pxrows - grids(4) - 1);
153 biasedLine(grids(7), ystart, d->pxcols-1-grids(7), ystart);
154 }
155 d->painter.setOpacity(1.0);
156 d->painter.setOpacity(1.0);
157}
void biasedText(int x, int y, const QString &txt)
int grids(double val) const
void biasedLine(int x1, int y1, int x2, int y2)

References biasedLine(), biasedText(), d, and grids().

◆ grids()

int KisToneCurveWidget::grids ( double val) const
protected

Definition at line 96 of file kis_tone_curve_widget.cpp.

97{
98 return (int) floor(val * d->gridside + 0.5);
99}

References d.

◆ mapPoint()

void KisToneCurveWidget::mapPoint ( QPointF & xy)
private

Definition at line 101 of file kis_tone_curve_widget.cpp.

102{
103 QPointF dummy = xy;
104 xy.setX( (int) floor((dummy.x() * (d->pxcols - 1)) + .5) + d->xBias);
105 xy.setY( (int) floor(((d->pxrows - 1) - dummy.y() * (d->pxrows - 1)) + .5) );
106}

References d.

◆ paintEvent()

void KisToneCurveWidget::paintEvent ( QPaintEvent * )
overrideprotected

Definition at line 281 of file kis_tone_curve_widget.cpp.

282{
283 QPainter p(this);
284
285 // Widget is disable : drawing grayed frame.
286
287 if ( !isEnabled() )
288 {
289 p.fillRect(0, 0, width(), height(),
290 palette().color(QPalette::Disabled, QPalette::Window));
291
292 QPen pen(palette().color(QPalette::Disabled, QPalette::WindowText));
293 pen.setStyle(Qt::SolidLine);
294 pen.setWidth(1);
295
296 p.setPen(pen);
297 p.drawRect(0, 0, width(), height());
298
299 return;
300 }
301
302
303 // No profile data to show, or RAW file
304
305 if (!d->profileDataAvailable)
306 {
307 p.fillRect(0, 0, width(), height(), palette().color(QPalette::Active, QPalette::Window));
308 QPen pen(palette().color(QPalette::Active, QPalette::Text));
309 pen.setStyle(Qt::SolidLine);
310 pen.setWidth(1);
311
312 p.setPen(pen);
313 p.drawRect(0, 0, width(), height());
314
315 p.setPen(Qt::red);
316 p.drawText(0, 0, width(), height(), Qt::AlignCenter,
317 i18n("No tone curve available..."));
318
319 return;
320 }
321
322 // Create CIE tongue if needed
323 if (d->needUpdatePixmap)
324 {
325 updatePixmap();
326 }
327
328 // draw prerendered tongue
329 p.drawPixmap(0, 0, d->pixmap);
330}
const Params2D p
rgba palette[MAX_PALETTE]
Definition palette.c:35

References d, p, palette, and updatePixmap().

◆ resizeEvent()

void KisToneCurveWidget::resizeEvent ( QResizeEvent * event)
overrideprotected

Definition at line 332 of file kis_tone_curve_widget.cpp.

333{
334 QWidget::resizeEvent(event);
335 d->needUpdatePixmap = true;
336}

References d.

◆ setCMYKCurve()

void KisToneCurveWidget::setCMYKCurve ( QPolygonF cyan,
QPolygonF magenta,
QPolygonF yellow,
QPolygonF key )

Definition at line 81 of file kis_tone_curve_widget.cpp.

82{
83 d->ToneCurveRed = cyan;
84 d->ToneCurveGreen = magenta;
85 d->ToneCurveBlue = yellow;
86 d->ToneCurveGray = key;
87 d->profileDataAvailable = true;
88 d->TRCGray = false;
89 d->TRCRGB = false;
90 d->needUpdatePixmap = true;
91}

References d.

◆ setGreyscaleCurve()

void KisToneCurveWidget::setGreyscaleCurve ( QPolygonF poly)

Definition at line 62 of file kis_tone_curve_widget.cpp.

63{
64 d->ToneCurveGray = poly;
65 d->TRCGray = true;
66 d->TRCRGB = false;
67 d->profileDataAvailable = true;
68 d->needUpdatePixmap = true;
69}

References d.

◆ setProfileDataAvailable()

void KisToneCurveWidget::setProfileDataAvailable ( bool dataAvailable)

Definition at line 92 of file kis_tone_curve_widget.cpp.

93{
94 d->profileDataAvailable = dataAvailable;
95}

References d.

◆ setRGBCurve()

void KisToneCurveWidget::setRGBCurve ( QPolygonF red,
QPolygonF green,
QPolygonF blue )

Definition at line 71 of file kis_tone_curve_widget.cpp.

72{
73 d->ToneCurveRed = red;
74 d->ToneCurveGreen = green;
75 d->ToneCurveBlue = blue;
76 d->profileDataAvailable = true;
77 d->TRCGray = false;
78 d->TRCRGB = true;
79 d->needUpdatePixmap = true;
80}

References d.

◆ updatePixmap()

void KisToneCurveWidget::updatePixmap ( )
private

Definition at line 159 of file kis_tone_curve_widget.cpp.

160{
161 d->needUpdatePixmap = false;
162 d->pixmap = QPixmap(size() * devicePixelRatioF());
163 d->pixmap.setDevicePixelRatio(devicePixelRatioF());
164 d->curvemap = QPixmap(size() * devicePixelRatioF());
165 d->curvemap.setDevicePixelRatio(devicePixelRatioF());
166 d->pixmap.fill(Qt::black);
167 d->curvemap.fill(Qt::transparent);
168
169 d->painter.begin(&d->pixmap);
170
171 int pixcols =
172 static_cast<int>(d->pixmap.width() / d->pixmap.devicePixelRatioF());
173 int pixrows =
174 static_cast<int>(d->pixmap.height() / d->pixmap.devicePixelRatioF());
175
176 d->gridside = (qMin(pixcols, pixrows)) / 512.0;
177 d->xBias = grids(32);
178 d->yBias = grids(20);
179 d->pxcols = pixcols - d->xBias;
180 d->pxrows = pixrows - d->yBias;
181
182 d->painter.setBackground(QBrush(qRgb(0, 0, 0)));
183 QPointF start;
184 drawGrid();
185 d->painter.setRenderHint(QPainter::Antialiasing);
186 if (d->TRCGray && d->ToneCurveGray.size()>0){
187 QPainterPath path;
188 start = d->ToneCurveGray.at(0);
189 mapPoint(start);
190 path.moveTo(start);
191 foreach (QPointF Point, d->ToneCurveGray) {
192 mapPoint(Point);
193 path.lineTo(Point);
194 }
195 d->painter.setPen(qRgb(255, 255, 255));
196 d->painter.drawPath(path);
197 } else if (d->TRCRGB && d->ToneCurveRed.size()>0 && d->ToneCurveGreen.size()>0 && d->ToneCurveBlue.size()>0){
198 d->painter.save();
199 d->painter.setCompositionMode(QPainter::CompositionMode_Screen);
200 QPainterPath path;
201 start = d->ToneCurveRed.at(0);
202 mapPoint(start);
203 path.moveTo(start);
204 foreach (QPointF Point, d->ToneCurveRed) {
205 mapPoint(Point);
206 path.lineTo(Point);
207 }
208 d->painter.setPen(qRgb(255, 0, 0));
209 d->painter.drawPath(path);
210 QPainterPath path2;
211 start = d->ToneCurveGreen.at(0);
212 mapPoint(start);
213 path2.moveTo(start);
214 foreach (QPointF Point, d->ToneCurveGreen) {
215 mapPoint(Point);
216 path2.lineTo(Point);
217 }
218 d->painter.setPen(qRgb(0, 255, 0));
219 d->painter.drawPath(path2);
220 QPainterPath path3;
221 start = d->ToneCurveBlue.at(0);
222 mapPoint(start);
223 path3.moveTo(start);
224 foreach (QPointF Point, d->ToneCurveBlue) {
225 mapPoint(Point);
226 path3.lineTo(Point);
227 }
228 d->painter.setPen(qRgb(0, 0, 255));
229 d->painter.drawPath(path3);
230 d->painter.restore();
231 } else {
232 d->painter2.begin(&d->curvemap);
233 d->painter2.setRenderHint(QPainter::Antialiasing);
234 //d->painter2.setCompositionMode(QPainter::CompositionMode_Multiply);
235 QPainterPath path;
236 start = d->ToneCurveRed.at(0);
237 mapPoint(start);
238 path.moveTo(start);
239 foreach (QPointF Point, d->ToneCurveRed) {
240 mapPoint(Point);
241 path.lineTo(Point);
242 }
243 d->painter2.setPen(qRgb(0, 255, 255));
244 d->painter2.drawPath(path);
245 QPainterPath path2;
246 start = d->ToneCurveGreen.at(0);
247 mapPoint(start);
248 path2.moveTo(start);
249 foreach (QPointF Point, d->ToneCurveGreen) {
250 mapPoint(Point);
251 path2.lineTo(Point);
252 }
253 d->painter2.setPen(qRgb(255, 0, 255));
254 d->painter2.drawPath(path2);
255 QPainterPath path3;
256 start = d->ToneCurveBlue.at(0);
257 mapPoint(start);
258 path3.moveTo(start);
259 foreach (QPointF Point, d->ToneCurveBlue) {
260 mapPoint(Point);
261 path3.lineTo(Point);
262 }
263 d->painter2.setPen(qRgb(255, 255, 0));
264 d->painter2.drawPath(path3);
265 QPainterPath path4;
266 start = d->ToneCurveGray.at(0);
267 mapPoint(start);
268 path4.moveTo(start);
269 foreach (QPointF Point, d->ToneCurveGray) {
270 mapPoint(Point);
271 path4.lineTo(Point);
272 }
273 d->painter2.setPen(qRgb(80, 80, 80));
274 d->painter2.drawPath(path4);
275 d->painter2.end();
276 d->painter.drawPixmap(d->xBias, 0, d->curvemap);
277 }
278 d->painter.end();
279}
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References d, drawGrid(), grids(), and mapPoint().

Member Data Documentation

◆ curvemap

QPixmap KisToneCurveWidget::curvemap

Definition at line 48 of file kis_tone_curve_widget.cpp.

◆ d

Private* const KisToneCurveWidget::d {nullptr}
private

Definition at line 51 of file kis_tone_curve_widget.h.

51{nullptr};

◆ gridside

double KisToneCurveWidget::gridside {0.0}

Definition at line 43 of file kis_tone_curve_widget.cpp.

43{0.0};

◆ needUpdatePixmap

bool KisToneCurveWidget::needUpdatePixmap {false}

Definition at line 29 of file kis_tone_curve_widget.cpp.

29{false};

◆ painter

QPainter KisToneCurveWidget::painter

Definition at line 45 of file kis_tone_curve_widget.cpp.

◆ painter2

QPainter KisToneCurveWidget::painter2

Definition at line 46 of file kis_tone_curve_widget.cpp.

◆ pixmap

QPixmap KisToneCurveWidget::pixmap

Definition at line 47 of file kis_tone_curve_widget.cpp.

◆ profileDataAvailable

bool KisToneCurveWidget::profileDataAvailable {false}

Definition at line 28 of file kis_tone_curve_widget.cpp.

28{false};

◆ pxcols

int KisToneCurveWidget::pxcols {0}

Definition at line 35 of file kis_tone_curve_widget.cpp.

35{0};

◆ pxrows

int KisToneCurveWidget::pxrows {0}

Definition at line 36 of file kis_tone_curve_widget.cpp.

36{0};

◆ ToneCurveBlue

QPolygonF KisToneCurveWidget::ToneCurveBlue

Definition at line 41 of file kis_tone_curve_widget.cpp.

◆ ToneCurveGray

QPolygonF KisToneCurveWidget::ToneCurveGray

Definition at line 38 of file kis_tone_curve_widget.cpp.

◆ ToneCurveGreen

QPolygonF KisToneCurveWidget::ToneCurveGreen

Definition at line 40 of file kis_tone_curve_widget.cpp.

◆ ToneCurveRed

QPolygonF KisToneCurveWidget::ToneCurveRed

Definition at line 39 of file kis_tone_curve_widget.cpp.

◆ TRCGray

bool KisToneCurveWidget::TRCGray {true}

Definition at line 30 of file kis_tone_curve_widget.cpp.

30{true};

◆ TRCRGB

bool KisToneCurveWidget::TRCRGB {false}

Definition at line 31 of file kis_tone_curve_widget.cpp.

31{false};

◆ xBias

int KisToneCurveWidget::xBias {0}

Definition at line 33 of file kis_tone_curve_widget.cpp.

33{0};

◆ yBias

int KisToneCurveWidget::yBias {0}

Definition at line 34 of file kis_tone_curve_widget.cpp.

34{0};

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