Krita Source Code Documentation
Loading...
Searching...
No Matches
GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha > Struct Template Reference

Public Member Functions

 GenericExpansionStrategy (KisPaintDeviceSP sourceDevice, const QRect &applyRect, qreal expansionAmount)
 
void initializePixel (quint32 *distancePixel, quint8 *devicePixel) const
 
void setPixel (quint32 *distancePixel, quint8 *devicePixel, quint32 distance, const quint8 *neighborDevicePixel) const
 
void updatePixel (quint32 *distancePixel, quint8 *devicePixel, const quint32 *neighborDistancePixel, const quint8 *neighborDevicePixel, quint32 relativeDistance) const
 
void updatePixel (quint32 *distancePixel, quint8 *devicePixel, const quint32 *neighborDistancePixel1, const quint8 *neighborDevicePixel1, const quint32 *neighborDistancePixel2, const quint8 *neighborDevicePixel2, const quint32 *neighborDistancePixel3, const quint8 *neighborDevicePixel3, const quint32 *neighborDistancePixel4, const quint8 *neighborDevicePixel4, quint32 relativeDistance1, quint32 relativeDistance2, quint32 relativeDistance3, quint32 relativeDistance4) const
 
void updatePixel (quint32 *distancePixel, quint8 *devicePixel, const quint32 *neighborDistancePixel1, const quint8 *neighborDevicePixel1, const quint32 *neighborDistancePixel2, const quint8 *neighborDevicePixel2, const quint32 *neighborDistancePixel3, const quint8 *neighborDevicePixel3, quint32 relativeDistance1, quint32 relativeDistance2, quint32 relativeDistance3) const
 
void updatePixel (quint32 *distancePixel, quint8 *devicePixel, const quint32 *neighborDistancePixel1, const quint8 *neighborDevicePixel1, const quint32 *neighborDistancePixel2, const quint8 *neighborDevicePixel2, quint32 relativeDistance1, quint32 relativeDistance2) const
 

Public Attributes

KisPaintDeviceSP distanceMap
 
const quint32 expansionAmount
 
const QRect rect
 
KisPaintDeviceSP sourceDevice
 
const KoColorSpacesourceDeviceColorSpace
 
const qint32 sourceDevicePixelSize
 

Static Public Attributes

static constexpr quint32 diagonalDistance {DiagonalDistance}
 
static constexpr quint32 infinity {0xFFFFFF}
 
static constexpr quint32 orthogonalDistance {256}
 

Detailed Description

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
struct GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >

Definition at line 36 of file KisPropagateColorsFilter.cpp.

Constructor & Destructor Documentation

◆ GenericExpansionStrategy()

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::GenericExpansionStrategy ( KisPaintDeviceSP sourceDevice,
const QRect & applyRect,
qreal expansionAmount )
inline

Definition at line 49 of file KisPropagateColorsFilter.cpp.

Member Function Documentation

◆ initializePixel()

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
void GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::initializePixel ( quint32 * distancePixel,
quint8 * devicePixel ) const
inline

Definition at line 60 of file KisPropagateColorsFilter.cpp.

61 {
62 const quint8 alpha = sourceDeviceColorSpace->opacityU8(devicePixel);
63 *distancePixel = alpha == 0 ? infinity : 0;
64
65 if constexpr (ExpandAlpha) {
66 if (alpha > 0) {
68 }
69 }
70 }
const quint8 OPACITY_OPAQUE_U8
virtual void setOpacity(quint8 *pixels, quint8 alpha, qint32 nPixels) const =0
virtual quint8 opacityU8(const quint8 *pixel) const =0
static constexpr quint32 infinity

References GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::infinity, OPACITY_OPAQUE_U8, KoColorSpace::opacityU8(), KoColorSpace::setOpacity(), and GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::sourceDeviceColorSpace.

◆ setPixel()

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
void GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::setPixel ( quint32 * distancePixel,
quint8 * devicePixel,
quint32 distance,
const quint8 * neighborDevicePixel ) const
inline

Definition at line 72 of file KisPropagateColorsFilter.cpp.

74 {
75 if (distance >= *distancePixel) {
76 return;
77 }
78 if constexpr (BoundedExpansion) {
80 return;
81 }
82 }
83
84 *distancePixel = distance;
85 memcpy(devicePixel, neighborDevicePixel, sourceDevicePixelSize);
86
87 if constexpr (!ExpandAlpha) {
89 }
90 }
const quint8 OPACITY_TRANSPARENT_U8
qreal distance(const QPointF &p1, const QPointF &p2)

References distance(), GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::expansionAmount, OPACITY_TRANSPARENT_U8, KoColorSpace::setOpacity(), GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::sourceDeviceColorSpace, and GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::sourceDevicePixelSize.

◆ updatePixel() [1/4]

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
void GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::updatePixel ( quint32 * distancePixel,
quint8 * devicePixel,
const quint32 * neighborDistancePixel,
const quint8 * neighborDevicePixel,
quint32 relativeDistance ) const
inline

Definition at line 92 of file KisPropagateColorsFilter.cpp.

95 {
96 const quint32 newDistance = *neighborDistancePixel + relativeDistance;
97 setPixel(distancePixel, devicePixel, newDistance, neighborDevicePixel);
98 }
void setPixel(quint32 *distancePixel, quint8 *devicePixel, quint32 distance, const quint8 *neighborDevicePixel) const

References GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::setPixel().

◆ updatePixel() [2/4]

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
void GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::updatePixel ( quint32 * distancePixel,
quint8 * devicePixel,
const quint32 * neighborDistancePixel1,
const quint8 * neighborDevicePixel1,
const quint32 * neighborDistancePixel2,
const quint8 * neighborDevicePixel2,
const quint32 * neighborDistancePixel3,
const quint8 * neighborDevicePixel3,
const quint32 * neighborDistancePixel4,
const quint8 * neighborDevicePixel4,
quint32 relativeDistance1,
quint32 relativeDistance2,
quint32 relativeDistance3,
quint32 relativeDistance4 ) const
inline

Definition at line 140 of file KisPropagateColorsFilter.cpp.

147 {
148 const quint32 newDistance1 = *neighborDistancePixel1 + relativeDistance1;
149 const quint32 newDistance2 = *neighborDistancePixel2 + relativeDistance2;
150 const quint32 newDistance3 = *neighborDistancePixel3 + relativeDistance3;
151 const quint32 newDistance4 = *neighborDistancePixel4 + relativeDistance4;
152
153 if (newDistance1 < newDistance2) {
154 if (newDistance1 < newDistance3) {
155 if (newDistance1 < newDistance4) {
156 setPixel(distancePixel, devicePixel, newDistance1, neighborDevicePixel1);
157 } else {
158 setPixel(distancePixel, devicePixel, newDistance4, neighborDevicePixel4);
159 }
160 } else {
161 if (newDistance3 < newDistance4) {
162 setPixel(distancePixel, devicePixel, newDistance3, neighborDevicePixel3);
163 } else {
164 setPixel(distancePixel, devicePixel, newDistance4, neighborDevicePixel4);
165 }
166 }
167 } else {
168 if (newDistance2 < newDistance3) {
169 if (newDistance2 < newDistance4) {
170 setPixel(distancePixel, devicePixel, newDistance2, neighborDevicePixel2);
171 } else {
172 setPixel(distancePixel, devicePixel, newDistance4, neighborDevicePixel4);
173 }
174 } else {
175 if (newDistance3 < newDistance4) {
176 setPixel(distancePixel, devicePixel, newDistance3, neighborDevicePixel3);
177 } else {
178 setPixel(distancePixel, devicePixel, newDistance4, neighborDevicePixel4);
179 }
180 }
181 }
182 }

References GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::setPixel().

◆ updatePixel() [3/4]

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
void GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::updatePixel ( quint32 * distancePixel,
quint8 * devicePixel,
const quint32 * neighborDistancePixel1,
const quint8 * neighborDevicePixel1,
const quint32 * neighborDistancePixel2,
const quint8 * neighborDevicePixel2,
const quint32 * neighborDistancePixel3,
const quint8 * neighborDevicePixel3,
quint32 relativeDistance1,
quint32 relativeDistance2,
quint32 relativeDistance3 ) const
inline

Definition at line 115 of file KisPropagateColorsFilter.cpp.

120 {
121 const quint32 newDistance1 = *neighborDistancePixel1 + relativeDistance1;
122 const quint32 newDistance2 = *neighborDistancePixel2 + relativeDistance2;
123 const quint32 newDistance3 = *neighborDistancePixel3 + relativeDistance3;
124
125 if (newDistance1 < newDistance2) {
126 if (newDistance1 < newDistance3) {
127 setPixel(distancePixel, devicePixel, newDistance1, neighborDevicePixel1);
128 } else {
129 setPixel(distancePixel, devicePixel, newDistance3, neighborDevicePixel3);
130 }
131 } else {
132 if (newDistance2 < newDistance3) {
133 setPixel(distancePixel, devicePixel, newDistance2, neighborDevicePixel2);
134 } else {
135 setPixel(distancePixel, devicePixel, newDistance3, neighborDevicePixel3);
136 }
137 }
138 }

References GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::setPixel().

◆ updatePixel() [4/4]

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
void GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::updatePixel ( quint32 * distancePixel,
quint8 * devicePixel,
const quint32 * neighborDistancePixel1,
const quint8 * neighborDevicePixel1,
const quint32 * neighborDistancePixel2,
const quint8 * neighborDevicePixel2,
quint32 relativeDistance1,
quint32 relativeDistance2 ) const
inline

Definition at line 100 of file KisPropagateColorsFilter.cpp.

104 {
105 const quint32 newDistance1 = *neighborDistancePixel1 + relativeDistance1;
106 const quint32 newDistance2 = *neighborDistancePixel2 + relativeDistance2;
107
108 if (newDistance1 < newDistance2) {
109 setPixel(distancePixel, devicePixel, newDistance1, neighborDevicePixel1);
110 } else {
111 setPixel(distancePixel, devicePixel, newDistance2, neighborDevicePixel2);
112 }
113 }

References GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::setPixel().

Member Data Documentation

◆ diagonalDistance

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
constexpr quint32 GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::diagonalDistance {DiagonalDistance}
staticconstexpr

Definition at line 40 of file KisPropagateColorsFilter.cpp.

40{DiagonalDistance};

◆ distanceMap

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
KisPaintDeviceSP GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::distanceMap

Definition at line 42 of file KisPropagateColorsFilter.cpp.

◆ expansionAmount

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
const quint32 GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::expansionAmount

Definition at line 47 of file KisPropagateColorsFilter.cpp.

◆ infinity

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
constexpr quint32 GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::infinity {0xFFFFFF}
staticconstexpr

Definition at line 38 of file KisPropagateColorsFilter.cpp.

38{0xFFFFFF};

◆ orthogonalDistance

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
constexpr quint32 GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::orthogonalDistance {256}
staticconstexpr

Definition at line 39 of file KisPropagateColorsFilter.cpp.

39{256};

◆ rect

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
const QRect GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::rect

Definition at line 46 of file KisPropagateColorsFilter.cpp.

◆ sourceDevice

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
KisPaintDeviceSP GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::sourceDevice

Definition at line 43 of file KisPropagateColorsFilter.cpp.

◆ sourceDeviceColorSpace

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
const KoColorSpace* GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::sourceDeviceColorSpace

Definition at line 44 of file KisPropagateColorsFilter.cpp.

◆ sourceDevicePixelSize

template<quint32 DiagonalDistance, bool BoundedExpansion, bool ExpandAlpha>
const qint32 GenericExpansionStrategy< DiagonalDistance, BoundedExpansion, ExpandAlpha >::sourceDevicePixelSize

Definition at line 45 of file KisPropagateColorsFilter.cpp.


The documentation for this struct was generated from the following file: