Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy > Class Template Reference

#include <KoCompositeOpGeneric.h>

+ Inheritance diagram for KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >:

Public Member Functions

 KoCompositeOpGenericSCAlpha (const KoColorSpace *cs, const QString &id, const QString &category)
 
- Public Member Functions inherited from KoCompositeOpBase< Traits, KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy > >
void composite (const KoCompositeOp::ParameterInfo &params) const override
 
virtual void composite (const ParameterInfo &params) const
 
void composite (quint8 *dstRowStart, qint32 dstRowStride, const quint8 *srcRowStart, qint32 srcRowStride, const quint8 *maskRowStart, qint32 maskRowStride, qint32 rows, qint32 numColumns, float opacity, const QBitArray &channelFlags=QBitArray()) const
 
 KoCompositeOpBase (const KoColorSpace *cs, const QString &id, const QString &category)
 
- Public Member Functions inherited from KoCompositeOp
QString category () const
 
const KoColorSpacecolorSpace () const
 
void composite (quint8 *dstRowStart, qint32 dstRowStride, const quint8 *srcRowStart, qint32 srcRowStride, const quint8 *maskRowStart, qint32 maskRowStride, qint32 rows, qint32 numColumns, float opacity, const QBitArray &channelFlags=QBitArray()) const
 
QString description () const
 
QString id () const
 
 KoCompositeOp (const KoColorSpace *cs, const QString &id, const QString &category=KoCompositeOp::categoryMisc())
 
virtual ~KoCompositeOp ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Static Public Member Functions

template<bool alphaLocked, bool allChannelFlags>
static channels_type composeColorChannels (const channels_type *src, channels_type srcAlpha, channels_type *dst, channels_type dstAlpha, channels_type maskAlpha, channels_type opacity, const QBitArray &channelFlags)
 
- Static Public Member Functions inherited from KoCompositeOp
static QString categoryArithmetic ()
 
static QString categoryBinary ()
 
static QString categoryDark ()
 
static QString categoryHSI ()
 
static QString categoryHSL ()
 
static QString categoryHSV ()
 
static QString categoryHSY ()
 
static QString categoryLight ()
 
static QString categoryMisc ()
 
static QString categoryMix ()
 
static QString categoryModulo ()
 
static QString categoryNegative ()
 
static QString categoryQuadratic ()
 

Private Types

typedef KoCompositeOpBase< Traits, KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy > > base_class
 
typedef Traits::channels_type channels_type
 

Static Private Attributes

static const qint32 alpha_pos = Traits::alpha_pos
 
static const qint32 channels_nb = Traits::channels_nb
 

Additional Inherited Members

- Public Attributes inherited from KoCompositeOp
QString category
 
const KoColorSpacecolorSpace
 
QBitArray defaultChannelFlags
 
QString description
 
QString id
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

template<class Traits, void compositeFunc, typename BlendingPolicy>
class KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >

Generic CompositeOp for separable channel + alpha compositing functions

A template to generate a KoCompositeOp class by just specifying a blending/compositing function. This template works with compositing functions for separable channels (means each channel of a pixel can be processed separately) with taking alpha into consideration. Note that because of special treating of alpha, any composite op function needs to make alpha blending itself - the value of color that is written onto the projection is the same that the composite function gives (compare with KoCompositeOpGenericHSL and KoCompositeOpGenericSC).

Definition at line 298 of file KoCompositeOpGeneric.h.

Member Typedef Documentation

◆ base_class

template<class Traits , void compositeFunc, typename BlendingPolicy >
typedef KoCompositeOpBase< Traits, KoCompositeOpGenericSCAlpha<Traits,compositeFunc,BlendingPolicy> > KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::base_class
private

Definition at line 300 of file KoCompositeOpGeneric.h.

◆ channels_type

template<class Traits , void compositeFunc, typename BlendingPolicy >
typedef Traits::channels_type KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::channels_type
private

Definition at line 301 of file KoCompositeOpGeneric.h.

Constructor & Destructor Documentation

◆ KoCompositeOpGenericSCAlpha()

template<class Traits , void compositeFunc, typename BlendingPolicy >
KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::KoCompositeOpGenericSCAlpha ( const KoColorSpace * cs,
const QString & id,
const QString & category )
inline

Definition at line 307 of file KoCompositeOpGeneric.h.

308 : base_class(cs, id, category) { }
KoCompositeOpBase< Traits, KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy > > base_class

Member Function Documentation

◆ composeColorChannels()

template<class Traits , void compositeFunc, typename BlendingPolicy >
template<bool alphaLocked, bool allChannelFlags>
static channels_type KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::composeColorChannels ( const channels_type * src,
channels_type srcAlpha,
channels_type * dst,
channels_type dstAlpha,
channels_type maskAlpha,
channels_type opacity,
const QBitArray & channelFlags )
inlinestatic

Definition at line 312 of file KoCompositeOpGeneric.h.

315 {
316 using namespace Arithmetic;
317
318 srcAlpha = mul(srcAlpha, maskAlpha, opacity);
319
320 if(alphaLocked) {
321 channels_type oldAlpha = dstAlpha;
322 if(dstAlpha != zeroValue<channels_type>()) {
323 for(qint32 i=0; i <channels_nb; i++) {
324 if(i != alpha_pos && (allChannelFlags || channelFlags.testBit(i))) {
325 float dstValueFloat = scale<float>(BlendingPolicy::toAdditiveSpace(dst[i]));
326 float dstAlphaFloat = scale<float>(oldAlpha);
327 compositeFunc(scale<float>(BlendingPolicy::toAdditiveSpace(src[i])), scale<float>(srcAlpha), dstValueFloat, dstAlphaFloat);
328 dst[i] = BlendingPolicy::fromAdditiveSpace(scale<channels_type>(dstValueFloat));
329 }
330 }
331 }
332
333 return dstAlpha;
334 }
335 else {
336 channels_type oldAlpha = dstAlpha;
337 channels_type newDstAlpha = unionShapeOpacity(srcAlpha, dstAlpha);
338
339 if(newDstAlpha != zeroValue<channels_type>()) {
340 for(qint32 i=0; i <channels_nb; i++) {
341 if(i != alpha_pos && (allChannelFlags || channelFlags.testBit(i))) {
342 float dstFloat = scale<float>(BlendingPolicy::toAdditiveSpace(dst[i]));
343 float dstAlphaFloat = scale<float>(oldAlpha);
344 compositeFunc(scale<float>(BlendingPolicy::toAdditiveSpace(src[i])), scale<float>(srcAlpha), dstFloat, dstAlphaFloat);
345 dst[i] = BlendingPolicy::fromAdditiveSpace(scale<channels_type>(dstFloat));
346 }
347 }
348 }
349
350 return newDstAlpha;
351 }
352 }
Traits::channels_type channels_type
T mul(T a, T b)
T unionShapeOpacity(T a, T b)

References KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::alpha_pos, and KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::channels_nb.

Member Data Documentation

◆ alpha_pos

template<class Traits , void compositeFunc, typename BlendingPolicy >
const qint32 KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::alpha_pos = Traits::alpha_pos
staticprivate

Definition at line 304 of file KoCompositeOpGeneric.h.

◆ channels_nb

template<class Traits , void compositeFunc, typename BlendingPolicy >
const qint32 KoCompositeOpGenericSCAlpha< Traits, compositeFunc, BlendingPolicy >::channels_nb = Traits::channels_nb
staticprivate

Definition at line 303 of file KoCompositeOpGeneric.h.


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