Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_fill_painter.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2004 Adrian Page <adrian@pagenet.plus.com>
3 * SPDX-FileCopyrightText: 2004 Bart Coppens <kde@bartcoppens.be>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7#ifndef KIS_FILL_PAINTER_H_
8#define KIS_FILL_PAINTER_H_
9
10#include <QRect>
11
12#include <KoColor.h>
14#include <KoPattern.h>
15
16#include "kis_painter.h"
17#include "kis_types.h"
18#include "kis_selection.h"
19
22
23#include <kritaimage_export.h>
24
25
27
28// XXX: Filling should set dirty rect.
33class KRITAIMAGE_EXPORT KisFillPainter : public KisPainter
34{
35
36public:
38 {
40 RegionFillingMode_BoundaryFill
41 };
42
52
54
55private:
56
57 void initFillPainter();
58
59public:
66 void fillSelection(const QRect &rc, const KoColor &color);
67
71 void fillRect(qint32 x,
72 qint32 y,
73 qint32 w,
74 qint32 h,
75 const KoColor &c,
76 quint8 opacity);
77
81 inline void fillRect(const QRect &rc, const KoColor &c, quint8 opacity)
82 {
83 fillRect(rc.x(), rc.y(), rc.width(), rc.height(), c, opacity);
84 }
85
89 inline void
90 fillRect(qint32 x, qint32 y, qint32 w, qint32 h, const KoColor &c)
91 {
92 fillRect(x, y, w, h, c, OPACITY_OPAQUE_U8);
93 }
94
98 inline void fillRect(const QRect &rc, const KoColor &c)
99 {
100 fillRect(rc.x(), rc.y(), rc.width(), rc.height(), c, OPACITY_OPAQUE_U8);
101 }
102
107 void fillRect(qint32 x1, qint32 y1, qint32 w, qint32 h, const KoPatternSP pattern, const QPoint &offset = QPoint());
108
115 void fillRect(qint32 x1, qint32 y1, qint32 w, qint32 h, const KisPaintDeviceSP device, const QRect& deviceRect);
116
120 void fillRect(const QRect &rc, const KisPaintDeviceSP device, const QRect &deviceRect);
121
125 void fillRect(const QRect& rc, const KoPatternSP pattern, const QPoint &offset = QPoint());
126
130 inline void eraseRect(qint32 x1, qint32 y1, qint32 w, qint32 h)
131 {
133 KoColor c(Qt::black, cs);
134 fillRect(x1, y1, w, h, c, OPACITY_TRANSPARENT_U8);
135 }
136
140 inline void eraseRect(const QRect &rc)
141 {
143 KoColor c(Qt::black, cs);
144 fillRect(rc.x(),
145 rc.y(),
146 rc.width(),
147 rc.height(),
148 c,
150 }
151
161 void fillRectNoCompose(const QRect& rc, const KoPatternSP pattern, const QTransform transform);
162
169 void fillRectNoCompose(qint32 x1, qint32 y1, qint32 w, qint32 h, const KisPaintDeviceSP device, const QRect& deviceRect, const QTransform transform);
170
175 void fillRect(qint32 x1, qint32 y1, qint32 w, qint32 h, const KisFilterConfigurationSP generator);
176
188 void fillColor(int startX, int startY, KisPaintDeviceSP sourceDevice);
189
202 void fillPattern(int startX, int startY, KisPaintDeviceSP sourceDevice, QTransform patternTransform = QTransform());
203
214 KisPixelSelectionSP createFloodSelection(int startX, int startY,
215 KisPaintDeviceSP sourceDevice, KisPaintDeviceSP existingSelection);
216
229 KisPixelSelectionSP createFloodSelection(KisPixelSelectionSP newSelection, int startX, int startY,
230 KisPaintDeviceSP sourceDevice, KisPaintDeviceSP existingSelection);
231
243 void createSimilarColorsSelection(KisPixelSelectionSP outSelection,
244 const KoColor &referenceColor,
245 KisPaintDeviceSP referenceDevice,
246 const QRect &rect,
248
262 QVector<KisStrokeJobData*> createSimilarColorsSelectionJobs(
263 KisPixelSelectionSP outSelection,
264 const QSharedPointer<KoColor> referenceColor,
265 KisPaintDeviceSP referenceDevice,
266 const QRect &rect,
269 );
270
275 inline void setFillThreshold(int threshold)
276 {
277 m_threshold = threshold;
278 }
279
281 int fillThreshold() const {
282 return m_threshold;
283 }
284
296 void setOpacitySpread(int opacitySpread)
297 {
298 m_opacitySpread = opacitySpread;
299 }
300
302 int opacitySpread() const {
303 return m_opacitySpread;
304 }
305
307 void setCloseGap(int gap) {
308 m_closeGap = gap;
309 }
310
315 uint closeGap() const {
316 return m_closeGap;
317 }
318
319 bool useCompositing() const {
320 return m_useCompositing;
321 }
322
323 void setUseCompositing(bool useCompositing) {
324 m_useCompositing = useCompositing;
325 }
326
328 void setWidth(int w) {
329 m_width = w;
330 }
331
333 void setHeight(int h) {
334 m_height = h;
335 }
336
338 bool careForSelection() const {
339 return m_careForSelection;
340 }
341
343 void setCareForSelection(bool set) {
344 m_careForSelection = set;
345 }
346
348 void setAntiAlias(bool antiAlias) {
349 m_antiAlias = antiAlias;
350 }
351
353 bool antiAlias() const {
354 return m_antiAlias;
355 }
356
358 void setSizemod(int sizemod) {
359 m_sizemod = sizemod;
360 }
361
364 int sizemod() const {
365 return m_sizemod;
366 }
367
369 void setFeather(int feather) {
370 m_feather = feather;
371 }
372
375 uint feather() const {
376 return m_feather;
377 }
378
380 void setUseSelectionAsBoundary(bool useSelectionAsBoundary) {
381 m_useSelectionAsBoundary = useSelectionAsBoundary;
382 }
383
386 return m_useSelectionAsBoundary;
387 }
388
390 void setRegionFillingMode(RegionFillingMode regionFillingMode) {
391 m_regionFillingMode = regionFillingMode;
392 }
393
396 return m_regionFillingMode;
397 }
398
402 void setRegionFillingBoundaryColor(const KoColor &regionFillingBoundaryColor) {
403 m_regionFillingBoundaryColor = regionFillingBoundaryColor;
404 }
405
410 return m_regionFillingBoundaryColor;
411 }
412
417 void setStopGrowingAtDarkestPixel(bool stopGrowingAtDarkestPixel) {
418 m_stopGrowingAtDarkestPixel = stopGrowingAtDarkestPixel;
419 }
420
426 return m_stopGrowingAtDarkestPixel;
427 }
428
429protected:
431 {
432 m_fillSelection = fillSelection;
433 }
434
436 {
437 return m_fillSelection;
438 }
439
440 // for floodfill
441 void genericFillStart(int startX, int startY, KisPaintDeviceSP sourceDevice);
442 void genericFillEnd(KisPaintDeviceSP filled);
443
444private:
446
453 int m_width, m_height;
454 QRect m_rect;
461};
462
463#endif //KIS_FILL_PAINTER_H_
const quint8 OPACITY_TRANSPARENT_U8
const quint8 OPACITY_OPAQUE_U8
unsigned int uint
void fillRect(const QRect &rc, const KoColor &c)
bool careForSelection() const
void setWidth(int w)
void setSizemod(int sizemod)
void setHeight(int h)
void setFillThreshold(int threshold)
void setFeather(int feather)
KisSelectionSP currentFillSelection() const
void setCloseGap(int gap)
void setRegionFillingMode(RegionFillingMode regionFillingMode)
KoColor m_regionFillingBoundaryColor
int sizemod() const
int fillThreshold() const
int opacitySpread() const
void setCareForSelection(bool set)
void setUseSelectionAsBoundary(bool useSelectionAsBoundary)
uint useSelectionAsBoundary() const
bool antiAlias() const
uint closeGap() const
void eraseRect(qint32 x1, qint32 y1, qint32 w, qint32 h)
void setRegionFillingBoundaryColor(const KoColor &regionFillingBoundaryColor)
void setCurrentFillSelection(KisSelectionSP fillSelection)
KoColor regionFillingBoundaryColor() const
RegionFillingMode regionFillingMode() const
void fillRect(qint32 x, qint32 y, qint32 w, qint32 h, const KoColor &c)
void setUseCompositing(bool useCompositing)
bool useCompositing() const
uint feather() const
void eraseRect(const QRect &rc)
void setAntiAlias(bool antiAlias)
bool stopGrowingAtDarkestPixel() const
void fillRect(const QRect &rc, const KoColor &c, quint8 opacity)
void setStopGrowingAtDarkestPixel(bool stopGrowingAtDarkestPixel)
RegionFillingMode m_regionFillingMode
void setOpacitySpread(int opacitySpread)
KisSelectionSP m_fillSelection
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())