Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCompositeOpRegistry.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2005 Adrian Page <adrian@pagenet.plus.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5*/
6
8
9#include <QGlobalStatic>
10
11#include <klocalizedstring.h>
12
13#include <KoID.h>
14#include "KoCompositeOp.h"
15#include "KoColorSpace.h"
16
17#include "kis_assert.h"
18#include "DebugPigment.h"
19
21
23 static const KoID compositeOver(COMPOSITE_OVER, i18nc("Blending mode - Normal", "Normal"));
24 return compositeOver;
25}
26
28{
30 << KoID("arithmetic", i18nc("Blending mode - category Arithmetic", "Arithmetic"))
31 << KoID("binary" , i18nc("Blending mode - category Binary", "Binary"))
32 << KoID("dark" , i18nc("Blending mode - category Darken", "Darken"))
33 << KoID("light" , i18nc("Blending mode - category Lighten", "Lighten"))
34 << KoID("modulo" , i18nc("Blending mode - category Modulo", "Modulo"))
35 << KoID("negative" , i18nc("Blending mode - category Negative", "Negative"))
36 << KoID("mix" , i18nc("Blending mode - category Mix", "Mix"))
37 << KoID("misc" , i18nc("Blending mode - category Misc", "Misc"))
38 << KoID("hsy" , i18nc("Blending mode - category HSY", "HSY"))
39 << KoID("hsi" , i18nc("Blending mode - category HSI", "HSI"))
40 << KoID("hsl" , i18nc("Blending mode - category HSL", "HSL"))
41 << KoID("hsv" , i18nc("Blending mode - category HSV", "HSV"))
42 << KoID("quadratic" , i18nc("Blending mode - category Quadratic", "Quadratic"));
43
44 m_map.insert(m_categories[0], KoID(COMPOSITE_ADD , i18nc("Blending mode - Addition", "Addition")));
45 m_map.insert(m_categories[0], KoID(COMPOSITE_SUBTRACT , i18nc("Blending mode - Subtract", "Subtract")));
46 m_map.insert(m_categories[0], KoID(COMPOSITE_MULT , i18nc("Blending mode - Multiply", "Multiply")));
47 m_map.insert(m_categories[0], KoID(COMPOSITE_DIVIDE , i18nc("Blending mode - Divide", "Divide")));
48 m_map.insert(m_categories[0], KoID(COMPOSITE_INVERSE_SUBTRACT, i18nc("Blending mode - Inverse Subtract", "Inverse Subtract")));
49
50 m_map.insert(m_categories[1], KoID(COMPOSITE_XOR , i18nc("Blending mode - XOR", "XOR")));
51 m_map.insert(m_categories[1], KoID(COMPOSITE_OR , i18nc("Blending mode - OR", "OR")));
52 m_map.insert(m_categories[1], KoID(COMPOSITE_AND , i18nc("Blending mode - AND", "AND")));
53 m_map.insert(m_categories[1], KoID(COMPOSITE_NAND , i18nc("Blending mode - NAND", "NAND")));
54 m_map.insert(m_categories[1], KoID(COMPOSITE_NOR , i18nc("Blending mode - NOR", "NOR")));
55 m_map.insert(m_categories[1], KoID(COMPOSITE_XNOR , i18nc("Blending mode - XNOR", "XNOR")));
56 m_map.insert(m_categories[1], KoID(COMPOSITE_IMPLICATION , i18nc("Blending mode - IMPLICATION", "IMPLICATION")));
57 m_map.insert(m_categories[1], KoID(COMPOSITE_NOT_IMPLICATION , i18nc("Blending mode - NOT IMPLICATION", "NOT IMPLICATION")));
58 m_map.insert(m_categories[1], KoID(COMPOSITE_CONVERSE , i18nc("Blending mode - CONVERSE", "CONVERSE")));
59 m_map.insert(m_categories[1], KoID(COMPOSITE_NOT_CONVERSE , i18nc("Blending mode - NOT CONVERSE", "NOT CONVERSE")));
60
61 m_map.insert(m_categories[2], KoID(COMPOSITE_BURN , i18nc("Blending mode - Burn", "Burn")));
62 m_map.insert(m_categories[2], KoID(COMPOSITE_LINEAR_BURN, i18nc("Blending mode - Linear Burn", "Linear Burn")));
63 m_map.insert(m_categories[2], KoID(COMPOSITE_DARKEN , i18nc("Blending mode - Darken", "Darken")));
64 m_map.insert(m_categories[2], KoID(COMPOSITE_GAMMA_DARK , i18nc("Blending mode - Gamma Dark", "Gamma Dark")));
65 m_map.insert(m_categories[2], KoID(COMPOSITE_DARKER_COLOR , i18nc("Blending mode - Darker Color", "Darker Color")));
66 m_map.insert(m_categories[2], KoID(COMPOSITE_SHADE_IFS_ILLUSIONS, i18nc("Blending mode - Shade (IFS Illusions)", "Shade (IFS Illusions)")));
67 m_map.insert(m_categories[2], KoID(COMPOSITE_FOG_DARKEN_IFS_ILLUSIONS, i18nc("Blending mode - Fog Darken (IFS Illusions)", "Fog Darken (IFS Illusions)")));
68 m_map.insert(m_categories[2], KoID(COMPOSITE_EASY_BURN , i18nc("Blending mode - Easy Burn", "Easy Burn")));
69
70 m_map.insert(m_categories[3], KoID(COMPOSITE_DODGE , i18nc("Blending mode - Color Dodge", "Color Dodge")));
71 m_map.insert(m_categories[3], KoID(COMPOSITE_DODGE_HDR , i18nc("Blending mode - Color Dodge HDR", "Color Dodge HDR")));
72 m_map.insert(m_categories[3], KoID(COMPOSITE_LINEAR_DODGE, i18nc("Blending mode - Linear Dodge", "Linear Dodge")));
73 m_map.insert(m_categories[3], KoID(COMPOSITE_LIGHTEN , i18nc("Blending mode - Lighten", "Lighten")));
74 m_map.insert(m_categories[3], KoID(COMPOSITE_LINEAR_LIGHT, i18nc("Blending mode - Linear Light", "Linear Light")));
75 m_map.insert(m_categories[3], KoID(COMPOSITE_SCREEN , i18nc("Blending mode - Screen", "Screen")));
76 m_map.insert(m_categories[3], KoID(COMPOSITE_PIN_LIGHT , i18nc("Blending mode - Pin Light", "Pin Light")));
77 m_map.insert(m_categories[3], KoID(COMPOSITE_VIVID_LIGHT , i18nc("Blending mode - Vivid Light", "Vivid Light")));
78 m_map.insert(m_categories[3], KoID(COMPOSITE_VIVID_LIGHT_HDR , i18nc("Blending mode - Vivid Light HDR", "Vivid Light HDR")));
79 m_map.insert(m_categories[3], KoID(COMPOSITE_FLAT_LIGHT , i18nc("Blending mode - Flat Light", "Flat Light")));
80 m_map.insert(m_categories[3], KoID(COMPOSITE_HARD_LIGHT , i18nc("Blending mode - Hard Light", "Hard Light")));
81 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS, i18nc("Blending mode - Soft Light (IFS Illusions)", "Soft Light (IFS Illusions)")));
82 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_PEGTOP_DELPHI, i18nc("Blending mode - Soft Light (Pegtop-Delphi)", "Soft Light (Pegtop-Delphi)")));
83 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_PHOTOSHOP, i18nc("Blending mode - Soft Light (Photoshop)", "Soft Light (Photoshop)")));
84 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_SVG, i18nc("Blending mode - Soft Light (SVG)", "Soft Light (SVG)")));
85 m_map.insert(m_categories[3], KoID(COMPOSITE_GAMMA_LIGHT , i18nc("Blending mode - Gamma Light", "Gamma Light")));
86 m_map.insert(m_categories[3], KoID(COMPOSITE_GAMMA_ILLUMINATION , i18nc("Blending mode - Gamma Illumination", "Gamma Illumination")));
87 m_map.insert(m_categories[3], KoID(COMPOSITE_LIGHTER_COLOR , i18nc("Blending mode - Lighter Color", "Lighter Color")));
88 m_map.insert(m_categories[3], KoID(COMPOSITE_PNORM_A , i18nc("Blending mode - P-Norm A", "P-Norm A")));
89 m_map.insert(m_categories[3], KoID(COMPOSITE_PNORM_B , i18nc("Blending mode - P-Norm B", "P-Norm B")));
90 m_map.insert(m_categories[3], KoID(COMPOSITE_SUPER_LIGHT , i18nc("Blending mode - Super Light", "Super Light")));
91 m_map.insert(m_categories[3], KoID(COMPOSITE_TINT_IFS_ILLUSIONS, i18nc("Blending mode - Tint (IFS Illusions)", "Tint (IFS Illusions)")));
92 m_map.insert(m_categories[3], KoID(COMPOSITE_FOG_LIGHTEN_IFS_ILLUSIONS, i18nc("Blending mode - Fog Lighten (IFS Illusions)", "Fog Lighten (IFS Illusions)")));
93 m_map.insert(m_categories[3], KoID(COMPOSITE_EASY_DODGE , i18nc("Blending mode - Easy Dodge", "Easy Dodge")));
94 m_map.insert(m_categories[3], KoID(COMPOSITE_LUMINOSITY_SAI , i18nc("Blending mode - Luminosity/Shine (SAI)", "Luminosity/Shine (SAI)")));
95
96 m_map.insert(m_categories[4], KoID(COMPOSITE_MOD , i18nc("Blending mode - Modulo", "Modulo")));
97 m_map.insert(m_categories[4], KoID(COMPOSITE_MOD_CON , i18nc("Blending mode - Modulo - Continuous", "Modulo - Continuous")));
98 m_map.insert(m_categories[4], KoID(COMPOSITE_DIVISIVE_MOD , i18nc("Blending mode - Divisive Modulo", "Divisive Modulo")));
99 m_map.insert(m_categories[4], KoID(COMPOSITE_DIVISIVE_MOD_CON , i18nc("Blending mode - Divisive Modulo - Continuous", "Divisive Modulo - Continuous")));
100 m_map.insert(m_categories[4], KoID(COMPOSITE_MODULO_SHIFT , i18nc("Blending mode - Modulo Shift", "Modulo Shift")));
101 m_map.insert(m_categories[4], KoID(COMPOSITE_MODULO_SHIFT_CON , i18nc("Blending mode - Modulo Shift - Continuous", "Modulo Shift - Continuous")));
102
103 m_map.insert(m_categories[5], KoID(COMPOSITE_DIFF , i18nc("Blending mode - Difference", "Difference")));
104 m_map.insert(m_categories[5], KoID(COMPOSITE_EQUIVALENCE , i18nc("Blending mode - Equivalence", "Equivalence")));
105 m_map.insert(m_categories[5], KoID(COMPOSITE_ADDITIVE_SUBTRACTIVE , i18nc("Blending mode - Additive Subtractive", "Additive Subtractive")));
106 m_map.insert(m_categories[5], KoID(COMPOSITE_EXCLUSION , i18nc("Blending mode - Exclusion", "Exclusion")));
107 m_map.insert(m_categories[5], KoID(COMPOSITE_ARC_TANGENT , i18nc("Blending mode - Arcus Tangent", "Arcus Tangent")));
108 m_map.insert(m_categories[5], KoID(COMPOSITE_NEGATION , i18nc("Blending mode - Negation", "Negation")));
109
111 m_map.insert(m_categories[6], KoID(COMPOSITE_BEHIND , i18nc("Blending mode - Behind", "Behind")));
112 m_map.insert(m_categories[6], KoID(COMPOSITE_GREATER , i18nc("Blending mode - Greater", "Greater")));
113 m_map.insert(m_categories[6], KoID(COMPOSITE_OVERLAY , i18nc("Blending mode - Overlay", "Overlay")));
114 m_map.insert(m_categories[6], KoID(COMPOSITE_LAMBERT_LIGHTING, i18nc("Blending mode - Lambert Lighting (Linear)", "Lambert Lighting (Linear)")));
115 m_map.insert(m_categories[6], KoID(COMPOSITE_LAMBERT_LIGHTING_GAMMA_2_2, i18nc("Blending mode - Lambert Lighting (Gamma 2.2)", "Lambert Lighting (Gamma 2.2)")));
116 m_map.insert(m_categories[6], KoID(COMPOSITE_ERASE , i18nc("Blending mode - Erase", "Erase")));
117 m_map.insert(m_categories[6], KoID(COMPOSITE_ALPHA_DARKEN , i18nc("Blending mode - Alpha Darken", "Alpha Darken")));
118 m_map.insert(m_categories[6], KoID(COMPOSITE_MARKER , i18nc("Blending mode - Marker", "Marker")));
119 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX , i18nc("Blending mode - Hard Mix", "Hard Mix")));
120 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX_HDR , i18nc("Blending mode - Hard Mix HDR", "Hard Mix HDR")));
121 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX_PHOTOSHOP, i18nc("Blending mode - Hard Mix (Photoshop)", "Hard Mix (Photoshop)")));
122 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP, i18nc("Blending mode - Hard Mix Softer (Photoshop)", "Hard Mix Softer (Photoshop)")));
123 m_map.insert(m_categories[6], KoID(COMPOSITE_GRAIN_MERGE , i18nc("Blending mode - Grain Merge", "Grain Merge")));
124 m_map.insert(m_categories[6], KoID(COMPOSITE_GRAIN_EXTRACT , i18nc("Blending mode - Grain Extract", "Grain Extract")));
125 m_map.insert(m_categories[6], KoID(COMPOSITE_PARALLEL , i18nc("Blending mode - Parallel", "Parallel")));
126 m_map.insert(m_categories[6], KoID(COMPOSITE_ALLANON , i18nc("Blending mode - Allanon", "Allanon")));
127 m_map.insert(m_categories[6], KoID(COMPOSITE_GEOMETRIC_MEAN , i18nc("Blending mode - Geometric Mean", "Geometric Mean")));
128 m_map.insert(m_categories[6], KoID(COMPOSITE_DESTINATION_ATOP, i18nc("Blending mode - Destination Atop", "Destination Atop")));
129 m_map.insert(m_categories[6], KoID(COMPOSITE_DESTINATION_IN , i18nc("Blending mode - Destination In", "Destination In")));
130 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_OVERLAY , i18nc("Blending mode - Hard Overlay", "Hard Overlay")));
131 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_OVERLAY_HDR, i18nc("Blending mode - Hard Overlay HDR", "Hard Overlay HDR")));
132 m_map.insert(m_categories[6], KoID(COMPOSITE_INTERPOLATION , i18nc("Blending mode - Interpolation", "Interpolation")));
133 m_map.insert(m_categories[6], KoID(COMPOSITE_INTERPOLATIONB , i18nc("Blending mode - Interpolation - 2X", "Interpolation - 2X")));
134 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAA , i18nc("Blending mode - Penumbra A", "Penumbra A")));
135 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAB , i18nc("Blending mode - Penumbra B", "Penumbra B")));
136 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAC , i18nc("Blending mode - Penumbra C", "Penumbra C")));
137 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAD , i18nc("Blending mode - Penumbra D", "Penumbra D")));
138
139 m_map.insert(m_categories[7], KoID(COMPOSITE_BUMPMAP , i18nc("Blending mode - Bumpmap", "Bumpmap")));
140 m_map.insert(m_categories[7], KoID(COMPOSITE_COMBINE_NORMAL, i18nc("Blending mode - Combine Normal Map", "Combine Normal Map")));
141 m_map.insert(m_categories[7], KoID(COMPOSITE_DISSOLVE , i18nc("Blending mode - Dissolve", "Dissolve")));
142 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY_RED , i18nc("Blending mode - Copy Red", "Copy Red")));
143 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY_GREEN, i18nc("Blending mode - Copy Green", "Copy Green")));
144 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY_BLUE , i18nc("Blending mode - Copy Blue", "Copy Blue")));
145 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY , i18nc("Blending mode - Copy", "Copy")));
146 m_map.insert(m_categories[7], KoID(COMPOSITE_TANGENT_NORMALMAP, i18nc("Blending mode - Tangent Normalmap", "Tangent Normalmap")));
147
148 m_map.insert(m_categories[8], KoID(COMPOSITE_COLOR , i18nc("Blending mode - Color HSY", "Color")));
149 m_map.insert(m_categories[8], KoID(COMPOSITE_HUE , i18nc("Blending mode - Hue HSY", "Hue")));
150 m_map.insert(m_categories[8], KoID(COMPOSITE_TINT , i18nc("Blending mode - Tint HSY", "Tint")));
151 m_map.insert(m_categories[8], KoID(COMPOSITE_SATURATION , i18nc("Blending mode - Saturation HSY", "Saturation")));
152 m_map.insert(m_categories[8], KoID(COMPOSITE_LUMINIZE , i18nc("Blending mode - Luminosity HSY", "Luminosity")));
153 m_map.insert(m_categories[8], KoID(COMPOSITE_DEC_SATURATION, i18nc("Blending mode - Decrease Saturation HSY", "Decrease Saturation")));
154 m_map.insert(m_categories[8], KoID(COMPOSITE_INC_SATURATION, i18nc("Blending mode - Increase Saturation HSY", "Increase Saturation")));
155 m_map.insert(m_categories[8], KoID(COMPOSITE_DEC_LUMINOSITY, i18nc("Blending mode - Decrease Luminosity HSY", "Decrease Luminosity")));
156 m_map.insert(m_categories[8], KoID(COMPOSITE_INC_LUMINOSITY, i18nc("Blending mode - Increase Luminosity HSY", "Increase Luminosity")));
157
158 m_map.insert(m_categories[9], KoID(COMPOSITE_COLOR_HSI , i18nc("Blending mode - Color HSI", "Color HSI")));
159 m_map.insert(m_categories[9], KoID(COMPOSITE_HUE_HSI , i18nc("Blending mode - Hue HSI", "Hue HSI")));
160 m_map.insert(m_categories[9], KoID(COMPOSITE_SATURATION_HSI , i18nc("Blending mode - Saturation HSI", "Saturation HSI")));
161 m_map.insert(m_categories[9], KoID(COMPOSITE_INTENSITY , i18nc("Blending mode - Intensity HSI", "Intensity")));
162 m_map.insert(m_categories[9], KoID(COMPOSITE_DEC_SATURATION_HSI, i18nc("Blending mode - Decrease Saturation HSI", "Decrease Saturation HSI")));
163 m_map.insert(m_categories[9], KoID(COMPOSITE_INC_SATURATION_HSI, i18nc("Blending mode - Increase Saturation HSI", "Increase Saturation HSI")));
164 m_map.insert(m_categories[9], KoID(COMPOSITE_DEC_INTENSITY , i18nc("Blending mode - Decrease Intensity", "Decrease Intensity")));
165 m_map.insert(m_categories[9], KoID(COMPOSITE_INC_INTENSITY , i18nc("Blending mode - Increase Intensity", "Increase Intensity")));
166
167 m_map.insert(m_categories[10], KoID(COMPOSITE_COLOR_HSL , i18nc("Blending mode - Color HSL", "Color HSL")));
168 m_map.insert(m_categories[10], KoID(COMPOSITE_HUE_HSL , i18nc("Blending mode - Hue HSL", "Hue HSL")));
169 m_map.insert(m_categories[10], KoID(COMPOSITE_SATURATION_HSL , i18nc("Blending mode - Saturation HSL", "Saturation HSL")));
170 m_map.insert(m_categories[10], KoID(COMPOSITE_LIGHTNESS , i18nc("Blending mode - Lightness HSI", "Lightness")));
171 m_map.insert(m_categories[10], KoID(COMPOSITE_DEC_SATURATION_HSL, i18nc("Blending mode - Decrease Saturation HSL", "Decrease Saturation HSL")));
172 m_map.insert(m_categories[10], KoID(COMPOSITE_INC_SATURATION_HSL, i18nc("Blending mode - Increase Saturation HSL", "Increase Saturation HSL")));
173 m_map.insert(m_categories[10], KoID(COMPOSITE_DEC_LIGHTNESS , i18nc("Blending mode - Decrease Lightness", "Decrease Lightness")));
174 m_map.insert(m_categories[10], KoID(COMPOSITE_INC_LIGHTNESS , i18nc("Blending mode - Increase Lightness", "Increase Lightness")));
175
176 m_map.insert(m_categories[11], KoID(COMPOSITE_COLOR_HSV , i18nc("Blending mode - Color HSV", "Color HSV")));
177 m_map.insert(m_categories[11], KoID(COMPOSITE_HUE_HSV , i18nc("Blending mode - Hue HSV", "Hue HSV")));
178 m_map.insert(m_categories[11], KoID(COMPOSITE_SATURATION_HSV , i18nc("Blending mode - Saturation HSV", "Saturation HSV")));
179 m_map.insert(m_categories[11], KoID(COMPOSITE_VALUE , i18nc("Blending mode - Value HSV", "Value")));
180 m_map.insert(m_categories[11], KoID(COMPOSITE_DEC_SATURATION_HSV, i18nc("Blending mode - Decrease Saturation HSV", "Decrease Saturation HSV")));
181 m_map.insert(m_categories[11], KoID(COMPOSITE_INC_SATURATION_HSV, i18nc("Blending mode - Increase Saturation HSV", "Increase Saturation HSV")));
182 m_map.insert(m_categories[11], KoID(COMPOSITE_DEC_VALUE , i18nc("Blending mode - Decrease Value HSV", "Decrease Value")));
183 m_map.insert(m_categories[11], KoID(COMPOSITE_INC_VALUE , i18nc("Blending mode - Increase Value HSV", "Increase Value")));
184
185 m_map.insert(m_categories[12], KoID(COMPOSITE_REFLECT , i18nc("Blending mode - Reflect", "Reflect")));
186 m_map.insert(m_categories[12], KoID(COMPOSITE_GLOW , i18nc("Blending mode - Glow", "Glow")));
187 m_map.insert(m_categories[12], KoID(COMPOSITE_FREEZE , i18nc("Blending mode - Freeze", "Freeze")));
188 m_map.insert(m_categories[12], KoID(COMPOSITE_HEAT , i18nc("Blending mode - Heat", "Heat")));
189 m_map.insert(m_categories[12], KoID(COMPOSITE_GLEAT , i18nc("Blending mode - Glow-Heat", "Glow-Heat")));
190 m_map.insert(m_categories[12], KoID(COMPOSITE_HELOW , i18nc("Blending mode - Heat-Glow", "Heat-Glow")));
191 m_map.insert(m_categories[12], KoID(COMPOSITE_REEZE , i18nc("Blending mode - Reflect-Freeze", "Reflect-Freeze")));
192 m_map.insert(m_categories[12], KoID(COMPOSITE_FRECT , i18nc("Blending mode - Freeze-Reflect", "Freeze-Reflect")));
193 m_map.insert(m_categories[12], KoID(COMPOSITE_FHYRD , i18nc("Blending mode - Heat-Glow & Freeze-Reflect Hybrid", "Heat-Glow & Freeze-Reflect Hybrid")));
194}
195
197{
198 return *registry;
199}
200
205
206KoID KoCompositeOpRegistry::getKoID(const QString& compositeOpID) const
207{
208 KoIDMap::const_iterator itr = std::find(m_map.begin(), m_map.end(), KoID(compositeOpID));
209 return (itr != m_map.end()) ? *itr : KoID();
210}
211
212QString KoCompositeOpRegistry::getCompositeOpDisplayName(const QString& compositeOpID) const
213{
214 // In and Out are created in lcms2engine but not registered in KoCompositeOpRegistry.
215 // FIXME: Change these to use i18nc with context?
216 if (compositeOpID == COMPOSITE_IN) {
217 return i18n("In");
218 } else if (compositeOpID == COMPOSITE_OUT) {
219 return i18n("Out");
220 }
221
222 const QString name = getKoID(compositeOpID).name();
223 if (name.isNull()) {
224 warnPigment << "Got null display name for composite op" << compositeOpID;
225 return compositeOpID;
226 }
227 return name;
228}
229
234
236{
238
239 // not available via the blending modes list in Krita
240 // ids << COMPOSITE_PASS_THROUGH;
241
242 ids << COMPOSITE_OVER;
243 ids << COMPOSITE_DISSOLVE;
244 ids << COMPOSITE_DARKEN;
245 ids << COMPOSITE_MULT;
246 ids << COMPOSITE_BURN;
249 ids << COMPOSITE_LIGHTEN;
250 ids << COMPOSITE_SCREEN;
251 ids << COMPOSITE_DODGE;
254 ids << COMPOSITE_OVERLAY;
259 ids << COMPOSITE_PIN_LIGHT;
261 ids << COMPOSITE_DIFF;
262 ids << COMPOSITE_EXCLUSION;
263 ids << COMPOSITE_SUBTRACT;
264 ids << COMPOSITE_DIVIDE;
265 ids << COMPOSITE_HUE;
267 ids << COMPOSITE_COLOR;
268 ids << COMPOSITE_LUMINIZE;
269
270 KoIDMap result;
271 Q_FOREACH (const QString &id, ids) {
272 KoIDMap::const_iterator iter = std::find(m_map.begin(), m_map.end(), KoID(id));
273 KIS_SAFE_ASSERT_RECOVER(iter != m_map.end()) { continue; }
274
275 result.insert(iter.key(), iter.value());
276 }
277
278 return result;
279}
280
285
286QString KoCompositeOpRegistry::getCategoryDisplayName(const QString& categoryID) const
287{
288 KoIDList::const_iterator itr = std::find(m_categories.begin(), m_categories.end(), KoID(categoryID));
289 const QString name = (itr != m_categories.end()) ? itr->name() : QString();
290 if (name.isNull()) {
291 warnPigment << "Got null display name for composite op category" << categoryID;
292 return categoryID;
293 }
294 return name;
295}
296
298{
299 qint32 num = m_map.count(category);
300 KoIDMap::const_iterator beg = m_map.find(category);
301 KoIDMap::const_iterator end = beg + num;
302
303 KoIDList list;
304 list.reserve(num);
305
306 if(colorSpace) {
307 for(; beg!=end; ++beg){
308 if(colorSpace->hasCompositeOp(beg->id()))
309 list.push_back(*beg);
310 }
311 }
312 else {
313 for(; beg!=end; ++beg)
314 list.push_back(*beg);
315 }
316
317 return list;
318}
319
321{
322 KoIDMap::const_iterator beg = m_map.begin();
323 KoIDMap::const_iterator end = m_map.end();
324
325 KoIDList list;
326 list.reserve(m_map.size());
327
328 if(colorSpace) {
329 for(; beg!=end; ++beg){
330 if(colorSpace->hasCompositeOp(beg->id()))
331 list.push_back(*beg);
332 }
333 }
334 else {
335 for(; beg!=end; ++beg)
336 list.push_back(*beg);
337 }
338
339 return list;
340}
341
342bool KoCompositeOpRegistry::colorSpaceHasCompositeOp(const KoColorSpace* colorSpace, const KoID& compositeOp) const
343{
344 return colorSpace ? colorSpace->hasCompositeOp(compositeOp.id()) : false;
345}
#define warnPigment
Q_GLOBAL_STATIC(KisStoragePluginRegistry, s_instance)
static KoID koidCompositeOverStatic()
const QString COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS
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_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_DESTINATION_ATOP
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_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_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_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_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
virtual bool hasCompositeOp(const QString &id, const KoColorSpace *srcSpace=nullptr) const
QMultiMap< KoID, KoID > KoIDMap
QString getCategoryDisplayName(const QString &categoryID) const
QString getCompositeOpDisplayName(const QString &compositeOpID) const
static const KoCompositeOpRegistry & instance()
KoIDMap getLayerStylesCompositeOps() const
KoID getKoID(const QString &compositeOpID) const
bool colorSpaceHasCompositeOp(const KoColorSpace *colorSpace, const KoID &compositeOp) const
Definition KoID.h:30
QString name() const
Definition KoID.cpp:68
QString id() const
Definition KoID.cpp:63
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126