Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCompositeOpRegistry.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2005 Adrian Page <adrian@pagenet.plus.com>
3 * SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6*/
7#ifndef KOCOMPOSITEOPREGISTRY_H
8#define KOCOMPOSITEOPREGISTRY_H
9
10#include <QString>
11#include <QList>
12#include <QMultiMap>
13
14#include "kritapigment_export.h"
15
16class KoColorSpace;
17#include <KoID.h>
18
19// TODO : convert this data blob into a modern design with an enum class.
20// This will reduce the need for runtime string comparisons.
21
22const QString COMPOSITE_OVER = "normal";
23const QString COMPOSITE_ERASE = "erase";
24const QString COMPOSITE_IN = "in";
25const QString COMPOSITE_OUT = "out";
26const QString COMPOSITE_ALPHA_DARKEN = "alphadarken";
27const QString COMPOSITE_DESTINATION_IN = "destination-in";
28const QString COMPOSITE_DESTINATION_ATOP = "destination-atop";
29
30const QString COMPOSITE_XOR = "xor";
31const QString COMPOSITE_OR = "or";
32const QString COMPOSITE_AND = "and";
33const QString COMPOSITE_NAND = "nand";
34const QString COMPOSITE_NOR = "nor";
35const QString COMPOSITE_XNOR = "xnor";
36const QString COMPOSITE_IMPLICATION = "implication";
37const QString COMPOSITE_NOT_IMPLICATION = "not_implication";
38const QString COMPOSITE_CONVERSE = "converse";
39const QString COMPOSITE_NOT_CONVERSE = "not_converse";
40
41const QString COMPOSITE_PLUS = "plus";
42const QString COMPOSITE_MINUS = "minus";
43const QString COMPOSITE_ADD = "add";
44const QString COMPOSITE_SUBTRACT = "subtract";
45const QString COMPOSITE_INVERSE_SUBTRACT = "inverse_subtract";
46const QString COMPOSITE_DIFF = "diff";
47const QString COMPOSITE_MULT = "multiply";
48const QString COMPOSITE_DIVIDE = "divide";
49const QString COMPOSITE_ARC_TANGENT = "arc_tangent";
50const QString COMPOSITE_GEOMETRIC_MEAN = "geometric_mean";
51const QString COMPOSITE_ADDITIVE_SUBTRACTIVE = "additive_subtractive";
52const QString COMPOSITE_NEGATION = "negation";
53
54const QString COMPOSITE_MOD = "modulo";
55const QString COMPOSITE_MOD_CON = "modulo_continuous";
56const QString COMPOSITE_DIVISIVE_MOD = "divisive_modulo";
57const QString COMPOSITE_DIVISIVE_MOD_CON = "divisive_modulo_continuous";
58const QString COMPOSITE_MODULO_SHIFT = "modulo_shift";
59const QString COMPOSITE_MODULO_SHIFT_CON = "modulo_shift_continuous";
60
61const QString COMPOSITE_EQUIVALENCE = "equivalence";
62const QString COMPOSITE_ALLANON = "allanon";
63const QString COMPOSITE_PARALLEL = "parallel";
64const QString COMPOSITE_GRAIN_MERGE = "grain_merge";
65const QString COMPOSITE_GRAIN_EXTRACT = "grain_extract";
66const QString COMPOSITE_EXCLUSION = "exclusion";
67const QString COMPOSITE_HARD_MIX = "hard mix";
68const QString COMPOSITE_HARD_MIX_HDR = "hard_mix_hdr";
69const QString COMPOSITE_HARD_MIX_PHOTOSHOP = "hard_mix_photoshop";
70const QString COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP = "hard_mix_softer_photoshop";
71const QString COMPOSITE_OVERLAY = "overlay";
72const QString COMPOSITE_BEHIND = "behind";
73const QString COMPOSITE_GREATER = "greater";
74const QString COMPOSITE_HARD_OVERLAY = "hard overlay";
75const QString COMPOSITE_HARD_OVERLAY_HDR = "hard_overlay_hdr";
76const QString COMPOSITE_INTERPOLATION = "interpolation";
77const QString COMPOSITE_INTERPOLATIONB = "interpolation 2x";
78const QString COMPOSITE_PENUMBRAA = "penumbra a";
79const QString COMPOSITE_PENUMBRAB = "penumbra b";
80const QString COMPOSITE_PENUMBRAC = "penumbra c";
81const QString COMPOSITE_PENUMBRAD = "penumbra d";
82const QString COMPOSITE_MARKER = "marker";
83
84const QString COMPOSITE_DARKEN = "darken";
85const QString COMPOSITE_BURN = "burn";//this is also known as 'color burn'.
86const QString COMPOSITE_LINEAR_BURN = "linear_burn";
87const QString COMPOSITE_GAMMA_DARK = "gamma_dark";
88const QString COMPOSITE_SHADE_IFS_ILLUSIONS = "shade_ifs_illusions";
89const QString COMPOSITE_FOG_DARKEN_IFS_ILLUSIONS = "fog_darken_ifs_illusions";
90const QString COMPOSITE_EASY_BURN = "easy burn";
91
92const QString COMPOSITE_LIGHTEN = "lighten";
93const QString COMPOSITE_DODGE = "dodge";
94const QString COMPOSITE_DODGE_HDR = "dodge_hdr";
95const QString COMPOSITE_LINEAR_DODGE = "linear_dodge";
96const QString COMPOSITE_SCREEN = "screen";
97const QString COMPOSITE_HARD_LIGHT = "hard_light";
98const QString COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS = "soft_light_ifs_illusions";
99const QString COMPOSITE_SOFT_LIGHT_PEGTOP_DELPHI = "soft_light_pegtop_delphi";
100const QString COMPOSITE_SOFT_LIGHT_PHOTOSHOP = "soft_light";
101const QString COMPOSITE_SOFT_LIGHT_SVG = "soft_light_svg";
102const QString COMPOSITE_GAMMA_LIGHT = "gamma_light";
103const QString COMPOSITE_GAMMA_ILLUMINATION = "gamma_illumination";
104const QString COMPOSITE_VIVID_LIGHT = "vivid_light";
105const QString COMPOSITE_VIVID_LIGHT_HDR = "vivid_light_hdr";
106const QString COMPOSITE_FLAT_LIGHT = "flat_light";
107const QString COMPOSITE_LINEAR_LIGHT = "linear light";
108const QString COMPOSITE_PIN_LIGHT = "pin_light";
109const QString COMPOSITE_PNORM_A = "pnorm_a";
110const QString COMPOSITE_PNORM_B = "pnorm_b";
111const QString COMPOSITE_SUPER_LIGHT = "super_light";
112const QString COMPOSITE_TINT_IFS_ILLUSIONS = "tint_ifs_illusions";
113const QString COMPOSITE_FOG_LIGHTEN_IFS_ILLUSIONS = "fog_lighten_ifs_illusions";
114const QString COMPOSITE_EASY_DODGE = "easy dodge";
115const QString COMPOSITE_LUMINOSITY_SAI = "luminosity_sai";
116
117
118const QString COMPOSITE_HUE = "hue";
119const QString COMPOSITE_COLOR = "color";
120const QString COMPOSITE_TINT = "tint";
121const QString COMPOSITE_SATURATION = "saturation";
122const QString COMPOSITE_INC_SATURATION = "inc_saturation";
123const QString COMPOSITE_DEC_SATURATION = "dec_saturation";
124const QString COMPOSITE_LUMINIZE = "luminize";
125const QString COMPOSITE_INC_LUMINOSITY = "inc_luminosity";
126const QString COMPOSITE_DEC_LUMINOSITY = "dec_luminosity";
127
128const QString COMPOSITE_HUE_HSV = "hue_hsv";
129const QString COMPOSITE_COLOR_HSV = "color_hsv";
130const QString COMPOSITE_SATURATION_HSV = "saturation_hsv";
131const QString COMPOSITE_INC_SATURATION_HSV = "inc_saturation_hsv";
132const QString COMPOSITE_DEC_SATURATION_HSV = "dec_saturation_hsv";
133const QString COMPOSITE_VALUE = "value";
134const QString COMPOSITE_INC_VALUE = "inc_value";
135const QString COMPOSITE_DEC_VALUE = "dec_value";
136
137const QString COMPOSITE_HUE_HSL = "hue_hsl";
138const QString COMPOSITE_COLOR_HSL = "color_hsl";
139const QString COMPOSITE_SATURATION_HSL = "saturation_hsl";
140const QString COMPOSITE_INC_SATURATION_HSL = "inc_saturation_hsl";
141const QString COMPOSITE_DEC_SATURATION_HSL = "dec_saturation_hsl";
142const QString COMPOSITE_LIGHTNESS = "lightness";
143const QString COMPOSITE_INC_LIGHTNESS = "inc_lightness";
144const QString COMPOSITE_DEC_LIGHTNESS = "dec_lightness";
145
146const QString COMPOSITE_HUE_HSI = "hue_hsi";
147const QString COMPOSITE_COLOR_HSI = "color_hsi";
148const QString COMPOSITE_SATURATION_HSI = "saturation_hsi";
149const QString COMPOSITE_INC_SATURATION_HSI = "inc_saturation_hsi";
150const QString COMPOSITE_DEC_SATURATION_HSI = "dec_saturation_hsi";
151const QString COMPOSITE_INTENSITY = "intensity";
152const QString COMPOSITE_INC_INTENSITY = "inc_intensity";
153const QString COMPOSITE_DEC_INTENSITY = "dec_intensity";
154
155const QString COMPOSITE_COPY = "copy";
156const QString COMPOSITE_COPY_RED = "copy_red";
157const QString COMPOSITE_COPY_GREEN = "copy_green";
158const QString COMPOSITE_COPY_BLUE = "copy_blue";
159const QString COMPOSITE_TANGENT_NORMALMAP = "tangent_normalmap";
160
161const QString COMPOSITE_COLORIZE = "colorize";
162const QString COMPOSITE_BUMPMAP = "bumpmap";
163const QString COMPOSITE_COMBINE_NORMAL = "combine_normal";
164const QString COMPOSITE_CLEAR = "clear";
165const QString COMPOSITE_DISSOLVE = "dissolve";
166const QString COMPOSITE_DISPLACE = "displace";
167const QString COMPOSITE_NO = "nocomposition";
168const QString COMPOSITE_PASS_THROUGH = "pass through"; // XXX: not implemented anywhere yet
169const QString COMPOSITE_DARKER_COLOR = "darker color";
170const QString COMPOSITE_LIGHTER_COLOR = "lighter color";
171const QString COMPOSITE_UNDEF = "undefined";
172
173const QString COMPOSITE_REFLECT = "reflect";
174const QString COMPOSITE_GLOW = "glow";
175const QString COMPOSITE_FREEZE = "freeze";
176const QString COMPOSITE_HEAT = "heat";
177const QString COMPOSITE_GLEAT = "glow_heat";
178const QString COMPOSITE_HELOW = "heat_glow";
179const QString COMPOSITE_REEZE = "reflect_freeze";
180const QString COMPOSITE_FRECT = "freeze_reflect";
181const QString COMPOSITE_FHYRD = "heat_glow_freeze_reflect_hybrid";
182
183const QString COMPOSITE_LAMBERT_LIGHTING = "lambert_lighting";
184const QString COMPOSITE_LAMBERT_LIGHTING_GAMMA_2_2 = "lambert_lighting_gamma2.2";
185
186
187class KRITAPIGMENT_EXPORT KoCompositeOpRegistry
188{
189 typedef QMultiMap<KoID,KoID> KoIDMap;
191
192public:
194 static const KoCompositeOpRegistry& instance();
195
196 KoID getDefaultCompositeOp() const;
197 KoID getKoID(const QString& compositeOpID) const;
198 QString getCompositeOpDisplayName(const QString& compositeOpID) const;
199 KoIDMap getCompositeOps() const;
200 KoIDMap getLayerStylesCompositeOps() const;
201 KoIDList getCategories() const;
202 QString getCategoryDisplayName(const QString& categoryID) const;
203 KoIDList getCompositeOps(const KoColorSpace* colorSpace) const;
204 KoIDList getCompositeOps(const KoID& category, const KoColorSpace* colorSpace=0) const;
205 bool colorSpaceHasCompositeOp(const KoColorSpace* colorSpace, const KoID& compositeOp) const;
206
207 template<class TKoIdIterator>
208 KoIDList filterCompositeOps(TKoIdIterator begin, TKoIdIterator end, const KoColorSpace* colorSpace, bool removeInvalidOps=true) const {
209 KoIDList list;
210
211 for(; begin!=end; ++begin){
212 if (colorSpaceHasCompositeOp(colorSpace, *begin) == removeInvalidOps) {
213 list.push_back(*begin);
214 }
215 }
216
217 return list;
218 }
219
220private:
223};
224
225
226#endif // KOCOMPOSITEOPREGISTRY_H
const QString COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS
const QString COMPOSITE_UNDEF
const QString COMPOSITE_GLOW
const QString COMPOSITE_DEC_SATURATION_HSI
const QString COMPOSITE_OVER
const QString COMPOSITE_INC_SATURATION
const QString COMPOSITE_COPY
const QString COMPOSITE_DARKEN
const QString COMPOSITE_DIVISIVE_MOD_CON
const QString COMPOSITE_DISPLACE
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_OUT
const QString COMPOSITE_LAMBERT_LIGHTING
const QString COMPOSITE_XNOR
const QString COMPOSITE_VIVID_LIGHT_HDR
const QString COMPOSITE_COLORIZE
const QString COMPOSITE_DESTINATION_ATOP
const QString COMPOSITE_INC_SATURATION_HSI
const QString COMPOSITE_FHYRD
const QString COMPOSITE_HUE_HSL
const QString COMPOSITE_CLEAR
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_GREATER
const QString COMPOSITE_DEC_LIGHTNESS
const QString COMPOSITE_MOD_CON
const QString COMPOSITE_GAMMA_DARK
const QString COMPOSITE_ERASE
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_MINUS
const QString COMPOSITE_BEHIND
const QString COMPOSITE_DODGE_HDR
const QString COMPOSITE_NOR
const QString COMPOSITE_PENUMBRAC
const QString COMPOSITE_ALPHA_DARKEN
const QString COMPOSITE_SUBTRACT
const QString COMPOSITE_DISSOLVE
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_MARKER
const QString COMPOSITE_NO
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_PLUS
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_BUMPMAP
const QString COMPOSITE_INTERPOLATIONB
const QString COMPOSITE_INC_VALUE
const QString COMPOSITE_DESTINATION_IN
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_IN
const QString COMPOSITE_MODULO_SHIFT
const QString COMPOSITE_PASS_THROUGH
PythonPluginManager * instance
QMultiMap< KoID, KoID > KoIDMap
KoIDList filterCompositeOps(TKoIdIterator begin, TKoIdIterator end, const KoColorSpace *colorSpace, bool removeInvalidOps=true) const
Definition KoID.h:30