64 const quint8 opacityDifference = opacity * 100 /
quint8_MAX;
65 return qMin(colorDifference, opacityDifference);
79 return qMin(colorDifference, opacityDifference);
83 template <
typename DifferencePolicy>
88 : DifferencePolicy(colorSpace, color)
98 template <
typename DifferencePolicy>
104 : DifferencePolicy(colorSpace, color)
115 const int diff = this->getDifferenceFor(srcData);
140 QRect *resultMaskRect,
142 const QRect &enclosingMaskRect,
146 QRect *resultMaskRect,
148 const QRect &enclosingMaskRect,
152 QRect *resultMaskRect,
154 const QRect &enclosingMaskRect,
157 QRect *resultMaskRect,
159 const QRect &enclosingMaskRect,
162 QRect *resultMaskRect,
164 const QRect &enclosingMaskRect,
166 template <
typename SelectionPolicy>
168 QRect *resultMaskRect,
170 const QRect &enclosingMaskRect,
172 SelectionPolicy selectionPolicy)
const;
175 QRect *resultMaskRect,
177 const QRect &enclosingMaskRect,
180 QRect *resultMaskRect,
182 const QRect &enclosingMaskRect,
185 QRect *resultMaskRect,
187 const QRect &enclosingMaskRect,
189 template <
typename SelectionPolicy>
191 QRect *resultMaskRect,
193 const QRect &enclosingMaskRect,
195 SelectionPolicy selectionPolicy)
const;
198 QRect *resultMaskRect,
200 const QRect &enclosingMaskRect,
203 QRect *resultMaskRect,
205 const QRect &enclosingMaskRect,
208 QRect *resultMaskRect,
210 const QRect &enclosingMaskRect,
212 template <
typename SelectionPolicy>
214 QRect *resultMaskRect,
216 const QRect &enclosingMaskRect,
218 SelectionPolicy selectionPolicy,
219 bool colorOrTransparent =
false)
const;
222 const QRect &enclosingMaskRect)
const;
229 template <
typename SelectionPolicy>
232 const QRect &enclosingMaskRect,
234 SelectionPolicy selectionPolicy)
const;
235 template <
typename SelectionPolicy>
238 const QRect &enclosingMaskRect,
240 SelectionPolicy selectionPolicy)
const;
244 const QRect &enclosingMaskRect,
249 const QRect &enclosingMaskRect,
254 const QRect &enclosingMaskRect,
260 const QRect &enclosingMaskRect,
266 const QRect &enclosingMaskRect,
272 const QRect &enclosingMaskRect,
278 const QRect &enclosingMaskRect,
283 const QRect &enclosingMaskRect,
295 m_d->imageRect = QRect(QPoint(0, 0), imageSize);
304 m_d->imageRect = QRect(QPoint(0, 0), imageSize);
313 m_d->imageRect = QRect(QPoint(0, 0), imageSize);
340 QTransform patternTransform)
387 Q_ASSERT(newSelection);
388 Q_ASSERT(enclosingMask);
389 Q_ASSERT(referenceDevice);
392 if (enclosingMaskRect.isEmpty()) {
395 QRect newSelectionRect;
397 m_d->computeEnclosedRegionsMask(newSelection, &newSelectionRect, enclosingMask, enclosingMaskRect, referenceDevice);
398 if (newSelectionRect.isEmpty()) {
402 m_d->invertIfNeeded(newSelection, enclosingMask, enclosingMaskRect);
408 m_d->applyPostProcessing(newSelection, referenceDevice);
420 return m_d->regionSelectionMethod;
425 m_d->regionSelectionColor = color;
430 return m_d->regionSelectionColor;
435 m_d->regionSelectionInvert = invert;
440 return m_d->regionSelectionInvert;
445 m_d->regionSelectionIncludeContourRegions = include;
450 return m_d->regionSelectionIncludeContourRegions;
455 m_d->regionSelectionIncludeSurroundingRegions = include;
460 return m_d->regionSelectionIncludeSurroundingRegions;
464 QRect *resultMaskRect,
466 const QRect &enclosingMaskRect,
472 selectAllRegions(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice);
506 QRect *resultMaskRect,
508 const QRect &enclosingMaskRect,
518 selectRegionsFromContour(mask, enclosingMask, enclosingMaskRect, referenceDevice);
521 if (resultMaskRect) {
527 QRect *resultMaskRect,
529 const QRect &enclosingMaskRect,
533 const int softness = 100 -
q->opacitySpread();
536 selectRegionsFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
539 selectRegionsFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
544 QRect *resultMaskRect,
546 const QRect &enclosingMaskRect,
550 const int softness = 100 -
q->opacitySpread();
553 selectRegionsFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
556 selectRegionsFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
561 QRect *resultMaskRect,
563 const QRect &enclosingMaskRect,
567 const int softness = 100 -
q->opacitySpread();
574 selectRegionsFilledWithSpecificColorGeneric(resultMask,
nullptr, enclosingMask, enclosingMaskRect, referenceDevice, colorPolicy);
576 selectRegionsFilledWithSpecificColorGeneric(resultMaskTransparent,
nullptr, enclosingMask, enclosingMaskRect, referenceDevice, transparentPolicy);
579 selectRegionsFilledWithSpecificColorGeneric(resultMask,
nullptr, enclosingMask, enclosingMaskRect, referenceDevice, colorPolicy);
581 selectRegionsFilledWithSpecificColorGeneric(resultMaskTransparent,
nullptr, enclosingMask, enclosingMaskRect, referenceDevice, transparentPolicy);
585 if (resultMaskRect) {
590template <
typename SelectionPolicy>
592 QRect *resultMaskRect,
594 const QRect &enclosingMaskRect,
596 SelectionPolicy selectionPolicy)
const
600 if (selectSimilarRegions(resultMask, enclosingMask, enclosingMaskRect, referenceDevice, selectionPolicy) == 0) {
601 if (resultMaskRect) {
602 *resultMaskRect = QRect();
608 removeContourRegions(resultMask, enclosingMask, enclosingMaskRect, referenceDevice);
610 if (resultMaskRect) {
616 QRect *resultMaskRect,
618 const QRect &enclosingMaskRect,
622 const int softness = 100 -
q->opacitySpread();
625 selectAllRegionsExceptFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
628 selectAllRegionsExceptFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
633 QRect *resultMaskRect,
635 const QRect &enclosingMaskRect,
639 const int softness = 100 -
q->opacitySpread();
642 selectAllRegionsExceptFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
645 selectAllRegionsExceptFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
650 QRect *resultMaskRect,
652 const QRect &enclosingMaskRect,
656 const int softness = 100 -
q->opacitySpread();
660 selectAllRegionsExceptFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
663 selectAllRegionsExceptFilledWithSpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
667template <
typename SelectionPolicy>
669 QRect *resultMaskRect,
671 const QRect &enclosingMaskRect,
673 SelectionPolicy selectionPolicy)
const
675 const QVector<QPoint> enclosingPoints = getEnclosingContourPoints(enclosingMask, enclosingMaskRect);
677 if (selectDissimilarRegions(resultMask, enclosingMask, enclosingMaskRect, referenceDevice, selectionPolicy) == 0) {
678 if (resultMaskRect) {
679 *resultMaskRect = QRect();
687 selectRegionsFromContour(mask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice);
690 if (resultMaskRect) {
696 QRect *resultMaskRect,
698 const QRect &enclosingMaskRect,
702 const int softness = 100 -
q->opacitySpread();
705 selectRegionsSurroundedBySpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
708 selectRegionsSurroundedBySpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
713 QRect *resultMaskRect,
715 const QRect &enclosingMaskRect,
719 const int softness = 100 -
q->opacitySpread();
722 selectRegionsSurroundedBySpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
725 selectRegionsSurroundedBySpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, policy);
730 QRect *resultMaskRect,
732 const QRect &enclosingMaskRect,
736 const int softness = 100 -
q->opacitySpread();
741 selectRegionsSurroundedBySpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, colorPolicy,
true);
744 selectRegionsSurroundedBySpecificColorGeneric(resultMask, resultMaskRect, enclosingMask, enclosingMaskRect, referenceDevice, colorPolicy,
true);
748template <
typename SelectionPolicy>
750 QRect *resultMaskRect,
752 const QRect &enclosingMaskRect,
754 SelectionPolicy selectionPolicy,
755 bool colorOrTransparent)
const
758 const QVector<QPoint> enclosingPoints = getEnclosingContourPoints(enclosingMask, enclosingMaskRect);
759 if (enclosingPoints.isEmpty()) {
765 if (colorOrTransparent) {
766 selectRegionsFromContourUntilColorOrTransparent(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice, selectionPolicy.color);
768 selectRegionsFromContourUntilColor(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice, selectionPolicy.color);
773 invertMaskRect(resultMask, enclosingMaskRect);
781 removeContourRegions(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice);
786 selectSimilarRegions(mask, enclosingMask, enclosingMaskRect, referenceDevice, selectionPolicy);
789 if (resultMaskRect) {
795 const QRect &enclosingMaskRect)
const
798 const int scanlineWidth = enclosingMaskRect.width() + 2;
800 quint8 *scanlines[3] = {buffer.data(), buffer.data() + scanlineWidth, buffer.data() + scanlineWidth * 2};
808 enclosingMask->
readBytes(scanlines[1] + 1, enclosingMaskRect.x(), enclosingMaskRect.y(), enclosingMaskRect.width(), 1);
812 if (enclosingMaskRect.height() == 1) {
819 enclosingMask->
readBytes(scanlines[2] + 1, enclosingMaskRect.x(), enclosingMaskRect.y() + 1, enclosingMaskRect.width(), 1);
824 for (
int y = 0; y < enclosingMaskRect.height(); ++y) {
827 quint8 *
tmp = scanlines[0];
828 scanlines[0] = scanlines[1];
829 scanlines[1] = scanlines[2];
832 if (y == enclosingMaskRect.height() - 1) {
839 enclosingMask->
readBytes(scanlines[2] + 1, enclosingMaskRect.x(), enclosingMaskRect.y() + y + 1, enclosingMaskRect.width(), 1);
844 const quint8 *topPixel = scanlines[0] + 1;
845 const quint8 *middlePixel = scanlines[1] + 1;
846 const quint8 *bottomPixel = scanlines[2] + 1;
847 for (
int x = 0; x < enclosingMaskRect.width(); ++x, ++topPixel, ++middlePixel, ++bottomPixel) {
855 quint8 neighbors = 0;
864 if (neighbors != 0) {
865 enclosingPoints.push_back(QPoint(enclosingMaskRect.x() + x, enclosingMaskRect.y() + y));
870 return enclosingPoints;
876 if (
q->sizemod() > 0) {
877 if (
q->stopGrowingAtDarkestPixel()) {
882 -
q->sizemod(), -
q->sizemod(),
q->sizemod(),
q->sizemod()
890 -
q->sizemod(), -
q->sizemod(),
q->sizemod(),
q->sizemod()
894 }
else if (
q->sizemod() < 0) {
900 if (
q->feather() > 0) {
902 feathery.
process(mask, mask->
selectedRect().adjusted(-
q->feather(), -
q->feather(),
q->feather(),
q->feather()));
903 }
else if (
q->antiAlias()) {
914 invertMaskRect(resultMask, enclosingMaskRect);
921template <
typename SelectionPolicy>
924 const QRect &enclosingMaskRect,
926 SelectionPolicy selectionPolicy)
const
937 const quint8
selection = selectionPolicy.getSelectionFor(referenceDeviceIterator.
oldRawData());
946template <
typename SelectionPolicy>
949 const QRect &enclosingMaskRect,
951 SelectionPolicy selectionPolicy)
const
973 const QRect &enclosingMaskRect,
976 const QVector<QPoint> enclosingPoints = getEnclosingContourPoints(enclosingMask, enclosingMaskRect);
977 selectRegionsFromContour(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice);
983 const QRect &enclosingMaskRect,
986 if (enclosingPoints.isEmpty()) {
993 for (
const QPoint &point : enclosingPoints) {
994 if (!inclusionRect.contains(point)) {
1015 const QRect &enclosingMaskRect,
1019 const QVector<QPoint> enclosingPoints = getEnclosingContourPoints(enclosingMask, enclosingMaskRect);
1020 selectRegionsFromContourUntilColor(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice, color);
1026 const QRect &enclosingMaskRect,
1030 if (enclosingPoints.isEmpty()) {
1037 for (
const QPoint &point : enclosingPoints) {
1038 if (!inclusionRect.contains(point)) {
1059 const QRect &enclosingMaskRect,
1063 const QVector<QPoint> enclosingPoints = getEnclosingContourPoints(enclosingMask, enclosingMaskRect);
1064 selectRegionsFromContourUntilColorOrTransparent(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice, color);
1070 const QRect &enclosingMaskRect,
1074 if (enclosingPoints.isEmpty()) {
1081 for (
const QPoint &point : enclosingPoints) {
1082 if (!inclusionRect.contains(point)) {
1103 const QRect &enclosingMaskRect,
1106 const QVector<QPoint> enclosingPoints = getEnclosingContourPoints(enclosingMask, enclosingMaskRect);
1107 removeContourRegions(resultMask, enclosingMask, enclosingPoints, enclosingMaskRect, referenceDevice);
1113 const QRect &enclosingMaskRect,
1116 if (enclosingPoints.isEmpty()) {
1121 selectRegionsFromContour(contourRegionsMask, enclosingMask, enclosingMaskRect, referenceDevice);
1128 while (resultMaskIterator.
nextPixel()) {
AntiAlias filter for selections inspired by FXAA.
void process(KisPixelSelectionSP pixelSelection, const QRect &rect) override
virtual bool wrapAroundMode() const =0
int selectSimilarRegions(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, SelectionPolicy selectionPolicy) const
void selectRegionsFilledWithTransparent(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
RegionSelectionMethod regionSelectionMethod
int selectDissimilarRegions(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, SelectionPolicy selectionPolicy) const
void removeContourRegions(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void applyPostProcessing(KisPixelSelectionSP mask, KisPaintDeviceSP referenceDevice) const
void selectRegionsFilledWithSpecificColorOrTransparent(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
bool regionSelectionIncludeSurroundingRegions
void selectRegionsFromContourUntilColor(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, const KoColor &color) const
void selectRegionsSurroundedByTransparent(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void selectAllRegionsExceptFilledWithSpecificColorGeneric(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, SelectionPolicy selectionPolicy) const
KisEncloseAndFillPainter * q
void invertMaskRect(KisPixelSelectionSP resultMask, const QRect &rect) const
KoColor regionSelectionColor
bool regionSelectionIncludeContourRegions
QVector< QPoint > getEnclosingContourPoints(KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect) const
void selectRegionsFromContour(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void selectAllRegionsExceptFilledWithSpecificColorOrTransparent(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
bool regionSelectionInvert
void selectRegionsSurroundedBySpecificColor(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void selectRegionsFilledWithSpecificColorGeneric(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, SelectionPolicy selectionPolicy) const
void selectRegionsFilledWithSpecificColor(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void selectAllRegionsExceptFilledWithSpecificColor(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void computeEnclosedRegionsMask(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void selectRegionsSurroundedBySpecificColorGeneric(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, SelectionPolicy selectionPolicy, bool colorOrTransparent=false) const
void selectRegionsFromContourUntilColorOrTransparent(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice, const KoColor &color) const
void invertIfNeeded(KisPixelSelectionSP resultMask, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect) const
void selectAllRegionsExceptFilledWithTransparent(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
Private(KisEncloseAndFillPainter *q)
void selectRegionsSurroundedBySpecificColorOrTransparent(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
void selectAllRegions(KisPixelSelectionSP resultMask, QRect *resultMaskRect, KisPixelSelectionSP enclosingMask, const QRect &enclosingMaskRect, KisPaintDeviceSP referenceDevice) const
bool regionSelectionInvert() const
bool regionSelectionIncludeContourRegions() const
~KisEncloseAndFillPainter() override
KisEncloseAndFillPainter(const QSize &imageSize)
void setRegionSelectionIncludeContourRegions(bool include)
void setRegionSelectionIncludeSurroundingRegions(bool include)
void setRegionSelectionColor(const KoColor &color)
void encloseAndFillPattern(KisPixelSelectionSP enclosingMask, KisPaintDeviceSP referenceDevice, QTransform patternTransform=QTransform())
KisPixelSelectionSP createEncloseAndFillSelection(KisPixelSelectionSP enclosingMask, KisPaintDeviceSP referenceDevice, KisPixelSelectionSP existingSelection)
KoColor regionSelectionColor() const
void encloseAndFillColor(KisPixelSelectionSP enclosingMask, KisPaintDeviceSP referenceDevice)
RegionSelectionMethod regionSelectionMethod() const
void genericEncloseAndFillEnd(KisPaintDeviceSP filled)
void setRegionSelectionMethod(RegionSelectionMethod regionSelectionMethod)
QScopedPointer< Private > m_d
void setRegionSelectionInvert(bool invert)
bool regionSelectionIncludeSurroundingRegions() const
void genericEncloseAndFillStart(KisPixelSelectionSP enclosingMask, KisPaintDeviceSP referenceDevice)
@ SelectRegionsFilledWithSpecificColor
@ SelectAllRegionsExceptFilledWithSpecificColorOrTransparent
@ SelectRegionsSurroundedBySpecificColor
@ SelectRegionsFilledWithTransparent
@ SelectRegionsFilledWithSpecificColorOrTransparent
@ SelectRegionsSurroundedByTransparent
@ SelectRegionsSurroundedBySpecificColorOrTransparent
@ SelectAllRegionsExceptFilledWithTransparent
@ SelectAllRegionsExceptFilledWithSpecificColor
void process(KisPixelSelectionSP pixelSelection, const QRect &rect) override
KisSelectionSP currentFillSelection() const
void fillRect(qint32 x, qint32 y, qint32 w, qint32 h, const KoColor &c, quint8 opacity)
uint useSelectionAsBoundary() const
void setCurrentFillSelection(KisSelectionSP fillSelection)
void genericFillEnd(KisPaintDeviceSP filled)
void fillRectNoCompose(const QRect &rc, const KoPatternSP pattern, const QTransform transform)
fillRect Fill a rectangle with a certain pattern. The pattern is repeated if it does not fit the enti...
void process(KisPixelSelectionSP pixelSelection, const QRect &rect) override
Filter that dilates a selection and that can stop dilating adaptively at areas of higher darkness or ...
void process(KisPixelSelectionSP pixelSelection, const QRect &rect) override
static KisImageResolutionProxySP identity()
KisPaintDeviceSP createCompositionSourceDevice() const
const KoColorSpace * colorSpace() const
bool pixel(qint32 x, qint32 y, QColor *c) const
KisDefaultBoundsBaseSP defaultBounds() const
void readBytes(quint8 *data, qint32 x, qint32 y, qint32 w, qint32 h) const
QTransform patternTransform
ALWAYS_INLINE quint8 * rawData()
ALWAYS_INLINE const quint8 * oldRawData() const
void process(KisPixelSelectionSP pixelSelection, const QRect &rect) override
virtual quint8 difference(const quint8 *src1, const quint8 *src2) const =0
virtual quint8 differenceA(const quint8 *src1, const quint8 *src2) const =0
virtual quint8 opacityU8(const quint8 *pixel) const =0
static KoColor createTransparent(const KoColorSpace *cs)
const quint8 MAX_SELECTED
const quint8 MIN_SELECTED
const KoColorSpace * colorSpace
quint8 getSelectionFor(const quint8 *srcData) const
HardSelectionPolicy(const KoColorSpace *colorSpace, const KoColor &color, int threshold)
SoftSelectionPolicy(const KoColorSpace *colorSpace, const KoColor &color, int threshold, int softness)
quint8 getSelectionFor(const quint8 *srcData) const
quint8 getDifferenceFor(const quint8 *srcData) const
SpecificColorDifferencePolicy(const KoColorSpace *colorSpace, const KoColor &color)
SpecificColorOrTransparentDifferencePolicy(const KoColorSpace *colorSpace, const KoColor &color)
quint8 getDifferenceFor(const quint8 *srcData) const
TransparentDifferencePolicy(const KoColorSpace *colorSpace, const KoColor &color)
quint8 getDifferenceFor(const quint8 *srcData) const
TransparentForHalosDifferencePolicy(const KoColorSpace *colorSpace, const KoColor &color)
quint8 getDifferenceFor(const quint8 *srcData) const
QRect selectedExactRect() const
QRect selectedRect() const
void applySelection(KisPixelSelectionSP selection, SelectionAction action)
void fillSelectionUntilColor(KisPixelSelectionSP pixelSelection, const KoColor &boundaryColor, KisPaintDeviceSP boundarySelection)
void setCloseGap(int closeGap)
void fillSelection(KisPixelSelectionSP pixelSelection, KisPaintDeviceSP boundarySelection)
void fillSelectionUntilColorOrTransparent(KisPixelSelectionSP pixelSelection, const KoColor &boundaryColor, KisPaintDeviceSP boundarySelection)
void setThreshold(int threshold)
void setOpacitySpread(int opacitySpread)
KisPixelSelectionSP pixelSelection
QRect selectedExactRect() const
Slow, but exact way of determining the rectangle that encloses the selection.