Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAntialiasingFadeMaker2D< BaseFade > Class Template Reference

#include <kis_antialiasing_fade_maker.h>

Public Member Functions

template<typename A >
void apply2DFader (xsimd::batch< float, A > &vValue, xsimd::batch_bool< float, A > &excludeMask, xsimd::batch< float, A > &xr, xsimd::batch< float, A > &yr) const
 
 KisAntialiasingFadeMaker2D (const BaseFade &baseFade, bool enableAntialiasing)
 
 KisAntialiasingFadeMaker2D (const KisAntialiasingFadeMaker2D &rhs, const BaseFade &baseFade)
 
bool needFade (qreal x, qreal y, quint8 *value)
 
template<typename A >
xsimd::batch_bool< float, AneedFade (xsimd::batch< float, A > &xr, xsimd::batch< float, A > &yr) const
 
void setLimits (qreal halfWidth, qreal halfHeight)
 

Private Attributes

const BaseFade & m_baseFade
 
bool m_enableAntialiasing
 
qreal m_xFadeCoeff
 
qreal m_xFadeLimitStart
 
qreal m_xLimit
 
qreal m_yFadeCoeff
 
qreal m_yFadeLimitStart
 
qreal m_yLimit
 

Detailed Description

template<class BaseFade>
class KisAntialiasingFadeMaker2D< BaseFade >

Definition at line 121 of file kis_antialiasing_fade_maker.h.

Constructor & Destructor Documentation

◆ KisAntialiasingFadeMaker2D() [1/2]

◆ KisAntialiasingFadeMaker2D() [2/2]

template<class BaseFade >
KisAntialiasingFadeMaker2D< BaseFade >::KisAntialiasingFadeMaker2D ( const KisAntialiasingFadeMaker2D< BaseFade > & rhs,
const BaseFade & baseFade )
inline

Member Function Documentation

◆ apply2DFader()

template<class BaseFade >
template<typename A >
void KisAntialiasingFadeMaker2D< BaseFade >::apply2DFader ( xsimd::batch< float, A > & vValue,
xsimd::batch_bool< float, A > & excludeMask,
xsimd::batch< float, A > & xr,
xsimd::batch< float, A > & yr ) const
inline

Definition at line 222 of file kis_antialiasing_fade_maker.h.

223 {
224 using float_v = xsimd::batch<float, A>;
225 using float_m = typename float_v::batch_bool_type;
226
227 const float_v vValMax(255.f);
228
230 const float_v vXFadeLimitStart(m_xFadeLimitStart);
231 const float_v vYFadeLimitStart(m_yFadeLimitStart);
232 const float_v vXFadeCoeff(m_xFadeCoeff);
233 const float_v vYFadeCoeff(m_yFadeCoeff);
234
235 const float_v xra = xsimd::abs(xr);
236 float_m fadeXStartMask(false);
237 float_m fadeYStartMask(false);
238
239 float_v fadeValue(0);
240 const float_v vBaseValue =
241 xsimd::truncate_to_type<uint16_t>(vValue);
242
243 fadeXStartMask = xra > vXFadeLimitStart;
244 fadeXStartMask = (fadeXStartMask ^ excludeMask) & fadeXStartMask;
245 if (!xsimd::all(fadeXStartMask)) {
246 fadeValue = vBaseValue + (vValMax - vBaseValue) * (xra - vXFadeLimitStart) * vXFadeCoeff;
247 fadeValue = xsimd::select(fadeXStartMask & ((yr > vYFadeLimitStart) & (fadeValue < vValMax)),
248 fadeValue + (vValMax - fadeValue) * (yr - vYFadeLimitStart) * vYFadeCoeff,
249 fadeValue);
250 vValue = xsimd::select(fadeXStartMask, fadeValue, vValue);
251 }
252
253 fadeYStartMask = yr > vYFadeLimitStart;
254 fadeYStartMask = (fadeYStartMask ^ fadeXStartMask) & fadeYStartMask;
255 if (!xsimd::all(fadeYStartMask)) {
256 fadeValue = vBaseValue + (vValMax - vBaseValue) * (yr - vYFadeLimitStart) * vYFadeCoeff;
257 fadeValue = xsimd::select(fadeYStartMask & ((xra > vXFadeLimitStart) & (fadeValue < vValMax)),
258 fadeValue + (vValMax - fadeValue) * (xra - vXFadeLimitStart) * vXFadeCoeff,
259 fadeValue);
260 vValue = xsimd::select(fadeYStartMask, fadeValue, vValue);
261 }
262 }
263 }

References KisAntialiasingFadeMaker2D< BaseFade >::m_enableAntialiasing, KisAntialiasingFadeMaker2D< BaseFade >::m_xFadeCoeff, KisAntialiasingFadeMaker2D< BaseFade >::m_xFadeLimitStart, KisAntialiasingFadeMaker2D< BaseFade >::m_yFadeCoeff, and KisAntialiasingFadeMaker2D< BaseFade >::m_yFadeLimitStart.

◆ needFade() [1/2]

template<class BaseFade >
bool KisAntialiasingFadeMaker2D< BaseFade >::needFade ( qreal x,
qreal y,
quint8 * value )
inline

Definition at line 160 of file kis_antialiasing_fade_maker.h.

161 {
162 x = qAbs(x);
163 y = qAbs(y);
164
165 if (x > m_xLimit) {
166 *value = 255;
167 return true;
168 }
169
170 if (y > m_yLimit) {
171 *value = 255;
172 return true;
173 }
174
176 return false;
177 }
178
179 if (x > m_xFadeLimitStart) {
180 quint8 baseValue = m_baseFade.value(x, y);
181 *value = baseValue + (255.0 - baseValue) * (x - m_xFadeLimitStart) * m_xFadeCoeff;
182
183 if (y > m_yFadeLimitStart && *value < 255) {
184 *value += (255.0 - *value) * (y - m_yFadeLimitStart) * m_yFadeCoeff;
185 }
186
187 return true;
188 }
189
190 if (y > m_yFadeLimitStart) {
191 quint8 baseValue = m_baseFade.value(x, y);
192 *value = baseValue + (255.0 - baseValue) * (y - m_yFadeLimitStart) * m_yFadeCoeff;
193
194 if (x > m_xFadeLimitStart && *value < 255) {
195 *value += (255.0 - *value) * (x - m_xFadeLimitStart) * m_xFadeCoeff;
196 }
197
198 return true;
199 }
200
201 return false;
202 }
float value(const T *src, size_t ch)

References KisAntialiasingFadeMaker2D< BaseFade >::m_baseFade, KisAntialiasingFadeMaker2D< BaseFade >::m_enableAntialiasing, KisAntialiasingFadeMaker2D< BaseFade >::m_xFadeCoeff, KisAntialiasingFadeMaker2D< BaseFade >::m_xFadeLimitStart, KisAntialiasingFadeMaker2D< BaseFade >::m_xLimit, KisAntialiasingFadeMaker2D< BaseFade >::m_yFadeCoeff, KisAntialiasingFadeMaker2D< BaseFade >::m_yFadeLimitStart, KisAntialiasingFadeMaker2D< BaseFade >::m_yLimit, and value().

◆ needFade() [2/2]

template<class BaseFade >
template<typename A >
xsimd::batch_bool< float, A > KisAntialiasingFadeMaker2D< BaseFade >::needFade ( xsimd::batch< float, A > & xr,
xsimd::batch< float, A > & yr ) const
inline

Definition at line 206 of file kis_antialiasing_fade_maker.h.

207 {
208 using float_v = xsimd::batch<float, A>;
209 using float_m = typename float_v::batch_bool_type;
210
211 const float_v vXLimit(m_xLimit);
212 const float_v vYLimit(m_yLimit);
213
214 const float_m outXMask = xsimd::abs(xr) > vXLimit;
215 const float_m outYMask = xsimd::abs(yr) > vYLimit;
216
217 return (outXMask | outYMask);
218 }

References KisAntialiasingFadeMaker2D< BaseFade >::m_xLimit, and KisAntialiasingFadeMaker2D< BaseFade >::m_yLimit.

◆ setLimits()

Member Data Documentation

◆ m_baseFade

template<class BaseFade >
const BaseFade& KisAntialiasingFadeMaker2D< BaseFade >::m_baseFade
private

Definition at line 279 of file kis_antialiasing_fade_maker.h.

◆ m_enableAntialiasing

template<class BaseFade >
bool KisAntialiasingFadeMaker2D< BaseFade >::m_enableAntialiasing
private

Definition at line 277 of file kis_antialiasing_fade_maker.h.

◆ m_xFadeCoeff

template<class BaseFade >
qreal KisAntialiasingFadeMaker2D< BaseFade >::m_xFadeCoeff
private

Definition at line 274 of file kis_antialiasing_fade_maker.h.

◆ m_xFadeLimitStart

template<class BaseFade >
qreal KisAntialiasingFadeMaker2D< BaseFade >::m_xFadeLimitStart
private

Definition at line 271 of file kis_antialiasing_fade_maker.h.

◆ m_xLimit

template<class BaseFade >
qreal KisAntialiasingFadeMaker2D< BaseFade >::m_xLimit
private

Definition at line 268 of file kis_antialiasing_fade_maker.h.

◆ m_yFadeCoeff

template<class BaseFade >
qreal KisAntialiasingFadeMaker2D< BaseFade >::m_yFadeCoeff
private

Definition at line 275 of file kis_antialiasing_fade_maker.h.

◆ m_yFadeLimitStart

template<class BaseFade >
qreal KisAntialiasingFadeMaker2D< BaseFade >::m_yFadeLimitStart
private

Definition at line 272 of file kis_antialiasing_fade_maker.h.

◆ m_yLimit

template<class BaseFade >
qreal KisAntialiasingFadeMaker2D< BaseFade >::m_yLimit
private

Definition at line 269 of file kis_antialiasing_fade_maker.h.


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