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

#include <fill_processing_visitor.h>

+ Inheritance diagram for FillProcessingVisitor:

Public Types

enum  ContinuousFillMode { ContinuousFillMode_DoNotUse , ContinuousFillMode_FillAnyRegion , ContinuousFillMode_FillSimilarRegions }
 

Public Member Functions

 FillProcessingVisitor (KisPaintDeviceSP referencePaintDevice, KisSelectionSP selection, KisResourcesSnapshotSP resources)
 
void setAntiAlias (bool antiAlias)
 
void setCloseGap (int gap)
 
void setContinuousFillMask (KisSelectionSP continuousFillMask)
 
void setContinuousFillMode (ContinuousFillMode continuousFillMode)
 
void setContinuousFillReferenceColor (const QSharedPointer< KoColor > continuousFillReferenceColor)
 
void setCustomCompositeOp (const QString &customCompositeOp)
 
void setCustomOpacity (qreal customOpacity)
 
void setFeather (int feather)
 
void setFillThreshold (int fillThreshold)
 
void setOpacitySpread (int opacitySpread)
 
void setOutDirtyRect (QSharedPointer< QRect > outDirtyRect)
 
void setProgressHelper (QSharedPointer< ProgressHelper > progressHelper)
 
void setRegionFillingBoundaryColor (const KoColor &regionFillingBoundaryColor)
 
void setRegionFillingMode (KisFillPainter::RegionFillingMode regionFillingMode)
 
void setSeedPoint (const QPoint &seedPoint)
 
void setSeedPoints (const QVector< QPoint > &seedPoints)
 
void setSelectionOnly (bool selectionOnly)
 
void setSizeMod (int sizemod)
 
void setStopGrowingAtDarkestPixel (bool stopGrowingAtDarkestPixel)
 
void setUnmerged (bool unmerged)
 
void setUseBgColor (bool useBgColor)
 
void setUseCustomBlendingOptions (bool useCustomBlendingOptions)
 
void setUseFastMode (bool useFastMode)
 
void setUsePattern (bool usePattern)
 
void setUseSelectionAsBoundary (bool useSelectionAsBoundary)
 
- Public Member Functions inherited from KisSimpleProcessingVisitor
void visit (KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisCloneLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisFilterMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisNode *node, KisUndoAdapter *undoAdapter) override
 
void visit (KisPaintLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisSelectionMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransformMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransparencyMask *mask, KisUndoAdapter *undoAdapter) override
 
 ~KisSimpleProcessingVisitor () override
 
- Public Member Functions inherited from KisProcessingVisitor
virtual KUndo2CommandcreateInitCommand ()
 
virtual ~KisProcessingVisitor ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Private Member Functions

void continuousFill (KisPaintDeviceSP device, const QRect &fillRect, const QPoint &seedPoint, KisUndoAdapter *undoAdapter)
 
void fillPaintDevice (KisPaintDeviceSP device, KisUndoAdapter *undoAdapter)
 
void normalFill (KisPaintDeviceSP device, const QRect &fillRect, const QPoint &seedPoint, KisUndoAdapter *undoAdapter)
 
void selectionFill (KisPaintDeviceSP device, const QRect &fillRect, KisUndoAdapter *undoAdapter)
 
void visitColorizeMask (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
void visitExternalLayer (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visitNodeWithPaintDevice (KisNode *node, KisUndoAdapter *undoAdapter) override
 

Private Attributes

bool m_antiAlias
 
int m_closeGap
 
KisSelectionSP m_continuousFillMask
 
ContinuousFillMode m_continuousFillMode
 
QSharedPointer< KoColorm_continuousFillReferenceColor {nullptr}
 
QString m_customCompositeOp
 
qreal m_customOpacity
 
int m_feather
 
int m_fillThreshold
 
int m_opacitySpread
 
QSharedPointer< QRect > m_outDirtyRect
 
QSharedPointer< ProgressHelperm_progressHelper {nullptr}
 
KisPaintDeviceSP m_refPaintDevice
 
KoColor m_regionFillingBoundaryColor
 
KisFillPainter::RegionFillingMode m_regionFillingMode
 
KisResourcesSnapshotSP m_resources
 
QVector< QPoint > m_seedPoints
 
KisSelectionSP m_selection
 
bool m_selectionOnly
 
int m_sizemod
 
bool m_stopGrowingAtDarkestPixel
 
bool m_unmerged
 
bool m_useBgColor
 
bool m_useCustomBlendingOptions
 
bool m_useFastMode
 
bool m_usePattern
 
bool m_useSelectionAsBoundary
 

Additional Inherited Members

- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Definition at line 18 of file fill_processing_visitor.h.

Member Enumeration Documentation

◆ ContinuousFillMode

Enumerator
ContinuousFillMode_DoNotUse 
ContinuousFillMode_FillAnyRegion 
ContinuousFillMode_FillSimilarRegions 

Definition at line 21 of file fill_processing_visitor.h.

Constructor & Destructor Documentation

◆ FillProcessingVisitor()

FillProcessingVisitor::FillProcessingVisitor ( KisPaintDeviceSP referencePaintDevice,
KisSelectionSP selection,
KisResourcesSnapshotSP resources )

Definition at line 20 of file fill_processing_visitor.cpp.

23 : m_refPaintDevice(refPaintDevice)
24 , m_selection(selection)
25 , m_resources(resources)
26 , m_useFastMode(false)
27 , m_selectionOnly(false)
29 , m_usePattern(false)
30 , m_antiAlias(false)
31 , m_feather(0)
32 , m_sizemod(0)
36 , m_closeGap(0)
39 , m_continuousFillMask(nullptr)
41 , m_unmerged(false)
42 , m_useBgColor(false)
46 , m_progressHelper(nullptr)
47{}
const qreal OPACITY_OPAQUE_F
const QString COMPOSITE_OVER
QSharedPointer< KoColor > m_continuousFillReferenceColor
QSharedPointer< ProgressHelper > m_progressHelper
KisResourcesSnapshotSP m_resources
ContinuousFillMode m_continuousFillMode
KisFillPainter::RegionFillingMode m_regionFillingMode

Member Function Documentation

◆ continuousFill()

void FillProcessingVisitor::continuousFill ( KisPaintDeviceSP device,
const QRect & fillRect,
const QPoint & seedPoint,
KisUndoAdapter * undoAdapter )
private

Definition at line 202 of file fill_processing_visitor.cpp.

203{
204 // In continuous filling we use a selection mask that represents the
205 // cumulated regions already filled. Being able to discard filling
206 // operations based on if they were already filled the area under
207 // the cursor speeds up greatly the continuous fill operation
208
211
212 // The following checks are useful in the continuous fill.
214 // If we must use the current selection as boundary we must discard
215 // the continuous fill points that lie outside of it.
216 // This avoids unnecessary and expensive flood fill operations
217 // when the user drags the mouse outside the selection.
218 if (!m_selection->selectedRect().contains(seedPoint)) {
219 return;
220 }
221 const quint8 opacity = m_selection->projection()->pixel(seedPoint).opacityU8();
222 if (opacity == OPACITY_TRANSPARENT_U8) {
223 return;
224 }
225 }
226 // Filling a pixel is likely to fill nearby pixels with the same color,
227 // so this check should reduce the number of flood fill operations
228 // considerably
229 {
230 // If the color in the m_continuous fill mask under the start point
231 // equals white we return early and don't fill. This means the area
232 // under the start point was already filled
233 const quint8 opacity = m_continuousFillMask->pixelSelection()->pixel(seedPoint).opacityU8();
234 if (opacity == OPACITY_OPAQUE_U8) {
235 return;
236 }
237 }
239 // If the color in the reference device under the start point
240 // differs from the reference color we return early and don't fill
241 const KoColor referenceColor = m_continuousFillReferenceColor->convertedTo(m_refPaintDevice->colorSpace());
242 const KoColor referenceDeviceColor = m_refPaintDevice->pixel(seedPoint);
243 if (referenceColor != referenceDeviceColor) {
244 return;
245 }
246 }
247
248 KisSelectionSP newFillSelection;
249 KisPaintDeviceSP sourceDevice = m_unmerged ? device : m_refPaintDevice;
250 // First we get the new region mask
251 {
252 KisFillPainter painter;
253
254 painter.setProgress(m_progressHelper->updater());
255 painter.setSizemod(m_sizemod);
257 painter.setAntiAlias(m_antiAlias);
258 painter.setFeather(m_feather);
261 painter.setCloseGap(m_closeGap);
265 }
266 painter.setCareForSelection(true);
268 painter.setWidth(fillRect.width());
269 painter.setHeight(fillRect.height());
271
272 KisPixelSelectionSP pixelSelection = painter.createFloodSelection(seedPoint.x(),
273 seedPoint.y(),
274 sourceDevice,
275 m_selection.isNull() ? 0 : m_selection->pixelSelection());
276
277 newFillSelection = new KisSelection(pixelSelection->defaultBounds(),
279 newFillSelection->pixelSelection()->applySelection(pixelSelection, SELECTION_REPLACE);
280 }
281 // Now we actually fill the destination device
282 // If there is an active selection, we use a trimmed version of the mask to
283 // fill. We cannot trim the obtained mask since that would delete the not
284 // selected areas from it and those are need to be part of the continuous
285 // fill mask. This avoids unnecessary and expensive flood fill operations
286 // when the user drags the mouse outside the selection.
287 {
288 KisSelectionSP trimmedFillSelection;
289 if (m_selection) {
290 trimmedFillSelection = new KisSelection(newFillSelection->pixelSelection()->defaultBounds(), newFillSelection->resolutionProxy());
291 trimmedFillSelection->pixelSelection()->applySelection(newFillSelection->pixelSelection(), SELECTION_REPLACE);
293 } else {
294 trimmedFillSelection = newFillSelection;
295 }
296 KisSelectionSP tmpSelection = m_selection;
297 m_selection = trimmedFillSelection;
298 selectionFill(device, fillRect, undoAdapter);
299 m_selection = tmpSelection;
300 }
301 // Now we update the continuous fill mask with the new mask
302 {
304 }
305}
@ SELECTION_REPLACE
@ SELECTION_INTERSECT
@ SELECTION_ADD
const quint8 OPACITY_TRANSPARENT_U8
const quint8 OPACITY_OPAQUE_U8
void selectionFill(KisPaintDeviceSP device, const QRect &fillRect, KisUndoAdapter *undoAdapter)
void setWidth(int w)
void setSizemod(int sizemod)
void setHeight(int h)
void setFillThreshold(int threshold)
void setFeather(int feather)
void setCloseGap(int gap)
void setRegionFillingMode(RegionFillingMode regionFillingMode)
KisPixelSelectionSP createFloodSelection(int startX, int startY, KisPaintDeviceSP sourceDevice, KisPaintDeviceSP existingSelection)
void setCareForSelection(bool set)
void setUseSelectionAsBoundary(bool useSelectionAsBoundary)
void setRegionFillingBoundaryColor(const KoColor &regionFillingBoundaryColor)
void setUseCompositing(bool useCompositing)
void setAntiAlias(bool antiAlias)
void setStopGrowingAtDarkestPixel(bool stopGrowingAtDarkestPixel)
void setOpacitySpread(int opacitySpread)
const KoColorSpace * colorSpace() const
bool pixel(qint32 x, qint32 y, QColor *c) const
KisDefaultBoundsBaseSP defaultBounds() const
void setProgress(KoUpdater *progressUpdater)
bool isNull() const
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
void applySelection(KisPixelSelectionSP selection, SelectionAction action)
KisPixelSelectionSP projection() const
bool hasNonEmptyPixelSelection() const
KisImageResolutionProxySP resolutionProxy
KisPixelSelectionSP pixelSelection
QRect selectedRect() const

References KisPixelSelection::applySelection(), KisPaintDevice::colorSpace(), ContinuousFillMode_FillSimilarRegions, KisFillPainter::createFloodSelection(), KisPaintDevice::defaultBounds(), KisSelection::hasNonEmptyPixelSelection(), KisImageResolutionProxy::identity(), KisSharedPtr< T >::isNull(), KIS_ASSERT, KIS_SAFE_ASSERT_RECOVER_NOOP, m_antiAlias, m_closeGap, m_continuousFillMask, m_continuousFillMode, m_continuousFillReferenceColor, m_feather, m_fillThreshold, m_opacitySpread, m_progressHelper, m_refPaintDevice, m_regionFillingBoundaryColor, m_regionFillingMode, m_selection, m_sizemod, m_stopGrowingAtDarkestPixel, m_unmerged, m_useFastMode, m_useSelectionAsBoundary, OPACITY_OPAQUE_U8, OPACITY_TRANSPARENT_U8, KisPaintDevice::pixel(), KisSelection::pixelSelection, KisSelection::projection(), KisFillPainter::RegionFillingMode_BoundaryFill, KisSelection::resolutionProxy, KisSelection::selectedRect(), SELECTION_ADD, SELECTION_INTERSECT, SELECTION_REPLACE, selectionFill(), KisFillPainter::setAntiAlias(), KisFillPainter::setCareForSelection(), KisFillPainter::setCloseGap(), KisFillPainter::setFeather(), KisFillPainter::setFillThreshold(), KisFillPainter::setHeight(), KisFillPainter::setOpacitySpread(), KisPainter::setProgress(), KisFillPainter::setRegionFillingBoundaryColor(), KisFillPainter::setRegionFillingMode(), KisFillPainter::setSizemod(), KisFillPainter::setStopGrowingAtDarkestPixel(), KisFillPainter::setUseCompositing(), KisFillPainter::setUseSelectionAsBoundary(), and KisFillPainter::setWidth().

◆ fillPaintDevice()

void FillProcessingVisitor::fillPaintDevice ( KisPaintDeviceSP device,
KisUndoAdapter * undoAdapter )
private

Definition at line 75 of file fill_processing_visitor.cpp.

76{
77 KIS_ASSERT(!m_seedPoints.isEmpty());
78
79 QRect fillRect = m_resources->image()->bounds();
80
82 if (autoKeyframeCommand) {
83 undoAdapter->addCommand(autoKeyframeCommand);
84 }
85
86 if (m_selectionOnly ||
87 (m_refPaintDevice->nonDefaultPixelArea().isEmpty() && m_sizemod == 0 && m_feather == 0 && !m_antiAlias)) {
88 if (device->defaultBounds()->wrapAroundMode()) {
89 // Always fill if wrap around mode is on
90 selectionFill(device, fillRect, undoAdapter);
91 } else {
92 // Otherwise fill only if any of the points is inside the rect
93 for (const QPoint &seedPoint : m_seedPoints) {
94 if (fillRect.contains(seedPoint)) {
95 selectionFill(device, fillRect, undoAdapter);
96 break;
97 }
98 }
99 }
100 } else {
101 for (QPoint seedPoint : m_seedPoints) {
102 if (device->defaultBounds()->wrapAroundMode()) {
103 seedPoint = KisWrappedRect::ptToWrappedPt(seedPoint, device->defaultBounds()->imageBorderRect(), device->defaultBounds()->wrapAroundModeAxis());
104 }
105
107 normalFill(device, fillRect, seedPoint, undoAdapter);
108 } else {
109 continuousFill(device, fillRect, seedPoint, undoAdapter);
110 }
111 }
112 }
113}
void normalFill(KisPaintDeviceSP device, const QRect &fillRect, const QPoint &seedPoint, KisUndoAdapter *undoAdapter)
void continuousFill(KisPaintDeviceSP device, const QRect &fillRect, const QPoint &seedPoint, KisUndoAdapter *undoAdapter)
virtual WrapAroundAxis wrapAroundModeAxis() const =0
virtual bool wrapAroundMode() const =0
virtual QRect imageBorderRect() const
QRect bounds() const override
QRect nonDefaultPixelArea() const
virtual void addCommand(KUndo2Command *cmd)=0
KUndo2Command * tryAutoCreateDuplicatedFrame(KisPaintDeviceSP device, AutoCreateKeyframeFlags flags)
create a new duplicated keyframe if auto-keyframe mode is on
static QPoint ptToWrappedPt(QPoint pt, const QRect &wrapRect, WrapAroundAxis wrapAxis)

References KisUndoAdapter::addCommand(), KisAutoKey::AllowBlankMode, KisImage::bounds(), continuousFill(), ContinuousFillMode_DoNotUse, KisPaintDevice::defaultBounds(), KisResourcesSnapshot::image(), KisDefaultBoundsBase::imageBorderRect(), KIS_ASSERT, m_antiAlias, m_continuousFillMode, m_feather, m_refPaintDevice, m_resources, m_seedPoints, m_selectionOnly, m_sizemod, KisPaintDevice::nonDefaultPixelArea(), normalFill(), KisWrappedRect::ptToWrappedPt(), selectionFill(), KisAutoKey::tryAutoCreateDuplicatedFrame(), KisDefaultBoundsBase::wrapAroundMode(), and KisDefaultBoundsBase::wrapAroundModeAxis().

◆ normalFill()

void FillProcessingVisitor::normalFill ( KisPaintDeviceSP device,
const QRect & fillRect,
const QPoint & seedPoint,
KisUndoAdapter * undoAdapter )
private

Definition at line 152 of file fill_processing_visitor.cpp.

153{
154 KisFillPainter fillPainter(device, m_selection);
155 fillPainter.beginTransaction();
156
157 m_resources->setupPainter(&fillPainter);
158
159 if (m_useBgColor) {
160 fillPainter.setPaintColor(fillPainter.backgroundColor());
161 }
162 fillPainter.setProgress(m_progressHelper->updater());
163 fillPainter.setAntiAlias(m_antiAlias);
164 fillPainter.setSizemod(m_sizemod);
165 fillPainter.setStopGrowingAtDarkestPixel(m_stopGrowingAtDarkestPixel);
166 fillPainter.setFeather(m_feather);
167 fillPainter.setFillThreshold(m_fillThreshold);
168 fillPainter.setOpacitySpread(m_opacitySpread);
169 fillPainter.setCloseGap(m_closeGap);
170 fillPainter.setRegionFillingMode(m_regionFillingMode);
172 fillPainter.setRegionFillingBoundaryColor(m_regionFillingBoundaryColor);
173 }
174 fillPainter.setCareForSelection(true);
175 fillPainter.setUseSelectionAsBoundary((m_selection.isNull() || !m_selection->hasNonEmptyPixelSelection()) ? false : m_useSelectionAsBoundary);
176 fillPainter.setWidth(fillRect.width());
177 fillPainter.setHeight(fillRect.height());
178 fillPainter.setUseCompositing(!m_useFastMode);
180 fillPainter.setOpacityF(m_customOpacity);
181 fillPainter.setCompositeOpId(m_customCompositeOp);
182 }
183
184 KisPaintDeviceSP sourceDevice = m_unmerged ? device : m_refPaintDevice;
185
186 if (m_usePattern) {
187 fillPainter.fillPattern(seedPoint.x(), seedPoint.y(), sourceDevice, m_resources->fillTransform());
188 } else {
189 fillPainter.fillColor(seedPoint.x(), seedPoint.y(), sourceDevice);
190 }
191
192 fillPainter.endTransaction(undoAdapter);
193
194 if (m_outDirtyRect) {
195 QVector<QRect> dirtyRects = fillPainter.takeDirtyRegion();
196 Q_FOREACH(const QRect &r, dirtyRects) {
197 *m_outDirtyRect = m_outDirtyRect->united(r);
198 }
199 }
200}
QSharedPointer< QRect > m_outDirtyRect
void setupPainter(KisPainter *painter)

References KisPainter::backgroundColor, KisPainter::beginTransaction(), KisPainter::endTransaction(), KisFillPainter::fillColor(), KisFillPainter::fillPattern(), KisResourcesSnapshot::fillTransform(), KisSelection::hasNonEmptyPixelSelection(), KisSharedPtr< T >::isNull(), m_antiAlias, m_closeGap, m_customCompositeOp, m_customOpacity, m_feather, m_fillThreshold, m_opacitySpread, m_outDirtyRect, m_progressHelper, m_refPaintDevice, m_regionFillingBoundaryColor, m_regionFillingMode, m_resources, m_selection, m_sizemod, m_stopGrowingAtDarkestPixel, m_unmerged, m_useBgColor, m_useCustomBlendingOptions, m_useFastMode, m_usePattern, m_useSelectionAsBoundary, KisFillPainter::RegionFillingMode_BoundaryFill, KisFillPainter::setAntiAlias(), KisFillPainter::setCareForSelection(), KisFillPainter::setCloseGap(), KisPainter::setCompositeOpId(), KisFillPainter::setFeather(), KisFillPainter::setFillThreshold(), KisFillPainter::setHeight(), KisPainter::setOpacityF(), KisFillPainter::setOpacitySpread(), KisPainter::setPaintColor(), KisPainter::setProgress(), KisFillPainter::setRegionFillingBoundaryColor(), KisFillPainter::setRegionFillingMode(), KisFillPainter::setSizemod(), KisFillPainter::setStopGrowingAtDarkestPixel(), KisResourcesSnapshot::setupPainter(), KisFillPainter::setUseCompositing(), KisFillPainter::setUseSelectionAsBoundary(), KisFillPainter::setWidth(), and KisPainter::takeDirtyRegion().

◆ selectionFill()

void FillProcessingVisitor::selectionFill ( KisPaintDeviceSP device,
const QRect & fillRect,
KisUndoAdapter * undoAdapter )
private

Definition at line 115 of file fill_processing_visitor.cpp.

116{
117 const QRect fillRect_ = m_selection ? m_selection->selectedRect() : fillRect;
118 KisPaintDeviceSP filledDevice = device->createCompositionSourceDevice();
119 KisFillPainter fillPainter(filledDevice);
120 fillPainter.setProgress(m_progressHelper->updater());
121
122 if (m_usePattern) {
123 fillPainter.fillRectNoCompose(fillRect_, m_resources->currentPattern(), m_resources->fillTransform());
124 } else if (m_useBgColor) {
125 fillPainter.fillRect(fillRect_, m_resources->currentBgColor(), OPACITY_OPAQUE_U8);
126 } else {
127 fillPainter.fillRect(fillRect_, m_resources->currentFgColor(), OPACITY_OPAQUE_U8);
128 }
129
130 QVector<QRect> dirtyRect = fillPainter.takeDirtyRegion();
131
132 KisPainter painter(device, m_selection);
133 painter.beginTransaction();
134
135 m_resources->setupPainter(&painter);
136
138 painter.setOpacityF(m_customOpacity);
139 painter.setCompositeOpId(m_customCompositeOp);
140 }
141
142 Q_FOREACH (const QRect &rc, dirtyRect) {
143 painter.bitBlt(rc.topLeft(), filledDevice, rc);
144 if (m_outDirtyRect) {
145 *m_outDirtyRect = m_outDirtyRect->united(rc);
146 }
147 }
148
149 painter.endTransaction(undoAdapter);
150}
KisPaintDeviceSP createCompositionSourceDevice() const
KoPatternSP currentPattern() const

References KisPainter::beginTransaction(), KisPainter::bitBlt(), KisPaintDevice::createCompositionSourceDevice(), KisResourcesSnapshot::currentBgColor(), KisResourcesSnapshot::currentFgColor(), KisResourcesSnapshot::currentPattern(), KisPainter::endTransaction(), KisFillPainter::fillRect(), KisFillPainter::fillRectNoCompose(), KisResourcesSnapshot::fillTransform(), m_customCompositeOp, m_customOpacity, m_outDirtyRect, m_progressHelper, m_resources, m_selection, m_useBgColor, m_useCustomBlendingOptions, m_usePattern, OPACITY_OPAQUE_U8, KisSelection::selectedRect(), KisPainter::setCompositeOpId(), KisPainter::setOpacityF(), KisPainter::setProgress(), KisResourcesSnapshot::setupPainter(), and KisPainter::takeDirtyRegion().

◆ setAntiAlias()

void FillProcessingVisitor::setAntiAlias ( bool antiAlias)

Definition at line 338 of file fill_processing_visitor.cpp.

339{
340 m_antiAlias = antiAlias;
341}

References m_antiAlias.

◆ setCloseGap()

void FillProcessingVisitor::setCloseGap ( int gap)

Definition at line 368 of file fill_processing_visitor.cpp.

369{
370 m_closeGap = gap;
371}

References m_closeGap.

◆ setContinuousFillMask()

void FillProcessingVisitor::setContinuousFillMask ( KisSelectionSP continuousFillMask)

Definition at line 388 of file fill_processing_visitor.cpp.

389{
390 m_continuousFillMask = continuousFillMask;
391}

References m_continuousFillMask.

◆ setContinuousFillMode()

void FillProcessingVisitor::setContinuousFillMode ( ContinuousFillMode continuousFillMode)

Definition at line 383 of file fill_processing_visitor.cpp.

384{
385 m_continuousFillMode = continuousFillMode;
386}

References m_continuousFillMode.

◆ setContinuousFillReferenceColor()

void FillProcessingVisitor::setContinuousFillReferenceColor ( const QSharedPointer< KoColor > continuousFillReferenceColor)

Definition at line 393 of file fill_processing_visitor.cpp.

394{
395 m_continuousFillReferenceColor = continuousFillReferenceColor;
396}

References m_continuousFillReferenceColor.

◆ setCustomCompositeOp()

void FillProcessingVisitor::setCustomCompositeOp ( const QString & customCompositeOp)

Definition at line 418 of file fill_processing_visitor.cpp.

419{
420 m_customCompositeOp = customCompositeOp;
421}

References m_customCompositeOp.

◆ setCustomOpacity()

void FillProcessingVisitor::setCustomOpacity ( qreal customOpacity)

Definition at line 413 of file fill_processing_visitor.cpp.

414{
415 m_customOpacity = customOpacity;
416}

References m_customOpacity.

◆ setFeather()

void FillProcessingVisitor::setFeather ( int feather)

Definition at line 343 of file fill_processing_visitor.cpp.

344{
345 m_feather = feather;
346}

References m_feather.

◆ setFillThreshold()

void FillProcessingVisitor::setFillThreshold ( int fillThreshold)

Definition at line 358 of file fill_processing_visitor.cpp.

359{
360 m_fillThreshold = fillThreshold;
361}

References m_fillThreshold.

◆ setOpacitySpread()

void FillProcessingVisitor::setOpacitySpread ( int opacitySpread)

Definition at line 363 of file fill_processing_visitor.cpp.

364{
365 m_opacitySpread = opacitySpread;
366}

References m_opacitySpread.

◆ setOutDirtyRect()

void FillProcessingVisitor::setOutDirtyRect ( QSharedPointer< QRect > outDirtyRect)

Definition at line 423 of file fill_processing_visitor.cpp.

424{
425 m_outDirtyRect = outDirtyRect;
426}

References m_outDirtyRect.

◆ setProgressHelper()

void FillProcessingVisitor::setProgressHelper ( QSharedPointer< ProgressHelper > progressHelper)

Definition at line 428 of file fill_processing_visitor.cpp.

429{
430 m_progressHelper = progressHelper;
431}

References m_progressHelper.

◆ setRegionFillingBoundaryColor()

void FillProcessingVisitor::setRegionFillingBoundaryColor ( const KoColor & regionFillingBoundaryColor)

Definition at line 378 of file fill_processing_visitor.cpp.

379{
380 m_regionFillingBoundaryColor = regionFillingBoundaryColor;
381}

References m_regionFillingBoundaryColor.

◆ setRegionFillingMode()

void FillProcessingVisitor::setRegionFillingMode ( KisFillPainter::RegionFillingMode regionFillingMode)

Definition at line 373 of file fill_processing_visitor.cpp.

374{
375 m_regionFillingMode = regionFillingMode;
376}

References m_regionFillingMode.

◆ setSeedPoint()

void FillProcessingVisitor::setSeedPoint ( const QPoint & seedPoint)

Definition at line 307 of file fill_processing_visitor.cpp.

308{
309 m_seedPoints.clear();
310 m_seedPoints.append(seedPoint);
311}

References m_seedPoints.

◆ setSeedPoints()

void FillProcessingVisitor::setSeedPoints ( const QVector< QPoint > & seedPoints)

Definition at line 313 of file fill_processing_visitor.cpp.

314{
315 m_seedPoints = seedPoints;
316}

References m_seedPoints.

◆ setSelectionOnly()

void FillProcessingVisitor::setSelectionOnly ( bool selectionOnly)

Definition at line 328 of file fill_processing_visitor.cpp.

329{
330 m_selectionOnly = selectionOnly;
331}

References m_selectionOnly.

◆ setSizeMod()

void FillProcessingVisitor::setSizeMod ( int sizemod)

Definition at line 348 of file fill_processing_visitor.cpp.

349{
350 m_sizemod = sizemod;
351}

References m_sizemod.

◆ setStopGrowingAtDarkestPixel()

void FillProcessingVisitor::setStopGrowingAtDarkestPixel ( bool stopGrowingAtDarkestPixel)

Definition at line 353 of file fill_processing_visitor.cpp.

354{
355 m_stopGrowingAtDarkestPixel = stopGrowingAtDarkestPixel;
356}

References m_stopGrowingAtDarkestPixel.

◆ setUnmerged()

void FillProcessingVisitor::setUnmerged ( bool unmerged)

Definition at line 398 of file fill_processing_visitor.cpp.

399{
400 m_unmerged = unmerged;
401}

References m_unmerged.

◆ setUseBgColor()

void FillProcessingVisitor::setUseBgColor ( bool useBgColor)

Definition at line 403 of file fill_processing_visitor.cpp.

404{
405 m_useBgColor = useBgColor;
406}

References m_useBgColor.

◆ setUseCustomBlendingOptions()

void FillProcessingVisitor::setUseCustomBlendingOptions ( bool useCustomBlendingOptions)

Definition at line 408 of file fill_processing_visitor.cpp.

409{
410 m_useCustomBlendingOptions = useCustomBlendingOptions;
411}

References m_useCustomBlendingOptions.

◆ setUseFastMode()

void FillProcessingVisitor::setUseFastMode ( bool useFastMode)

Definition at line 318 of file fill_processing_visitor.cpp.

319{
320 m_useFastMode = useFastMode;
321}

References m_useFastMode.

◆ setUsePattern()

void FillProcessingVisitor::setUsePattern ( bool usePattern)

Definition at line 323 of file fill_processing_visitor.cpp.

324{
325 m_usePattern = usePattern;
326}

References m_usePattern.

◆ setUseSelectionAsBoundary()

void FillProcessingVisitor::setUseSelectionAsBoundary ( bool useSelectionAsBoundary)

Definition at line 333 of file fill_processing_visitor.cpp.

334{
335 m_useSelectionAsBoundary = useSelectionAsBoundary;
336}

References m_useSelectionAsBoundary.

◆ visitColorizeMask()

void FillProcessingVisitor::visitColorizeMask ( KisColorizeMask * mask,
KisUndoAdapter * undoAdapter )
overrideprivatevirtual

Implements KisSimpleProcessingVisitor.

Definition at line 65 of file fill_processing_visitor.cpp.

66{
67 // we fill only the coloring project so the user can work
68 // with the mask like with a usual paint layer
69 if (!m_progressHelper) {
70 m_progressHelper.reset(new ProgressHelper(mask));
71 }
72 fillPaintDevice(mask->coloringProjection(), undoAdapter);
73}
void fillPaintDevice(KisPaintDeviceSP device, KisUndoAdapter *undoAdapter)
KisPaintDeviceSP coloringProjection() const

References KisColorizeMask::coloringProjection(), fillPaintDevice(), and m_progressHelper.

◆ visitExternalLayer()

void FillProcessingVisitor::visitExternalLayer ( KisExternalLayer * layer,
KisUndoAdapter * undoAdapter )
overrideprivatevirtual

Implements KisSimpleProcessingVisitor.

Definition at line 49 of file fill_processing_visitor.cpp.

50{
51 Q_UNUSED(layer);
52 Q_UNUSED(undoAdapter);
53}

◆ visitNodeWithPaintDevice()

void FillProcessingVisitor::visitNodeWithPaintDevice ( KisNode * node,
KisUndoAdapter * undoAdapter )
overrideprivatevirtual

Implements KisSimpleProcessingVisitor.

Definition at line 55 of file fill_processing_visitor.cpp.

56{
57 KisPaintDeviceSP device = node->paintDevice();
58 KIS_ASSERT(device);
59 if (!m_progressHelper) {
60 m_progressHelper.reset(new ProgressHelper(node));
61 }
62 fillPaintDevice(device, undoAdapter);
63}
virtual KisPaintDeviceSP paintDevice() const =0

References fillPaintDevice(), KIS_ASSERT, m_progressHelper, and KisBaseNode::paintDevice().

Member Data Documentation

◆ m_antiAlias

bool FillProcessingVisitor::m_antiAlias
private

Definition at line 79 of file fill_processing_visitor.h.

◆ m_closeGap

int FillProcessingVisitor::m_closeGap
private

Definition at line 85 of file fill_processing_visitor.h.

◆ m_continuousFillMask

KisSelectionSP FillProcessingVisitor::m_continuousFillMask
private

Definition at line 90 of file fill_processing_visitor.h.

◆ m_continuousFillMode

ContinuousFillMode FillProcessingVisitor::m_continuousFillMode
private

Definition at line 89 of file fill_processing_visitor.h.

◆ m_continuousFillReferenceColor

QSharedPointer<KoColor> FillProcessingVisitor::m_continuousFillReferenceColor {nullptr}
private

Definition at line 91 of file fill_processing_visitor.h.

91{nullptr};

◆ m_customCompositeOp

QString FillProcessingVisitor::m_customCompositeOp
private

Definition at line 98 of file fill_processing_visitor.h.

◆ m_customOpacity

qreal FillProcessingVisitor::m_customOpacity
private

Definition at line 97 of file fill_processing_visitor.h.

◆ m_feather

int FillProcessingVisitor::m_feather
private

Definition at line 80 of file fill_processing_visitor.h.

◆ m_fillThreshold

int FillProcessingVisitor::m_fillThreshold
private

Definition at line 83 of file fill_processing_visitor.h.

◆ m_opacitySpread

int FillProcessingVisitor::m_opacitySpread
private

Definition at line 84 of file fill_processing_visitor.h.

◆ m_outDirtyRect

QSharedPointer<QRect> FillProcessingVisitor::m_outDirtyRect
private

Definition at line 100 of file fill_processing_visitor.h.

◆ m_progressHelper

QSharedPointer<ProgressHelper> FillProcessingVisitor::m_progressHelper {nullptr}
private

Definition at line 102 of file fill_processing_visitor.h.

102{nullptr};

◆ m_refPaintDevice

KisPaintDeviceSP FillProcessingVisitor::m_refPaintDevice
private

Definition at line 70 of file fill_processing_visitor.h.

◆ m_regionFillingBoundaryColor

KoColor FillProcessingVisitor::m_regionFillingBoundaryColor
private

Definition at line 87 of file fill_processing_visitor.h.

◆ m_regionFillingMode

KisFillPainter::RegionFillingMode FillProcessingVisitor::m_regionFillingMode
private

Definition at line 86 of file fill_processing_visitor.h.

◆ m_resources

KisResourcesSnapshotSP FillProcessingVisitor::m_resources
private

Definition at line 72 of file fill_processing_visitor.h.

◆ m_seedPoints

QVector<QPoint> FillProcessingVisitor::m_seedPoints
private

Definition at line 74 of file fill_processing_visitor.h.

◆ m_selection

KisSelectionSP FillProcessingVisitor::m_selection
private

Definition at line 71 of file fill_processing_visitor.h.

◆ m_selectionOnly

bool FillProcessingVisitor::m_selectionOnly
private

Definition at line 76 of file fill_processing_visitor.h.

◆ m_sizemod

int FillProcessingVisitor::m_sizemod
private

Definition at line 81 of file fill_processing_visitor.h.

◆ m_stopGrowingAtDarkestPixel

bool FillProcessingVisitor::m_stopGrowingAtDarkestPixel
private

Definition at line 82 of file fill_processing_visitor.h.

◆ m_unmerged

bool FillProcessingVisitor::m_unmerged
private

Definition at line 93 of file fill_processing_visitor.h.

◆ m_useBgColor

bool FillProcessingVisitor::m_useBgColor
private

Definition at line 94 of file fill_processing_visitor.h.

◆ m_useCustomBlendingOptions

bool FillProcessingVisitor::m_useCustomBlendingOptions
private

Definition at line 96 of file fill_processing_visitor.h.

◆ m_useFastMode

bool FillProcessingVisitor::m_useFastMode
private

Definition at line 75 of file fill_processing_visitor.h.

◆ m_usePattern

bool FillProcessingVisitor::m_usePattern
private

Definition at line 78 of file fill_processing_visitor.h.

◆ m_useSelectionAsBoundary

bool FillProcessingVisitor::m_useSelectionAsBoundary
private

Definition at line 77 of file fill_processing_visitor.h.


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