Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCompositeOps.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6*/
7
8#ifndef _KOCOMPOSITEOPS_H_
9#define _KOCOMPOSITEOPS_H_
10
11#include <boost/type_traits.hpp>
12
13#include <KoColorSpace.h>
14#include <KoColorSpaceTraits.h>
15#include <KoColorSpaceMaths.h>
17
34
35namespace _Private {
36
37template<class Traits, bool flag>
39{
40 static void add(KoColorSpace* cs) { Q_UNUSED(cs); }
41};
42
43template<class Traits>
61
62template<>
78
79template<>
94
95template<>
111
112template<>
128
129
130template<class Traits>
132{
133 typedef typename Traits::channels_type Arg;
134 typedef Arg (*CompositeFunc)(Arg, Arg);
135 static const qint32 alpha_pos = Traits::alpha_pos;
136 static constexpr bool IsIntegerSpace = std::numeric_limits<Arg>::is_integer;
137
138 template<CompositeFunc func>
139 static void add(KoColorSpace* cs, const QString& id, const QString& category) {
140 if constexpr (std::is_base_of_v<KoCmykTraits<typename Traits::channels_type>, Traits>) {
143 } else {
145 }
146 } else {
148 }
149 }
150
151 template<typename Functor>
152 static void add(KoColorSpace* cs, const QString& id, const QString& category) {
153 if constexpr (std::is_base_of_v<KoCmykTraits<typename Traits::channels_type>, Traits>) {
156 } else {
158 }
159 } else {
161 }
162 }
163
164 static void add(KoColorSpace* cs) {
165 using namespace KoCompositeOpClampPolicy;
166
171
172 if constexpr (std::is_base_of_v<KoCmykTraits<typename Traits::channels_type>, Traits>) {
175 } else {
177 }
178 } else {
180 }
181
184
185 if constexpr (std::is_base_of_v<KoCmykTraits<typename Traits::channels_type>, Traits>) {
188 } else {
190 }
191 } else {
193 }
194
195 add<CFOverlay<Arg> >(cs, COMPOSITE_OVERLAY , KoCompositeOp::categoryMix());
196 add<CFGrainMerge<Arg> >(cs, COMPOSITE_GRAIN_MERGE , KoCompositeOp::categoryMix());
197 add<CFGrainExtract<Arg> >(cs, COMPOSITE_GRAIN_EXTRACT , KoCompositeOp::categoryMix());
198 add<FunctorWithSDRClampPolicy<CFHardMix, Arg>>(cs, COMPOSITE_HARD_MIX, KoCompositeOp::categoryMix());
199 if constexpr (!IsIntegerSpace) {
200 add<CFHardMix<Arg, ClampAsFloatHDR>>(cs, COMPOSITE_HARD_MIX_HDR, KoCompositeOp::categoryMix());
201 }
202
203 add<CFHardMixPhotoshop<Arg>>(cs, COMPOSITE_HARD_MIX_PHOTOSHOP, KoCompositeOp::categoryMix());
204 add<CFHardMixSofterPhotoshop<Arg>>(cs, COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP, KoCompositeOp::categoryMix());
205 add<CFGeometricMean<Arg> >(cs, COMPOSITE_GEOMETRIC_MEAN, KoCompositeOp::categoryMix());
206 add<CFParallel<Arg> >(cs, COMPOSITE_PARALLEL , KoCompositeOp::categoryMix());
207 add<&cfAllanon<Arg> >(cs, COMPOSITE_ALLANON , KoCompositeOp::categoryMix());
208 add<FunctorWithSDRClampPolicy<CFHardOverlay, Arg>>(cs, COMPOSITE_HARD_OVERLAY, KoCompositeOp::categoryMix());
209 if constexpr (!IsIntegerSpace) {
210 add<CFHardOverlay<Arg, ClampAsFloatHDR>>(cs, COMPOSITE_HARD_OVERLAY_HDR, KoCompositeOp::categoryMix());
211 }
212
213 add<&cfInterpolation<Arg> >(cs, COMPOSITE_INTERPOLATION , KoCompositeOp::categoryMix());
214 add<&cfInterpolationB<Arg>>(cs, COMPOSITE_INTERPOLATIONB, KoCompositeOp::categoryMix());
215 add<CFPenumbraA<Arg> >(cs, COMPOSITE_PENUMBRAA , KoCompositeOp::categoryMix());
216 add<CFPenumbraB<Arg> >(cs, COMPOSITE_PENUMBRAB , KoCompositeOp::categoryMix());
217 add<&cfPenumbraC<Arg> >(cs, COMPOSITE_PENUMBRAC , KoCompositeOp::categoryMix());
218 add<&cfPenumbraD<Arg> >(cs, COMPOSITE_PENUMBRAD , KoCompositeOp::categoryMix());
220
221 add<&cfScreen<Arg> >(cs, COMPOSITE_SCREEN , KoCompositeOp::categoryLight());
222
223 add<FunctorWithSDRClampPolicy<CFColorDodge, Arg>>(cs, COMPOSITE_DODGE, KoCompositeOp::categoryLight());
224 if constexpr (!IsIntegerSpace) {
225 add<CFColorDodge<Arg, ClampAsFloatHDR>>(cs, COMPOSITE_DODGE_HDR, KoCompositeOp::categoryLight());
226 }
227
228 add<&cfAddition<Arg> >(cs, COMPOSITE_LINEAR_DODGE, KoCompositeOp::categoryLight());
229 add<&cfLightenOnly<Arg> >(cs, COMPOSITE_LIGHTEN , KoCompositeOp::categoryLight());
230 add<CFHardLight<Arg> >(cs, COMPOSITE_HARD_LIGHT , KoCompositeOp::categoryLight());
231 add<&cfSoftLightIFSIllusions<Arg>>(cs, COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS, KoCompositeOp::categoryLight());
232 add<&cfSoftLightPegtopDelphi<Arg>>(cs, COMPOSITE_SOFT_LIGHT_PEGTOP_DELPHI, KoCompositeOp::categoryLight());
233 add<CFSoftLightSvg<Arg> >(cs, COMPOSITE_SOFT_LIGHT_SVG, KoCompositeOp::categoryLight());
235 add<CFGammaLight<Arg> >(cs, COMPOSITE_GAMMA_LIGHT , KoCompositeOp::categoryLight());
236 add<CFGammaIllumination<Arg>>(cs, COMPOSITE_GAMMA_ILLUMINATION, KoCompositeOp::categoryLight());
237
238 add<FunctorWithSDRClampPolicy<CFVividLight, Arg>>(cs, COMPOSITE_VIVID_LIGHT, KoCompositeOp::categoryLight());
239 if constexpr (!IsIntegerSpace) {
240 add<CFVividLight<Arg, ClampAsFloatHDR>>(cs, COMPOSITE_VIVID_LIGHT_HDR, KoCompositeOp::categoryLight());
241 }
242 add<CFFlatLight<Arg> >(cs, COMPOSITE_FLAT_LIGHT , KoCompositeOp::categoryLight());
243 add<CFPinLight<Arg>>(cs, COMPOSITE_PIN_LIGHT, KoCompositeOp::categoryLight()); // using HDR mode as default
244 add<&cfLinearLight<Arg> >(cs, COMPOSITE_LINEAR_LIGHT, KoCompositeOp::categoryLight());
245 add<&cfPNormA<Arg> >(cs, COMPOSITE_PNORM_A , KoCompositeOp::categoryLight());
246 add<&cfPNormB<Arg> >(cs, COMPOSITE_PNORM_B , KoCompositeOp::categoryLight());
247 add<&cfSuperLight<Arg> >(cs, COMPOSITE_SUPER_LIGHT , KoCompositeOp::categoryLight());
248 add<&cfTintIFSIllusions<Arg>>(cs, COMPOSITE_TINT_IFS_ILLUSIONS, KoCompositeOp::categoryLight());
249 add<&cfFogLightenIFSIllusions<Arg>>(cs, COMPOSITE_FOG_LIGHTEN_IFS_ILLUSIONS, KoCompositeOp::categoryLight());
250 add<&cfEasyDodge<Arg> >(cs, COMPOSITE_EASY_DODGE , KoCompositeOp::categoryLight());
251
252 add<CFColorBurn<Arg>>(cs, COMPOSITE_BURN, KoCompositeOp::categoryDark()); // using HDR mode as default
253 add<CFLinearBurn<Arg, ClampAsFloatHDR>>(cs, COMPOSITE_LINEAR_BURN , KoCompositeOp::categoryDark()); // using HDR mode as default
254 add<&cfDarkenOnly<Arg> >(cs, COMPOSITE_DARKEN , KoCompositeOp::categoryDark());
255 add<CFGammaDark<Arg> >(cs, COMPOSITE_GAMMA_DARK , KoCompositeOp::categoryDark());
256 add<&cfShadeIFSIllusions<Arg>>(cs, COMPOSITE_SHADE_IFS_ILLUSIONS, KoCompositeOp::categoryDark());
257 add<&cfFogDarkenIFSIllusions<Arg>>(cs, COMPOSITE_FOG_DARKEN_IFS_ILLUSIONS, KoCompositeOp::categoryDark());
258 add<&cfEasyBurn<Arg> >(cs, COMPOSITE_EASY_BURN , KoCompositeOp::categoryDark());
259
260 add<&cfAddition<Arg> >(cs, COMPOSITE_ADD , KoCompositeOp::categoryArithmetic());
261 add<&cfSubtract<Arg> >(cs, COMPOSITE_SUBTRACT , KoCompositeOp::categoryArithmetic());
262 add<CFInverseSubtract<Arg> >(cs, COMPOSITE_INVERSE_SUBTRACT, KoCompositeOp::categoryArithmetic());
263 add<&cfMultiply<Arg> >(cs, COMPOSITE_MULT , KoCompositeOp::categoryArithmetic());
264 add<CFDivide<Arg> >(cs, COMPOSITE_DIVIDE , KoCompositeOp::categoryArithmetic());
265
266 add<&cfModulo<Arg> >(cs, COMPOSITE_MOD , KoCompositeOp::categoryModulo());
267 add<&cfModuloContinuous<Arg> >(cs, COMPOSITE_MOD_CON , KoCompositeOp::categoryModulo());
268 add<&cfDivisiveModulo<Arg> >(cs, COMPOSITE_DIVISIVE_MOD , KoCompositeOp::categoryModulo());
269 add<&cfDivisiveModuloContinuous<Arg>>(cs, COMPOSITE_DIVISIVE_MOD_CON, KoCompositeOp::categoryModulo());
270 add<&cfModuloShift<Arg> >(cs, COMPOSITE_MODULO_SHIFT , KoCompositeOp::categoryModulo());
271 add<&cfModuloShiftContinuous<Arg>>(cs, COMPOSITE_MODULO_SHIFT_CON , KoCompositeOp::categoryModulo());
272
273 add<&cfArcTangent<Arg> >(cs, COMPOSITE_ARC_TANGENT , KoCompositeOp::categoryNegative());
274 add<&cfDifference<Arg> >(cs, COMPOSITE_DIFF , KoCompositeOp::categoryNegative());
275 add<CFExclusion<Arg> >(cs, COMPOSITE_EXCLUSION , KoCompositeOp::categoryNegative());
276 add<CFEquivalence<Arg> >(cs, COMPOSITE_EQUIVALENCE , KoCompositeOp::categoryNegative());
277 add<CFAdditiveSubtractive<Arg> >(cs, COMPOSITE_ADDITIVE_SUBTRACTIVE, KoCompositeOp::categoryNegative());
278 add<CFNegation<Arg> >(cs, COMPOSITE_NEGATION , KoCompositeOp::categoryNegative());
279
280 if constexpr (IsIntegerSpace) {
281 add<&cfXor<Arg> >(cs, COMPOSITE_XOR , KoCompositeOp::categoryBinary());
282 add<&cfOr<Arg> >(cs, COMPOSITE_OR , KoCompositeOp::categoryBinary());
283 add<&cfAnd<Arg> >(cs, COMPOSITE_AND , KoCompositeOp::categoryBinary());
284 add<&cfNand<Arg> >(cs, COMPOSITE_NAND , KoCompositeOp::categoryBinary());
285 add<&cfNor<Arg> >(cs, COMPOSITE_NOR , KoCompositeOp::categoryBinary());
286 add<&cfXnor<Arg> >(cs, COMPOSITE_XNOR , KoCompositeOp::categoryBinary());
287 add<&cfImplies<Arg> >(cs, COMPOSITE_IMPLICATION , KoCompositeOp::categoryBinary());
288 add<&cfNotImplies<Arg> >(cs, COMPOSITE_NOT_IMPLICATION, KoCompositeOp::categoryBinary());
289 add<&cfConverse<Arg> >(cs, COMPOSITE_CONVERSE , KoCompositeOp::categoryBinary());
290 add<&cfNotConverse<Arg>>(cs, COMPOSITE_NOT_CONVERSE , KoCompositeOp::categoryBinary());
291 }
292
293 add<&cfReflect<Arg>>(cs, COMPOSITE_REFLECT, KoCompositeOp::categoryQuadratic());
294 add<&cfGlow<Arg> >(cs, COMPOSITE_GLOW , KoCompositeOp::categoryQuadratic());
295 add<&cfFreeze<Arg> >(cs, COMPOSITE_FREEZE , KoCompositeOp::categoryQuadratic());
296 add<&cfHeat<Arg> >(cs, COMPOSITE_HEAT , KoCompositeOp::categoryQuadratic());
297 add<CFGleat<Arg> >(cs, COMPOSITE_GLEAT , KoCompositeOp::categoryQuadratic());
298 add<CFHelow<Arg> >(cs, COMPOSITE_HELOW , KoCompositeOp::categoryQuadratic());
299 add<CFReeze<Arg> >(cs, COMPOSITE_REEZE , KoCompositeOp::categoryQuadratic());
300 add<CFFrect<Arg> >(cs, COMPOSITE_FRECT , KoCompositeOp::categoryQuadratic());
301 add<&cfFhyrd<Arg> >(cs, COMPOSITE_FHYRD , KoCompositeOp::categoryQuadratic());
302
304 }
305};
306
307template<class Traits, bool flag>
309{
310 static void add(KoColorSpace* cs) { Q_UNUSED(cs); }
311};
312
313template<class Traits>
314struct AddRGBOps<Traits, true>
315{
316 typedef typename Traits::channels_type channels_type;
317
318 static const qint32 red_pos = Traits::red_pos;
319 static const qint32 green_pos = Traits::green_pos;
320 static const qint32 blue_pos = Traits::blue_pos;
321
322 template<typename Functor>
323 static void add(KoColorSpace* cs, const QString& id, const QString& category) {
325 }
326
327 static void add(KoColorSpace* cs) {
328
332
333 add<CFTangentNormalmap<channels_type> >(cs, COMPOSITE_TANGENT_NORMALMAP , KoCompositeOp::categoryMisc());
334 add<CFReorientedNormalMapCombine<channels_type>>(cs, COMPOSITE_COMBINE_NORMAL, KoCompositeOp::categoryMisc());
335 add<CFColor<HSYType, channels_type>>(cs, COMPOSITE_COLOR, KoCompositeOp::categoryHSY());
336 add<CFHue<HSYType, channels_type>>(cs, COMPOSITE_HUE, KoCompositeOp::categoryHSY());
337 add<CFTint<HSYType, channels_type>>(cs, COMPOSITE_TINT, KoCompositeOp::categoryHSY());
338 add<CFSaturation<HSYType, channels_type>>(cs, COMPOSITE_SATURATION, KoCompositeOp::categoryHSY());
339 add<CFIncreaseSaturation<HSYType, channels_type>>(cs, COMPOSITE_INC_SATURATION, KoCompositeOp::categoryHSY());
340 add<CFDecreaseSaturation<HSYType, channels_type>>(cs, COMPOSITE_DEC_SATURATION, KoCompositeOp::categoryHSY());
341
342 add<CFLightness<HSYType,channels_type>>(cs, COMPOSITE_LUMINIZE, KoCompositeOp::categoryHSY());
343 add<CFIncreaseLightness<HSYType,channels_type>>(cs, COMPOSITE_INC_LUMINOSITY, KoCompositeOp::categoryHSY());
344 add<CFDecreaseLightness<HSYType,channels_type>>(cs, COMPOSITE_DEC_LUMINOSITY, KoCompositeOp::categoryHSY());
345
346
347 add<CFDarkerColor<HSYType, channels_type>>(cs, COMPOSITE_DARKER_COLOR, KoCompositeOp::categoryDark()); //darker color as PSD does it//
348 add<CFLighterColor<HSYType, channels_type>>(cs, COMPOSITE_LIGHTER_COLOR, KoCompositeOp::categoryLight()); //lighter color as PSD does it//
349
350 add<CFLambertLighting<HSIType,channels_type>>(cs, COMPOSITE_LAMBERT_LIGHTING, KoCompositeOp::categoryMix());
351 add<CFLambertLightingGamma2_2<HSIType, channels_type>>(cs, COMPOSITE_LAMBERT_LIGHTING_GAMMA_2_2, KoCompositeOp::categoryMix());
352
353 add<CFColor <HSIType, channels_type> >(cs, COMPOSITE_COLOR_HSI , KoCompositeOp::categoryHSI());
354 add<CFHue <HSIType, channels_type> >(cs, COMPOSITE_HUE_HSI , KoCompositeOp::categoryHSI());
355 add<CFSaturation <HSIType, channels_type> >(cs, COMPOSITE_SATURATION_HSI , KoCompositeOp::categoryHSI());
356 add<CFIncreaseSaturation<HSIType, channels_type> >(cs, COMPOSITE_INC_SATURATION_HSI, KoCompositeOp::categoryHSI());
357 add<CFDecreaseSaturation<HSIType, channels_type> >(cs, COMPOSITE_DEC_SATURATION_HSI, KoCompositeOp::categoryHSI());
358 add<CFLightness <HSIType, channels_type> >(cs, COMPOSITE_INTENSITY , KoCompositeOp::categoryHSI());
359 add<CFIncreaseLightness <HSIType, channels_type> >(cs, COMPOSITE_INC_INTENSITY , KoCompositeOp::categoryHSI());
360 add<CFDecreaseLightness <HSIType, channels_type> >(cs, COMPOSITE_DEC_INTENSITY , KoCompositeOp::categoryHSI());
361
362 add<CFColor <HSLType, channels_type> >(cs, COMPOSITE_COLOR_HSL , KoCompositeOp::categoryHSL());
363 add<CFHue <HSLType, channels_type> >(cs, COMPOSITE_HUE_HSL , KoCompositeOp::categoryHSL());
364 add<CFSaturation <HSLType, channels_type> >(cs, COMPOSITE_SATURATION_HSL , KoCompositeOp::categoryHSL());
365 add<CFIncreaseSaturation<HSLType, channels_type> >(cs, COMPOSITE_INC_SATURATION_HSL, KoCompositeOp::categoryHSL());
366 add<CFDecreaseSaturation<HSLType, channels_type> >(cs, COMPOSITE_DEC_SATURATION_HSL, KoCompositeOp::categoryHSL());
367 add<CFLightness <HSLType, channels_type> >(cs, COMPOSITE_LIGHTNESS , KoCompositeOp::categoryHSL());
368 add<CFIncreaseLightness <HSLType, channels_type> >(cs, COMPOSITE_INC_LIGHTNESS , KoCompositeOp::categoryHSL());
369 add<CFDecreaseLightness <HSLType, channels_type> >(cs, COMPOSITE_DEC_LIGHTNESS , KoCompositeOp::categoryHSL());
370
371 add<CFColor <HSVType, channels_type> >(cs, COMPOSITE_COLOR_HSV , KoCompositeOp::categoryHSV());
372 add<CFHue <HSVType, channels_type> >(cs, COMPOSITE_HUE_HSV , KoCompositeOp::categoryHSV());
373 add<CFSaturation <HSVType, channels_type> >(cs, COMPOSITE_SATURATION_HSV , KoCompositeOp::categoryHSV());
374 add<CFIncreaseSaturation<HSVType, channels_type> >(cs, COMPOSITE_INC_SATURATION_HSV, KoCompositeOp::categoryHSV());
375 add<CFDecreaseSaturation<HSVType, channels_type> >(cs, COMPOSITE_DEC_SATURATION_HSV, KoCompositeOp::categoryHSV());
376 add<CFLightness <HSVType, channels_type> >(cs, COMPOSITE_VALUE , KoCompositeOp::categoryHSV());
377 add<CFIncreaseLightness <HSVType, channels_type> >(cs, COMPOSITE_INC_VALUE , KoCompositeOp::categoryHSV());
378 add<CFDecreaseLightness <HSVType, channels_type> >(cs, COMPOSITE_DEC_VALUE , KoCompositeOp::categoryHSV());
379
380 }
381};
382
383
384
385
386template<class Traits, bool flag>
388{
389 static void add(KoColorSpace* cs) { Q_UNUSED(cs); }
390};
391
392template<class Traits>
394{
395 typedef float Arg;
396 static const qint32 alpha_pos = Traits::alpha_pos;
397 template<void compositeFunc(Arg, Arg, Arg&, Arg&)>
398
399
400 static void add(KoColorSpace* cs, const QString& id, const QString& category)
401 {
402 if constexpr (std::is_base_of_v<KoCmykTraits<typename Traits::channels_type>, Traits>) {
405 } else {
406 cs->addCompositeOp(new KoCompositeOpGenericSCAlpha<Traits, compositeFunc, KoAdditiveBlendingPolicy<Traits>>(cs, id, category));
407 }
408 } else {
409 cs->addCompositeOp(new KoCompositeOpGenericSCAlpha<Traits, compositeFunc, KoAdditiveBlendingPolicy<Traits>>(cs, id, category));
410 }
411 }
412
413 static void add(KoColorSpace* cs)
414 {
415 add<&cfAdditionSAI<HSVType,Arg>>(cs, COMPOSITE_LUMINOSITY_SAI, KoCompositeOp::categoryHSV());
416 }
417
418
419};
420
421
422
423
424
425}
426
427
428
429
430
435template<class _Traits_>
437{
438 typedef typename _Traits_::channels_type channels_type;
439
440 static const bool useGeneralOps = true;
441 static const bool useRGBOps = (boost::is_base_of<KoBgrTraits<channels_type>, _Traits_>::value
442 || boost::is_base_of<KoRgbTraits<channels_type>, _Traits_>::value);
443
447
448}
449
450template<class _Traits_>
455
456#endif
float value(const T *src, size_t ch)
bool useCreamyAlphaDarken()
bool useSubtractiveBlendingForCmykColorSpaces()
const QString COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS
const QString COMPOSITE_GLOW
const QString COMPOSITE_DEC_SATURATION_HSI
const QString COMPOSITE_INC_SATURATION
const QString COMPOSITE_DARKEN
const QString COMPOSITE_DIVISIVE_MOD_CON
const QString COMPOSITE_ALLANON
const QString COMPOSITE_EQUIVALENCE
const QString COMPOSITE_NEGATION
const QString COMPOSITE_OVERLAY
const QString COMPOSITE_DIVIDE
const QString COMPOSITE_LIGHTNESS
const QString COMPOSITE_DODGE
const QString COMPOSITE_SOFT_LIGHT_SVG
const QString COMPOSITE_HELOW
const QString COMPOSITE_GAMMA_LIGHT
const QString COMPOSITE_ADD
const QString COMPOSITE_FOG_DARKEN_IFS_ILLUSIONS
const QString COMPOSITE_SATURATION_HSI
const QString COMPOSITE_LIGHTEN
const QString COMPOSITE_COPY_RED
const QString COMPOSITE_LINEAR_BURN
const QString COMPOSITE_FREEZE
const QString COMPOSITE_FOG_LIGHTEN_IFS_ILLUSIONS
const QString COMPOSITE_CONVERSE
const QString COMPOSITE_VALUE
const QString COMPOSITE_GRAIN_MERGE
const QString COMPOSITE_SOFT_LIGHT_PHOTOSHOP
const QString COMPOSITE_PARALLEL
const QString COMPOSITE_PENUMBRAA
const QString COMPOSITE_LIGHTER_COLOR
const QString COMPOSITE_INVERSE_SUBTRACT
const QString COMPOSITE_TINT_IFS_ILLUSIONS
const QString COMPOSITE_DIVISIVE_MOD
const QString COMPOSITE_MULT
const QString COMPOSITE_INC_INTENSITY
const QString COMPOSITE_LAMBERT_LIGHTING_GAMMA_2_2
const QString COMPOSITE_REFLECT
const QString COMPOSITE_DEC_VALUE
const QString COMPOSITE_PNORM_B
const QString COMPOSITE_INC_SATURATION_HSL
const QString COMPOSITE_OR
const QString COMPOSITE_SATURATION
const QString COMPOSITE_LINEAR_LIGHT
const QString COMPOSITE_LAMBERT_LIGHTING
const QString COMPOSITE_XNOR
const QString COMPOSITE_VIVID_LIGHT_HDR
const QString COMPOSITE_INC_SATURATION_HSI
const QString COMPOSITE_FHYRD
const QString COMPOSITE_HUE_HSL
const QString COMPOSITE_COPY_GREEN
const QString COMPOSITE_HARD_LIGHT
const QString COMPOSITE_INTERPOLATION
const QString COMPOSITE_LUMINOSITY_SAI
const QString COMPOSITE_INC_SATURATION_HSV
const QString COMPOSITE_HUE_HSV
const QString COMPOSITE_PENUMBRAB
const QString COMPOSITE_IMPLICATION
const QString COMPOSITE_SHADE_IFS_ILLUSIONS
const QString COMPOSITE_NOT_IMPLICATION
const QString COMPOSITE_DEC_SATURATION
const QString COMPOSITE_COPY_BLUE
const QString COMPOSITE_SOFT_LIGHT_PEGTOP_DELPHI
const QString COMPOSITE_INC_LIGHTNESS
const QString COMPOSITE_EASY_BURN
const QString COMPOSITE_COLOR_HSV
const QString COMPOSITE_HARD_OVERLAY
const QString COMPOSITE_FLAT_LIGHT
const QString COMPOSITE_SCREEN
const QString COMPOSITE_PIN_LIGHT
const QString COMPOSITE_DEC_SATURATION_HSV
const QString COMPOSITE_DIFF
const QString COMPOSITE_DEC_LIGHTNESS
const QString COMPOSITE_MOD_CON
const QString COMPOSITE_GAMMA_DARK
const QString COMPOSITE_PENUMBRAD
const QString COMPOSITE_PNORM_A
const QString COMPOSITE_COLOR_HSI
const QString COMPOSITE_HARD_MIX
const QString COMPOSITE_HUE
const QString COMPOSITE_INTENSITY
const QString COMPOSITE_DODGE_HDR
const QString COMPOSITE_NOR
const QString COMPOSITE_PENUMBRAC
const QString COMPOSITE_SUBTRACT
const QString COMPOSITE_BURN
const QString COMPOSITE_LINEAR_DODGE
const QString COMPOSITE_GLEAT
const QString COMPOSITE_ADDITIVE_SUBTRACTIVE
const QString COMPOSITE_MOD
const QString COMPOSITE_EASY_DODGE
const QString COMPOSITE_DEC_LUMINOSITY
const QString COMPOSITE_NAND
const QString COMPOSITE_COLOR_HSL
const QString COMPOSITE_COLOR
const QString COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP
const QString COMPOSITE_HEAT
const QString COMPOSITE_TANGENT_NORMALMAP
const QString COMPOSITE_HARD_MIX_HDR
const QString COMPOSITE_SUPER_LIGHT
const QString COMPOSITE_HARD_OVERLAY_HDR
const QString COMPOSITE_DEC_INTENSITY
const QString COMPOSITE_EXCLUSION
const QString COMPOSITE_FRECT
const QString COMPOSITE_NOT_CONVERSE
const QString COMPOSITE_REEZE
const QString COMPOSITE_INC_LUMINOSITY
const QString COMPOSITE_GAMMA_ILLUMINATION
const QString COMPOSITE_MODULO_SHIFT_CON
const QString COMPOSITE_DARKER_COLOR
const QString COMPOSITE_TINT
const QString COMPOSITE_COMBINE_NORMAL
const QString COMPOSITE_SATURATION_HSL
const QString COMPOSITE_GEOMETRIC_MEAN
const QString COMPOSITE_AND
const QString COMPOSITE_GRAIN_EXTRACT
const QString COMPOSITE_SATURATION_HSV
const QString COMPOSITE_ARC_TANGENT
const QString COMPOSITE_DEC_SATURATION_HSL
const QString COMPOSITE_INTERPOLATIONB
const QString COMPOSITE_INC_VALUE
const QString COMPOSITE_XOR
const QString COMPOSITE_HUE_HSI
const QString COMPOSITE_VIVID_LIGHT
const QString COMPOSITE_LUMINIZE
const QString COMPOSITE_HARD_MIX_PHOTOSHOP
const QString COMPOSITE_MODULO_SHIFT
void addStandardCompositeOps(KoColorSpace *cs)
KoCompositeOp * createAlphaDarkenCompositeOp(const KoColorSpace *cs)
virtual void addCompositeOp(const KoCompositeOp *op)
static KoCompositeOp * createAlphaDarkenOpCreamyU64(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp32(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOpHardU64(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOpCreamy128(const KoColorSpace *cs)
static KoCompositeOp * createOverOp32(const KoColorSpace *cs)
static KoCompositeOp * createOverOpU64(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOpCreamy32(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp128(const KoColorSpace *cs)
static KoCompositeOp * createOverOp128(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOpHard32(const KoColorSpace *cs)
static KoCompositeOp * createCopyOpU64(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOpHard128(const KoColorSpace *cs)
default blending policy used in additive color spaces
static QString categoryLight()
static QString categoryMisc()
static QString categoryQuadratic()
static QString categoryHSI()
static QString categoryHSL()
static QString categoryHSV()
static QString categoryHSY()
static QString categoryModulo()
static QString categoryMix()
static QString categoryArithmetic()
static QString categoryDark()
static QString categoryBinary()
static QString categoryNegative()
a plending policy used for subtractive color spaces (e.g. CMYK)
static void add(KoColorSpace *cs, const QString &id, const QString &category)
static void add(KoColorSpace *cs)
static void add(KoColorSpace *cs)
static void add(KoColorSpace *cs, const QString &id, const QString &category)
static void add(KoColorSpace *cs)
static void add(KoColorSpace *cs, const QString &id, const QString &category)
static void add(KoColorSpace *cs)
static void add(KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOp(const KoColorSpace *cs)
static KoCompositeOp * createOverOp(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp(const KoColorSpace *cs)
static KoCompositeOp * createOverOp(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOp(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp(const KoColorSpace *cs)
static KoCompositeOp * createOverOp(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOp(const KoColorSpace *cs)
static KoCompositeOp * createOverOp(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOp(const KoColorSpace *cs)
static KoCompositeOp * createAlphaDarkenOp(const KoColorSpace *cs)
static KoCompositeOp * createCopyOp(const KoColorSpace *cs)
static KoCompositeOp * createOverOp(const KoColorSpace *cs)