Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor > Class Template Reference

#include <KoCompositeOpGeneric.h>

+ Inheritance diagram for KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >:

Public Member Functions

 KoCompositeOpGenericHSLFunctor (const KoColorSpace *cs, const QString &id, const QString &category)
 
- Public Member Functions inherited from KoCompositeOpBase< Traits, KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor > >
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, KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor > > base_class
 
typedef Traits::channels_type channels_type
 

Static Private Attributes

static const qint32 blue_pos = Traits::blue_pos
 
static const qint32 green_pos = Traits::green_pos
 
static const qint32 red_pos = Traits::red_pos
 

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, typename CompositeOpFunctor>
class KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >

Generic CompositeOp for nonseparable/HSL channel compositing functions

A template to generate a KoCompositeOp class by just specifying a blending/compositing function. This template works with compositing functions for RGB channels only (the channels can not be processed separately)

Definition at line 201 of file KoCompositeOpGeneric.h.

Member Typedef Documentation

◆ base_class

template<class Traits , typename CompositeOpFunctor >
typedef KoCompositeOpBase< Traits, KoCompositeOpGenericHSLFunctor<Traits,CompositeOpFunctor> > KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::base_class
private

Definition at line 203 of file KoCompositeOpGeneric.h.

◆ channels_type

template<class Traits , typename CompositeOpFunctor >
typedef Traits::channels_type KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::channels_type
private

Definition at line 204 of file KoCompositeOpGeneric.h.

Constructor & Destructor Documentation

◆ KoCompositeOpGenericHSLFunctor()

template<class Traits , typename CompositeOpFunctor >
KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::KoCompositeOpGenericHSLFunctor ( const KoColorSpace * cs,
const QString & id,
const QString & category )
inline

Definition at line 211 of file KoCompositeOpGeneric.h.

212 : base_class(cs, id, category) { }
KoCompositeOpBase< Traits, KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor > > base_class

Member Function Documentation

◆ composeColorChannels()

template<class Traits , typename CompositeOpFunctor >
template<bool alphaLocked, bool allChannelFlags>
static channels_type KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::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 216 of file KoCompositeOpGeneric.h.

218 {
219 using namespace Arithmetic;
220
221 srcAlpha = mul(srcAlpha, maskAlpha, opacity);
222
223 if(alphaLocked) {
224 if(dstAlpha != zeroValue<channels_type>()) {
225 float srcR = scale<float>(CompositeOpFunctor::clampSourceChannelValue(src[red_pos]));
226 float srcG = scale<float>(CompositeOpFunctor::clampSourceChannelValue(src[green_pos]));
227 float srcB = scale<float>(CompositeOpFunctor::clampSourceChannelValue(src[blue_pos]));
228
229 float dstR = scale<float>(CompositeOpFunctor::clampDestinationChannelValue(dst[red_pos]));
230 float dstG = scale<float>(CompositeOpFunctor::clampDestinationChannelValue(dst[green_pos]));
231 float dstB = scale<float>(CompositeOpFunctor::clampDestinationChannelValue(dst[blue_pos]));
232
233 CompositeOpFunctor::composeChannels(srcR, srcG, srcB, dstR, dstG, dstB);
234
235 if(allChannelFlags || channelFlags.testBit(red_pos))
236 dst[red_pos] = lerp(dst[red_pos], scale<channels_type>(dstR), srcAlpha);
237
238 if(allChannelFlags || channelFlags.testBit(green_pos))
239 dst[green_pos] = lerp(dst[green_pos], scale<channels_type>(dstG), srcAlpha);
240
241 if(allChannelFlags || channelFlags.testBit(blue_pos))
242 dst[blue_pos] = lerp(dst[blue_pos], scale<channels_type>(dstB), srcAlpha);
243 }
244
245 return dstAlpha;
246 }
247 else {
248 channels_type newDstAlpha = unionShapeOpacity(srcAlpha, dstAlpha);
249
250 if(newDstAlpha != zeroValue<channels_type>()) {
251 float srcR = scale<float>(CompositeOpFunctor::clampSourceChannelValue(src[red_pos]));
252 float srcG = scale<float>(CompositeOpFunctor::clampSourceChannelValue(src[green_pos]));
253 float srcB = scale<float>(CompositeOpFunctor::clampSourceChannelValue(src[blue_pos]));
254
255 float dstR = scale<float>(CompositeOpFunctor::clampDestinationChannelValue(dst[red_pos]));
256 float dstG = scale<float>(CompositeOpFunctor::clampDestinationChannelValue(dst[green_pos]));
257 float dstB = scale<float>(CompositeOpFunctor::clampDestinationChannelValue(dst[blue_pos]));
258
259 CompositeOpFunctor::composeChannels(srcR, srcG, srcB, dstR, dstG, dstB);
260
261 if(allChannelFlags || channelFlags.testBit(red_pos))
262 dst[red_pos] = div(blend(src[red_pos], srcAlpha, dst[red_pos], dstAlpha, scale<channels_type>(dstR)), newDstAlpha);
263
264 if(allChannelFlags || channelFlags.testBit(green_pos))
265 dst[green_pos] = div(blend(src[green_pos], srcAlpha, dst[green_pos], dstAlpha, scale<channels_type>(dstG)), newDstAlpha);
266
267 if(allChannelFlags || channelFlags.testBit(blue_pos))
268 dst[blue_pos] = div(blend(src[blue_pos], srcAlpha, dst[blue_pos], dstAlpha, scale<channels_type>(dstB)), newDstAlpha);
269 }
270
271 return newDstAlpha;
272 }
273 }
QPointF lerp(const QPointF &p1, const QPointF &p2, qreal t)
T mul(T a, T b)
T blend(T src, T srcAlpha, T dst, T dstAlpha, T cfValue)
T unionShapeOpacity(T a, T b)
KoColorSpaceMathsTraits< T >::compositetype div(T a, T b)

References KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::blue_pos, KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::green_pos, lerp(), and KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::red_pos.

Member Data Documentation

◆ blue_pos

template<class Traits , typename CompositeOpFunctor >
const qint32 KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::blue_pos = Traits::blue_pos
staticprivate

Definition at line 208 of file KoCompositeOpGeneric.h.

◆ green_pos

template<class Traits , typename CompositeOpFunctor >
const qint32 KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::green_pos = Traits::green_pos
staticprivate

Definition at line 207 of file KoCompositeOpGeneric.h.

◆ red_pos

template<class Traits , typename CompositeOpFunctor >
const qint32 KoCompositeOpGenericHSLFunctor< Traits, CompositeOpFunctor >::red_pos = Traits::red_pos
staticprivate

Definition at line 206 of file KoCompositeOpGeneric.h.


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