Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCompositeOpBehind< CS_Traits, BlendingPolicy > Class Template Reference

#include <KoCompositeOpBehind.h>

+ Inheritance diagram for KoCompositeOpBehind< CS_Traits, BlendingPolicy >:

Public Member Functions

 KoCompositeOpBehind (const KoColorSpace *cs)
 
- Public Member Functions inherited from KoCompositeOpBase< CS_Traits, KoCompositeOpBehind< CS_Traits, 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< CS_Traits, KoCompositeOpBehind< CS_Traits, BlendingPolicy > > base_class
 
typedef CS_Traits::channels_type channels_type
 

Static Private Attributes

static const qint8 alpha_pos = CS_Traits::alpha_pos
 
static const qint8 channels_nb = CS_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 CS_Traits, typename BlendingPolicy>
class KoCompositeOpBehind< CS_Traits, BlendingPolicy >

Generic implementation of the Behind composite op, which blends the colors of a foreground layer as if it were in the background instead

Definition at line 16 of file KoCompositeOpBehind.h.

Member Typedef Documentation

◆ base_class

template<class CS_Traits , typename BlendingPolicy >
typedef KoCompositeOpBase<CS_Traits, KoCompositeOpBehind<CS_Traits, BlendingPolicy> > KoCompositeOpBehind< CS_Traits, BlendingPolicy >::base_class
private

Definition at line 18 of file KoCompositeOpBehind.h.

◆ channels_type

template<class CS_Traits , typename BlendingPolicy >
typedef CS_Traits::channels_type KoCompositeOpBehind< CS_Traits, BlendingPolicy >::channels_type
private

Definition at line 19 of file KoCompositeOpBehind.h.

Constructor & Destructor Documentation

◆ KoCompositeOpBehind()

template<class CS_Traits , typename BlendingPolicy >
KoCompositeOpBehind< CS_Traits, BlendingPolicy >::KoCompositeOpBehind ( const KoColorSpace * cs)
inline

Definition at line 25 of file KoCompositeOpBehind.h.

const QString COMPOSITE_BEHIND
KoCompositeOpBase< CS_Traits, KoCompositeOpBehind< CS_Traits, BlendingPolicy > > base_class
static QString categoryMix()

Member Function Documentation

◆ composeColorChannels()

template<class CS_Traits , typename BlendingPolicy >
template<bool alphaLocked, bool allChannelFlags>
static channels_type KoCompositeOpBehind< CS_Traits, 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 30 of file KoCompositeOpBehind.h.

33 {
34 using namespace Arithmetic;
35
36 if (dstAlpha == unitValue<channels_type>()) return dstAlpha;
37 channels_type appliedAlpha = mul(maskAlpha, srcAlpha, opacity);
38
39 if (appliedAlpha == zeroValue<channels_type>()) return dstAlpha;
40 channels_type newDstAlpha = unionShapeOpacity(dstAlpha, appliedAlpha);
41
42 if (dstAlpha != zeroValue<channels_type>()) {
43 // blend the color channels as if we were painting on the layer below
44 for (qint8 channel = 0; channel < channels_nb; ++channel)
45 if(channel != alpha_pos && (allChannelFlags || channelFlags.testBit(channel))) {
46 /*each color blended in proportion to their calculated opacity*/
47 channels_type srcMult= mul(BlendingPolicy::toAdditiveSpace(src[channel]), appliedAlpha);
48 channels_type blendedValue = lerp(srcMult,BlendingPolicy::toAdditiveSpace(dst[channel]),dstAlpha);
49 dst[channel] = BlendingPolicy::fromAdditiveSpace(KoColorSpaceMaths<channels_type>::divide(blendedValue,newDstAlpha));
50 }
51 }
52 else {
53 // don't blend if the color of the destination is undefined (has zero opacity)
54 // copy the source channel instead
55 for (qint8 channel = 0; channel < channels_nb; ++channel)
56 if(channel != alpha_pos && (allChannelFlags || channelFlags.testBit(channel)))
57 dst[channel] = src[channel];
58 }
59
60 return newDstAlpha;
61 }
QPointF lerp(const QPointF &p1, const QPointF &p2, qreal t)
static const qint8 alpha_pos
CS_Traits::channels_type channels_type
static const qint8 channels_nb
T mul(T a, T b)
T unionShapeOpacity(T a, T b)

References KoCompositeOpBehind< CS_Traits, BlendingPolicy >::alpha_pos, KoCompositeOpBehind< CS_Traits, BlendingPolicy >::channels_nb, and lerp().

Member Data Documentation

◆ alpha_pos

template<class CS_Traits , typename BlendingPolicy >
const qint8 KoCompositeOpBehind< CS_Traits, BlendingPolicy >::alpha_pos = CS_Traits::alpha_pos
staticprivate

Definition at line 22 of file KoCompositeOpBehind.h.

◆ channels_nb

template<class CS_Traits , typename BlendingPolicy >
const qint8 KoCompositeOpBehind< CS_Traits, BlendingPolicy >::channels_nb = CS_Traits::channels_nb
staticprivate

Definition at line 21 of file KoCompositeOpBehind.h.


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