File indexing completed on 2024-05-12 15:59:36
0001 /* 0002 * SPDX-FileCopyrightText: 2005 Adrian Page <adrian@pagenet.plus.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "KoCompositeOpRegistry.h" 0008 0009 #include <QGlobalStatic> 0010 #include <QList> 0011 0012 #include <klocalizedstring.h> 0013 0014 #include <KoID.h> 0015 #include "KoCompositeOp.h" 0016 #include "KoColorSpace.h" 0017 0018 #include "kis_assert.h" 0019 #include "DebugPigment.h" 0020 0021 Q_GLOBAL_STATIC(KoCompositeOpRegistry, registry) 0022 0023 static KoID koidCompositeOverStatic() { 0024 static const KoID compositeOver(COMPOSITE_OVER, i18nc("Blending mode - Normal", "Normal")); 0025 return compositeOver; 0026 } 0027 0028 KoCompositeOpRegistry::KoCompositeOpRegistry() 0029 { 0030 m_categories 0031 << KoID("arithmetic", i18nc("Blending mode - category Arithmetic", "Arithmetic")) 0032 << KoID("binary" , i18nc("Blending mode - category Binary", "Binary")) 0033 << KoID("dark" , i18nc("Blending mode - category Darken", "Darken")) 0034 << KoID("light" , i18nc("Blending mode - category Lighten", "Lighten")) 0035 << KoID("modulo" , i18nc("Blending mode - category Modulo", "Modulo")) 0036 << KoID("negative" , i18nc("Blending mode - category Negative", "Negative")) 0037 << KoID("mix" , i18nc("Blending mode - category Mix", "Mix")) 0038 << KoID("misc" , i18nc("Blending mode - category Misc", "Misc")) 0039 << KoID("hsy" , i18nc("Blending mode - category HSY", "HSY")) 0040 << KoID("hsi" , i18nc("Blending mode - category HSI", "HSI")) 0041 << KoID("hsl" , i18nc("Blending mode - category HSL", "HSL")) 0042 << KoID("hsv" , i18nc("Blending mode - category HSV", "HSV")) 0043 << KoID("quadratic" , i18nc("Blending mode - category Quadratic", "Quadratic")); 0044 0045 m_map.insert(m_categories[0], KoID(COMPOSITE_ADD , i18nc("Blending mode - Addition", "Addition"))); 0046 m_map.insert(m_categories[0], KoID(COMPOSITE_SUBTRACT , i18nc("Blending mode - Subtract", "Subtract"))); 0047 m_map.insert(m_categories[0], KoID(COMPOSITE_MULT , i18nc("Blending mode - Multiply", "Multiply"))); 0048 m_map.insert(m_categories[0], KoID(COMPOSITE_DIVIDE , i18nc("Blending mode - Divide", "Divide"))); 0049 m_map.insert(m_categories[0], KoID(COMPOSITE_INVERSE_SUBTRACT, i18nc("Blending mode - Inverse Subtract", "Inverse Subtract"))); 0050 0051 m_map.insert(m_categories[1], KoID(COMPOSITE_XOR , i18nc("Blending mode - XOR", "XOR"))); 0052 m_map.insert(m_categories[1], KoID(COMPOSITE_OR , i18nc("Blending mode - OR", "OR"))); 0053 m_map.insert(m_categories[1], KoID(COMPOSITE_AND , i18nc("Blending mode - AND", "AND"))); 0054 m_map.insert(m_categories[1], KoID(COMPOSITE_NAND , i18nc("Blending mode - NAND", "NAND"))); 0055 m_map.insert(m_categories[1], KoID(COMPOSITE_NOR , i18nc("Blending mode - NOR", "NOR"))); 0056 m_map.insert(m_categories[1], KoID(COMPOSITE_XNOR , i18nc("Blending mode - XNOR", "XNOR"))); 0057 m_map.insert(m_categories[1], KoID(COMPOSITE_IMPLICATION , i18nc("Blending mode - IMPLICATION", "IMPLICATION"))); 0058 m_map.insert(m_categories[1], KoID(COMPOSITE_NOT_IMPLICATION , i18nc("Blending mode - NOT IMPLICATION", "NOT IMPLICATION"))); 0059 m_map.insert(m_categories[1], KoID(COMPOSITE_CONVERSE , i18nc("Blending mode - CONVERSE", "CONVERSE"))); 0060 m_map.insert(m_categories[1], KoID(COMPOSITE_NOT_CONVERSE , i18nc("Blending mode - NOT CONVERSE", "NOT CONVERSE"))); 0061 0062 m_map.insert(m_categories[2], KoID(COMPOSITE_BURN , i18nc("Blending mode - Burn", "Burn"))); 0063 m_map.insert(m_categories[2], KoID(COMPOSITE_LINEAR_BURN, i18nc("Blending mode - Linear Burn", "Linear Burn"))); 0064 m_map.insert(m_categories[2], KoID(COMPOSITE_DARKEN , i18nc("Blending mode - Darken", "Darken"))); 0065 m_map.insert(m_categories[2], KoID(COMPOSITE_GAMMA_DARK , i18nc("Blending mode - Gamma Dark", "Gamma Dark"))); 0066 m_map.insert(m_categories[2], KoID(COMPOSITE_DARKER_COLOR , i18nc("Blending mode - Darker Color", "Darker Color"))); 0067 m_map.insert(m_categories[2], KoID(COMPOSITE_SHADE_IFS_ILLUSIONS, i18nc("Blending mode - Shade (IFS Illusions)", "Shade (IFS Illusions)"))); 0068 m_map.insert(m_categories[2], KoID(COMPOSITE_FOG_DARKEN_IFS_ILLUSIONS, i18nc("Blending mode - Fog Darken (IFS Illusions)", "Fog Darken (IFS Illusions)"))); 0069 m_map.insert(m_categories[2], KoID(COMPOSITE_EASY_BURN , i18nc("Blending mode - Easy Burn", "Easy Burn"))); 0070 0071 m_map.insert(m_categories[3], KoID(COMPOSITE_DODGE , i18nc("Blending mode - Color Dodge", "Color Dodge"))); 0072 m_map.insert(m_categories[3], KoID(COMPOSITE_LINEAR_DODGE, i18nc("Blending mode - Linear Dodge", "Linear Dodge"))); 0073 m_map.insert(m_categories[3], KoID(COMPOSITE_LIGHTEN , i18nc("Blending mode - Lighten", "Lighten"))); 0074 m_map.insert(m_categories[3], KoID(COMPOSITE_LINEAR_LIGHT, i18nc("Blending mode - Linear Light", "Linear Light"))); 0075 m_map.insert(m_categories[3], KoID(COMPOSITE_SCREEN , i18nc("Blending mode - Screen", "Screen"))); 0076 m_map.insert(m_categories[3], KoID(COMPOSITE_PIN_LIGHT , i18nc("Blending mode - Pin Light", "Pin Light"))); 0077 m_map.insert(m_categories[3], KoID(COMPOSITE_VIVID_LIGHT , i18nc("Blending mode - Vivid Light", "Vivid Light"))); 0078 m_map.insert(m_categories[3], KoID(COMPOSITE_FLAT_LIGHT , i18nc("Blending mode - Flat Light", "Flat Light"))); 0079 m_map.insert(m_categories[3], KoID(COMPOSITE_HARD_LIGHT , i18nc("Blending mode - Hard Light", "Hard Light"))); 0080 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_IFS_ILLUSIONS, i18nc("Blending mode - Soft Light (IFS Illusions)", "Soft Light (IFS Illusions)"))); 0081 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_PEGTOP_DELPHI, i18nc("Blending mode - Soft Light (Pegtop-Delphi)", "Soft Light (Pegtop-Delphi)"))); 0082 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_PHOTOSHOP, i18nc("Blending mode - Soft Light (Photoshop)", "Soft Light (Photoshop)"))); 0083 m_map.insert(m_categories[3], KoID(COMPOSITE_SOFT_LIGHT_SVG, i18nc("Blending mode - Soft Light (SVG)", "Soft Light (SVG)"))); 0084 m_map.insert(m_categories[3], KoID(COMPOSITE_GAMMA_LIGHT , i18nc("Blending mode - Gamma Light", "Gamma Light"))); 0085 m_map.insert(m_categories[3], KoID(COMPOSITE_GAMMA_ILLUMINATION , i18nc("Blending mode - Gamma Illumination", "Gamma Illumination"))); 0086 m_map.insert(m_categories[3], KoID(COMPOSITE_LIGHTER_COLOR , i18nc("Blending mode - Lighter Color", "Lighter Color"))); 0087 m_map.insert(m_categories[3], KoID(COMPOSITE_PNORM_A , i18nc("Blending mode - P-Norm A", "P-Norm A"))); 0088 m_map.insert(m_categories[3], KoID(COMPOSITE_PNORM_B , i18nc("Blending mode - P-Norm B", "P-Norm B"))); 0089 m_map.insert(m_categories[3], KoID(COMPOSITE_SUPER_LIGHT , i18nc("Blending mode - Super Light", "Super Light"))); 0090 m_map.insert(m_categories[3], KoID(COMPOSITE_TINT_IFS_ILLUSIONS, i18nc("Blending mode - Tint (IFS Illusions)", "Tint (IFS Illusions)"))); 0091 m_map.insert(m_categories[3], KoID(COMPOSITE_FOG_LIGHTEN_IFS_ILLUSIONS, i18nc("Blending mode - Fog Lighten (IFS Illusions)", "Fog Lighten (IFS Illusions)"))); 0092 m_map.insert(m_categories[3], KoID(COMPOSITE_EASY_DODGE , i18nc("Blending mode - Easy Dodge", "Easy Dodge"))); 0093 m_map.insert(m_categories[3], KoID(COMPOSITE_LUMINOSITY_SAI , i18nc("Blending mode - Luminosity/Shine (SAI)", "Luminosity/Shine (SAI)"))); 0094 0095 m_map.insert(m_categories[4], KoID(COMPOSITE_MOD , i18nc("Blending mode - Modulo", "Modulo"))); 0096 m_map.insert(m_categories[4], KoID(COMPOSITE_MOD_CON , i18nc("Blending mode - Modulo - Continuous", "Modulo - Continuous"))); 0097 m_map.insert(m_categories[4], KoID(COMPOSITE_DIVISIVE_MOD , i18nc("Blending mode - Divisive Modulo", "Divisive Modulo"))); 0098 m_map.insert(m_categories[4], KoID(COMPOSITE_DIVISIVE_MOD_CON , i18nc("Blending mode - Divisive Modulo - Continuous", "Divisive Modulo - Continuous"))); 0099 m_map.insert(m_categories[4], KoID(COMPOSITE_MODULO_SHIFT , i18nc("Blending mode - Modulo Shift", "Modulo Shift"))); 0100 m_map.insert(m_categories[4], KoID(COMPOSITE_MODULO_SHIFT_CON , i18nc("Blending mode - Modulo Shift - Continuous", "Modulo Shift - Continuous"))); 0101 0102 m_map.insert(m_categories[5], KoID(COMPOSITE_DIFF , i18nc("Blending mode - Difference", "Difference"))); 0103 m_map.insert(m_categories[5], KoID(COMPOSITE_EQUIVALENCE , i18nc("Blending mode - Equivalence", "Equivalence"))); 0104 m_map.insert(m_categories[5], KoID(COMPOSITE_ADDITIVE_SUBTRACTIVE , i18nc("Blending mode - Additive Subtractive", "Additive Subtractive"))); 0105 m_map.insert(m_categories[5], KoID(COMPOSITE_EXCLUSION , i18nc("Blending mode - Exclusion", "Exclusion"))); 0106 m_map.insert(m_categories[5], KoID(COMPOSITE_ARC_TANGENT , i18nc("Blending mode - Arcus Tangent", "Arcus Tangent"))); 0107 m_map.insert(m_categories[5], KoID(COMPOSITE_NEGATION , i18nc("Blending mode - Negation", "Negation"))); 0108 0109 m_map.insert(m_categories[6], koidCompositeOverStatic()); 0110 m_map.insert(m_categories[6], KoID(COMPOSITE_BEHIND , i18nc("Blending mode - Behind", "Behind"))); 0111 m_map.insert(m_categories[6], KoID(COMPOSITE_GREATER , i18nc("Blending mode - Greater", "Greater"))); 0112 m_map.insert(m_categories[6], KoID(COMPOSITE_OVERLAY , i18nc("Blending mode - Overlay", "Overlay"))); 0113 m_map.insert(m_categories[6], KoID(COMPOSITE_ERASE , i18nc("Blending mode - Erase", "Erase"))); 0114 m_map.insert(m_categories[6], KoID(COMPOSITE_ALPHA_DARKEN , i18nc("Blending mode - Alpha Darken", "Alpha Darken"))); 0115 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX , i18nc("Blending mode - Hard Mix", "Hard Mix"))); 0116 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX_PHOTOSHOP, i18nc("Blending mode - Hard Mix (Photoshop)", "Hard Mix (Photoshop)"))); 0117 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP, i18nc("Blending mode - Hard Mix Softer (Photoshop)", "Hard Mix Softer (Photoshop)"))); 0118 m_map.insert(m_categories[6], KoID(COMPOSITE_GRAIN_MERGE , i18nc("Blending mode - Grain Merge", "Grain Merge"))); 0119 m_map.insert(m_categories[6], KoID(COMPOSITE_GRAIN_EXTRACT , i18nc("Blending mode - Grain Extract", "Grain Extract"))); 0120 m_map.insert(m_categories[6], KoID(COMPOSITE_PARALLEL , i18nc("Blending mode - Parallel", "Parallel"))); 0121 m_map.insert(m_categories[6], KoID(COMPOSITE_ALLANON , i18nc("Blending mode - Allanon", "Allanon"))); 0122 m_map.insert(m_categories[6], KoID(COMPOSITE_GEOMETRIC_MEAN , i18nc("Blending mode - Geometric Mean", "Geometric Mean"))); 0123 m_map.insert(m_categories[6], KoID(COMPOSITE_DESTINATION_ATOP, i18nc("Blending mode - Destination Atop", "Destination Atop"))); 0124 m_map.insert(m_categories[6], KoID(COMPOSITE_DESTINATION_IN , i18nc("Blending mode - Destination In", "Destination In"))); 0125 m_map.insert(m_categories[6], KoID(COMPOSITE_HARD_OVERLAY , i18nc("Blending mode - Hard Overlay", "Hard Overlay"))); 0126 m_map.insert(m_categories[6], KoID(COMPOSITE_INTERPOLATION , i18nc("Blending mode - Interpolation", "Interpolation"))); 0127 m_map.insert(m_categories[6], KoID(COMPOSITE_INTERPOLATIONB , i18nc("Blending mode - Interpolation - 2X", "Interpolation - 2X"))); 0128 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAA , i18nc("Blending mode - Penumbra A", "Penumbra A"))); 0129 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAB , i18nc("Blending mode - Penumbra B", "Penumbra B"))); 0130 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAC , i18nc("Blending mode - Penumbra C", "Penumbra C"))); 0131 m_map.insert(m_categories[6], KoID(COMPOSITE_PENUMBRAD , i18nc("Blending mode - Penumbra D", "Penumbra D"))); 0132 0133 m_map.insert(m_categories[7], KoID(COMPOSITE_BUMPMAP , i18nc("Blending mode - Bumpmap", "Bumpmap"))); 0134 m_map.insert(m_categories[7], KoID(COMPOSITE_COMBINE_NORMAL, i18nc("Blending mode - Combine Normal Map", "Combine Normal Map"))); 0135 m_map.insert(m_categories[7], KoID(COMPOSITE_DISSOLVE , i18nc("Blending mode - Dissolve", "Dissolve"))); 0136 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY_RED , i18nc("Blending mode - Copy Red", "Copy Red"))); 0137 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY_GREEN, i18nc("Blending mode - Copy Green", "Copy Green"))); 0138 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY_BLUE , i18nc("Blending mode - Copy Blue", "Copy Blue"))); 0139 m_map.insert(m_categories[7], KoID(COMPOSITE_COPY , i18nc("Blending mode - Copy", "Copy"))); 0140 m_map.insert(m_categories[7], KoID(COMPOSITE_TANGENT_NORMALMAP, i18nc("Blending mode - Tangent Normalmap", "Tangent Normalmap"))); 0141 0142 m_map.insert(m_categories[8], KoID(COMPOSITE_COLOR , i18nc("Blending mode - Color HSY", "Color"))); 0143 m_map.insert(m_categories[8], KoID(COMPOSITE_HUE , i18nc("Blending mode - Hue HSY", "Hue"))); 0144 m_map.insert(m_categories[8], KoID(COMPOSITE_SATURATION , i18nc("Blending mode - Saturation HSY", "Saturation"))); 0145 m_map.insert(m_categories[8], KoID(COMPOSITE_LUMINIZE , i18nc("Blending mode - Luminosity HSY", "Luminosity"))); 0146 m_map.insert(m_categories[8], KoID(COMPOSITE_DEC_SATURATION, i18nc("Blending mode - Decrease Saturation HSY", "Decrease Saturation"))); 0147 m_map.insert(m_categories[8], KoID(COMPOSITE_INC_SATURATION, i18nc("Blending mode - Increase Saturation HSY", "Increase Saturation"))); 0148 m_map.insert(m_categories[8], KoID(COMPOSITE_DEC_LUMINOSITY, i18nc("Blending mode - Decrease Luminosity HSY", "Decrease Luminosity"))); 0149 m_map.insert(m_categories[8], KoID(COMPOSITE_INC_LUMINOSITY, i18nc("Blending mode - Increase Luminosity HSY", "Increase Luminosity"))); 0150 0151 m_map.insert(m_categories[9], KoID(COMPOSITE_COLOR_HSI , i18nc("Blending mode - Color HSI", "Color HSI"))); 0152 m_map.insert(m_categories[9], KoID(COMPOSITE_HUE_HSI , i18nc("Blending mode - Hue HSI", "Hue HSI"))); 0153 m_map.insert(m_categories[9], KoID(COMPOSITE_SATURATION_HSI , i18nc("Blending mode - Saturation HSI", "Saturation HSI"))); 0154 m_map.insert(m_categories[9], KoID(COMPOSITE_INTENSITY , i18nc("Blending mode - Intensity HSI", "Intensity"))); 0155 m_map.insert(m_categories[9], KoID(COMPOSITE_DEC_SATURATION_HSI, i18nc("Blending mode - Decrease Saturation HSI", "Decrease Saturation HSI"))); 0156 m_map.insert(m_categories[9], KoID(COMPOSITE_INC_SATURATION_HSI, i18nc("Blending mode - Increase Saturation HSI", "Increase Saturation HSI"))); 0157 m_map.insert(m_categories[9], KoID(COMPOSITE_DEC_INTENSITY , i18nc("Blending mode - Decrease Intensity", "Decrease Intensity"))); 0158 m_map.insert(m_categories[9], KoID(COMPOSITE_INC_INTENSITY , i18nc("Blending mode - Increase Intensity", "Increase Intensity"))); 0159 0160 m_map.insert(m_categories[10], KoID(COMPOSITE_COLOR_HSL , i18nc("Blending mode - Color HSL", "Color HSL"))); 0161 m_map.insert(m_categories[10], KoID(COMPOSITE_HUE_HSL , i18nc("Blending mode - Hue HSL", "Hue HSL"))); 0162 m_map.insert(m_categories[10], KoID(COMPOSITE_SATURATION_HSL , i18nc("Blending mode - Saturation HSL", "Saturation HSL"))); 0163 m_map.insert(m_categories[10], KoID(COMPOSITE_LIGHTNESS , i18nc("Blending mode - Lightness HSI", "Lightness"))); 0164 m_map.insert(m_categories[10], KoID(COMPOSITE_DEC_SATURATION_HSL, i18nc("Blending mode - Decrease Saturation HSL", "Decrease Saturation HSL"))); 0165 m_map.insert(m_categories[10], KoID(COMPOSITE_INC_SATURATION_HSL, i18nc("Blending mode - Increase Saturation HSL", "Increase Saturation HSL"))); 0166 m_map.insert(m_categories[10], KoID(COMPOSITE_DEC_LIGHTNESS , i18nc("Blending mode - Decrease Lightness", "Decrease Lightness"))); 0167 m_map.insert(m_categories[10], KoID(COMPOSITE_INC_LIGHTNESS , i18nc("Blending mode - Increase Lightness", "Increase Lightness"))); 0168 0169 m_map.insert(m_categories[11], KoID(COMPOSITE_COLOR_HSV , i18nc("Blending mode - Color HSV", "Color HSV"))); 0170 m_map.insert(m_categories[11], KoID(COMPOSITE_HUE_HSV , i18nc("Blending mode - Hue HSV", "Hue HSV"))); 0171 m_map.insert(m_categories[11], KoID(COMPOSITE_SATURATION_HSV , i18nc("Blending mode - Saturation HSV", "Saturation HSV"))); 0172 m_map.insert(m_categories[11], KoID(COMPOSITE_VALUE , i18nc("Blending mode - Value HSV", "Value"))); 0173 m_map.insert(m_categories[11], KoID(COMPOSITE_DEC_SATURATION_HSV, i18nc("Blending mode - Decrease Saturation HSV", "Decrease Saturation HSV"))); 0174 m_map.insert(m_categories[11], KoID(COMPOSITE_INC_SATURATION_HSV, i18nc("Blending mode - Increase Saturation HSV", "Increase Saturation HSV"))); 0175 m_map.insert(m_categories[11], KoID(COMPOSITE_DEC_VALUE , i18nc("Blending mode - Decrease Value HSV", "Decrease Value"))); 0176 m_map.insert(m_categories[11], KoID(COMPOSITE_INC_VALUE , i18nc("Blending mode - Increase Value HSV", "Increase Value"))); 0177 0178 m_map.insert(m_categories[12], KoID(COMPOSITE_REFLECT , i18nc("Blending mode - Reflect", "Reflect"))); 0179 m_map.insert(m_categories[12], KoID(COMPOSITE_GLOW , i18nc("Blending mode - Glow", "Glow"))); 0180 m_map.insert(m_categories[12], KoID(COMPOSITE_FREEZE , i18nc("Blending mode - Freeze", "Freeze"))); 0181 m_map.insert(m_categories[12], KoID(COMPOSITE_HEAT , i18nc("Blending mode - Heat", "Heat"))); 0182 m_map.insert(m_categories[12], KoID(COMPOSITE_GLEAT , i18nc("Blending mode - Glow-Heat", "Glow-Heat"))); 0183 m_map.insert(m_categories[12], KoID(COMPOSITE_HELOW , i18nc("Blending mode - Heat-Glow", "Heat-Glow"))); 0184 m_map.insert(m_categories[12], KoID(COMPOSITE_REEZE , i18nc("Blending mode - Reflect-Freeze", "Reflect-Freeze"))); 0185 m_map.insert(m_categories[12], KoID(COMPOSITE_FRECT , i18nc("Blending mode - Freeze-Reflect", "Freeze-Reflect"))); 0186 m_map.insert(m_categories[12], KoID(COMPOSITE_FHYRD , i18nc("Blending mode - Heat-Glow & Freeze-Reflect Hybrid", "Heat-Glow & Freeze-Reflect Hybrid"))); 0187 } 0188 0189 const KoCompositeOpRegistry& KoCompositeOpRegistry::instance() 0190 { 0191 return *registry; 0192 } 0193 0194 KoID KoCompositeOpRegistry::getDefaultCompositeOp() const 0195 { 0196 return koidCompositeOverStatic(); 0197 } 0198 0199 KoID KoCompositeOpRegistry::getKoID(const QString& compositeOpID) const 0200 { 0201 KoIDMap::const_iterator itr = std::find(m_map.begin(), m_map.end(), KoID(compositeOpID)); 0202 return (itr != m_map.end()) ? *itr : KoID(); 0203 } 0204 0205 QString KoCompositeOpRegistry::getCompositeOpDisplayName(const QString& compositeOpID) const 0206 { 0207 // In and Out are created in lcms2engine but not registered in KoCompositeOpRegistry. 0208 // FIXME: Change these to use i18nc with context? 0209 if (compositeOpID == COMPOSITE_IN) { 0210 return i18n("In"); 0211 } else if (compositeOpID == COMPOSITE_OUT) { 0212 return i18n("Out"); 0213 } 0214 0215 const QString name = getKoID(compositeOpID).name(); 0216 if (name.isNull()) { 0217 warnPigment << "Got null display name for composite op" << compositeOpID; 0218 return compositeOpID; 0219 } 0220 return name; 0221 } 0222 0223 KoCompositeOpRegistry::KoIDMap KoCompositeOpRegistry::getCompositeOps() const 0224 { 0225 return m_map; 0226 } 0227 0228 KoCompositeOpRegistry::KoIDMap KoCompositeOpRegistry::getLayerStylesCompositeOps() const 0229 { 0230 QVector<QString> ids; 0231 0232 // not available via the blending modes list in Krita 0233 // ids << COMPOSITE_PASS_THROUGH; 0234 0235 ids << COMPOSITE_OVER; 0236 ids << COMPOSITE_DISSOLVE; 0237 ids << COMPOSITE_DARKEN; 0238 ids << COMPOSITE_MULT; 0239 ids << COMPOSITE_BURN; 0240 ids << COMPOSITE_LINEAR_BURN; 0241 ids << COMPOSITE_DARKER_COLOR; 0242 ids << COMPOSITE_LIGHTEN; 0243 ids << COMPOSITE_SCREEN; 0244 ids << COMPOSITE_DODGE; 0245 ids << COMPOSITE_LINEAR_DODGE; 0246 ids << COMPOSITE_LIGHTER_COLOR; 0247 ids << COMPOSITE_OVERLAY; 0248 ids << COMPOSITE_SOFT_LIGHT_PHOTOSHOP; 0249 ids << COMPOSITE_HARD_LIGHT; 0250 ids << COMPOSITE_VIVID_LIGHT; 0251 ids << COMPOSITE_LINEAR_LIGHT; 0252 ids << COMPOSITE_PIN_LIGHT; 0253 ids << COMPOSITE_HARD_MIX_PHOTOSHOP; 0254 ids << COMPOSITE_HARD_MIX_SOFTER_PHOTOSHOP; 0255 ids << COMPOSITE_DIFF; 0256 ids << COMPOSITE_EXCLUSION; 0257 ids << COMPOSITE_SUBTRACT; 0258 ids << COMPOSITE_DIVIDE; 0259 ids << COMPOSITE_HUE; 0260 ids << COMPOSITE_SATURATION; 0261 ids << COMPOSITE_COLOR; 0262 ids << COMPOSITE_LUMINIZE; 0263 0264 KoIDMap result; 0265 Q_FOREACH (const QString &id, ids) { 0266 KoIDMap::const_iterator iter = std::find(m_map.begin(), m_map.end(), KoID(id)); 0267 KIS_SAFE_ASSERT_RECOVER(iter != m_map.end()) { continue; } 0268 0269 result.insert(iter.key(), iter.value()); 0270 } 0271 0272 return result; 0273 } 0274 0275 KoCompositeOpRegistry::KoIDList KoCompositeOpRegistry::getCategories() const 0276 { 0277 return m_categories; 0278 } 0279 0280 QString KoCompositeOpRegistry::getCategoryDisplayName(const QString& categoryID) const 0281 { 0282 KoIDList::const_iterator itr = std::find(m_categories.begin(), m_categories.end(), KoID(categoryID)); 0283 const QString name = (itr != m_categories.end()) ? itr->name() : QString(); 0284 if (name.isNull()) { 0285 warnPigment << "Got null display name for composite op category" << categoryID; 0286 return categoryID; 0287 } 0288 return name; 0289 } 0290 0291 KoCompositeOpRegistry::KoIDList KoCompositeOpRegistry::getCompositeOps(const KoID& category, const KoColorSpace* colorSpace) const 0292 { 0293 qint32 num = m_map.count(category); 0294 KoIDMap::const_iterator beg = m_map.find(category); 0295 KoIDMap::const_iterator end = beg + num; 0296 0297 KoIDList list; 0298 list.reserve(num); 0299 0300 if(colorSpace) { 0301 for(; beg!=end; ++beg){ 0302 if(colorSpace->hasCompositeOp(beg->id())) 0303 list.push_back(*beg); 0304 } 0305 } 0306 else { 0307 for(; beg!=end; ++beg) 0308 list.push_back(*beg); 0309 } 0310 0311 return list; 0312 } 0313 0314 KoCompositeOpRegistry::KoIDList KoCompositeOpRegistry::getCompositeOps(const KoColorSpace* colorSpace) const 0315 { 0316 KoIDMap::const_iterator beg = m_map.begin(); 0317 KoIDMap::const_iterator end = m_map.end(); 0318 0319 KoIDList list; 0320 list.reserve(m_map.size()); 0321 0322 if(colorSpace) { 0323 for(; beg!=end; ++beg){ 0324 if(colorSpace->hasCompositeOp(beg->id())) 0325 list.push_back(*beg); 0326 } 0327 } 0328 else { 0329 for(; beg!=end; ++beg) 0330 list.push_back(*beg); 0331 } 0332 0333 return list; 0334 } 0335 0336 bool KoCompositeOpRegistry::colorSpaceHasCompositeOp(const KoColorSpace* colorSpace, const KoID& compositeOp) const 0337 { 0338 return colorSpace ? colorSpace->hasCompositeOp(compositeOp.id()) : false; 0339 }