File indexing completed on 2024-05-12 15:59:43
0001 /* 0002 * SPDX-FileCopyrightText: 2010 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "psd.h" 0007 0008 #include <QPoint> 0009 #include <kis_debug.h> 0010 0011 #include <KoColorModelStandardIds.h> 0012 #include <KoCompositeOpRegistry.h> 0013 0014 #include "kis_global.h" 0015 0016 QPair<QString, QString> psd_colormode_to_colormodelid(psd_color_mode colormode, quint16 channelDepth) 0017 { 0018 QPair<QString, QString> colorSpaceId; 0019 switch (colormode) { 0020 case (Bitmap): 0021 case (Indexed): 0022 case (MultiChannel): 0023 case (RGB): 0024 colorSpaceId.first = RGBAColorModelID.id(); 0025 break; 0026 case (CMYK): 0027 colorSpaceId.first = CMYKAColorModelID.id(); 0028 break; 0029 case (Grayscale): 0030 colorSpaceId.first = GrayAColorModelID.id(); 0031 break; 0032 case (DuoTone): 0033 colorSpaceId.first = GrayAColorModelID.id(); 0034 break; 0035 case (Lab): 0036 colorSpaceId.first = LABAColorModelID.id(); 0037 break; 0038 default: 0039 return colorSpaceId; 0040 } 0041 0042 switch (channelDepth) { 0043 case (1): 0044 case (8): 0045 colorSpaceId.second = Integer8BitsColorDepthID.id(); 0046 break; 0047 case (16): 0048 colorSpaceId.second = Integer16BitsColorDepthID.id(); 0049 break; 0050 case (32): 0051 colorSpaceId.second = Float32BitsColorDepthID.id(); 0052 break; 0053 default: 0054 break; 0055 } 0056 return colorSpaceId; 0057 } 0058 0059 QString psd_blendmode_to_composite_op(const QString &blendmode) 0060 { 0061 // 'pass' = pass through 0062 if (blendmode == "pass") 0063 return COMPOSITE_PASS_THROUGH; 0064 // 'norm' = normal 0065 if (blendmode == "norm") 0066 return COMPOSITE_OVER; 0067 // 'diss' = dissolve 0068 if (blendmode == "diss") 0069 return COMPOSITE_DISSOLVE; 0070 // 'dark' = darken 0071 if (blendmode == "dark") 0072 return COMPOSITE_DARKEN; 0073 // 'mul ' = multiply 0074 if (blendmode == "mul ") 0075 return COMPOSITE_MULT; 0076 // 'idiv' = color burn 0077 if (blendmode == "idiv") 0078 return COMPOSITE_BURN; 0079 // 'lbrn' = linear burn 0080 if (blendmode == "lbrn") 0081 return COMPOSITE_LINEAR_BURN; 0082 // 'dkCl' = darker color 0083 if (blendmode == "dkCl") 0084 return COMPOSITE_DARKER_COLOR; 0085 // 'lite' = lighten 0086 if (blendmode == "lite") 0087 return COMPOSITE_LIGHTEN; 0088 // 'scrn' = screen 0089 if (blendmode == "scrn") 0090 return COMPOSITE_SCREEN; 0091 // 'div ' = color dodge 0092 if (blendmode == "div ") 0093 return COMPOSITE_DODGE; 0094 // 'lddg' = linear dodge 0095 if (blendmode == "lddg") 0096 return COMPOSITE_LINEAR_DODGE; 0097 // 'lgCl' = lighter color 0098 if (blendmode == "lgCl") 0099 return COMPOSITE_LIGHTER_COLOR; 0100 // 'over' = overlay 0101 if (blendmode == "over") 0102 return COMPOSITE_OVERLAY; 0103 // 'sLit' = soft light 0104 if (blendmode == "sLit") 0105 return COMPOSITE_SOFT_LIGHT_PHOTOSHOP; 0106 // 'hLit' = hard light 0107 if (blendmode == "hLit") 0108 return COMPOSITE_HARD_LIGHT; 0109 // 'vLit' = vivid light 0110 if (blendmode == "vLit") 0111 return COMPOSITE_VIVID_LIGHT; 0112 // 'lLit' = linear light 0113 if (blendmode == "lLit") 0114 return COMPOSITE_LINEAR_LIGHT; 0115 // 'pLit' = pin light 0116 if (blendmode == "pLit") 0117 return COMPOSITE_PIN_LIGHT; 0118 // 'hMix' = hard mix 0119 if (blendmode == "hMix") 0120 return COMPOSITE_HARD_MIX_PHOTOSHOP; 0121 // 'diff' = difference 0122 if (blendmode == "diff") 0123 return COMPOSITE_DIFF; 0124 // 'smud' = exclusion 0125 if (blendmode == "smud") 0126 return COMPOSITE_EXCLUSION; 0127 // 'fsub' = subtract 0128 if (blendmode == "fsub") 0129 return COMPOSITE_SUBTRACT; 0130 // 'fdiv' = divide 0131 if (blendmode == "fdiv") 0132 return COMPOSITE_DIVIDE; 0133 // 'hue ' = hue 0134 if (blendmode == "hue ") 0135 return COMPOSITE_HUE; 0136 // 'sat ' = saturation 0137 if (blendmode == "sat ") 0138 return COMPOSITE_SATURATION; 0139 // 'colr' = color 0140 if (blendmode == "colr") 0141 return COMPOSITE_COLOR; 0142 // 'lum ' = luminosity 0143 if (blendmode == "lum ") 0144 return COMPOSITE_LUMINIZE; 0145 0146 dbgKrita << "Unknown blendmode:" << blendmode << ". Returning Normal"; 0147 return COMPOSITE_OVER; 0148 } 0149 0150 QString composite_op_to_psd_blendmode(const QString &compositeop) 0151 { 0152 // 'pass' = pass through 0153 if (compositeop == COMPOSITE_PASS_THROUGH) 0154 return "pass"; 0155 // 'norm' = normal 0156 if (compositeop == COMPOSITE_OVER) 0157 return "norm"; 0158 // 'diss' = dissolve 0159 if (compositeop == COMPOSITE_DISSOLVE) 0160 return "diss"; 0161 // 'dark' = darken 0162 if (compositeop == COMPOSITE_DARKEN) 0163 return "dark"; 0164 // 'mul ' = multiply 0165 if (compositeop == COMPOSITE_MULT) 0166 return "mul "; 0167 // 'idiv' = color burn 0168 if (compositeop == COMPOSITE_BURN) 0169 return "idiv"; 0170 // 'lbrn' = linear burn 0171 if (compositeop == COMPOSITE_LINEAR_BURN) 0172 return "lbrn"; 0173 // 'dkCl' = darker color 0174 if (compositeop == COMPOSITE_DARKER_COLOR) 0175 return "dkCl"; 0176 // 'lite' = lighten 0177 if (compositeop == COMPOSITE_LIGHTEN) 0178 return "lite"; 0179 // 'scrn' = screen 0180 if (compositeop == COMPOSITE_SCREEN) 0181 return "scrn"; 0182 // 'div ' = color dodge 0183 if (compositeop == COMPOSITE_DODGE) 0184 return "div "; 0185 // 'lddg' = linear dodge 0186 if (compositeop == COMPOSITE_LINEAR_DODGE) 0187 return "lddg"; 0188 // 'lgCl' = lighter color 0189 if (compositeop == COMPOSITE_LIGHTER_COLOR) 0190 return "lgCl"; 0191 // 'over' = overlay 0192 if (compositeop == COMPOSITE_OVERLAY) 0193 return "over"; 0194 // 'sLit' = soft light 0195 if (compositeop == COMPOSITE_SOFT_LIGHT_PHOTOSHOP) 0196 return "sLit"; 0197 if (compositeop == COMPOSITE_SOFT_LIGHT_SVG) 0198 return "sLit"; 0199 // 'hLit' = hard light 0200 if (compositeop == COMPOSITE_HARD_LIGHT) 0201 return "hLit"; 0202 // 'vLit' = vivid light 0203 if (compositeop == COMPOSITE_VIVID_LIGHT) 0204 return "vLit"; 0205 // 'lLit' = linear light 0206 if (compositeop == COMPOSITE_LINEAR_LIGHT) 0207 return "lLit"; 0208 // 'pLit' = pin light 0209 if (compositeop == COMPOSITE_PIN_LIGHT) 0210 return "pLit"; 0211 // 'hMix' = hard mix 0212 if (compositeop == COMPOSITE_HARD_MIX_PHOTOSHOP) 0213 return "hMix"; 0214 // 'diff' = difference 0215 if (compositeop == COMPOSITE_DIFF) 0216 return "diff"; 0217 // 'smud' = exclusion 0218 if (compositeop == COMPOSITE_EXCLUSION) 0219 return "smud"; 0220 // 'fsub' = subtract 0221 if (compositeop == COMPOSITE_SUBTRACT) 0222 return "fsub"; 0223 // 'fdiv' = divide 0224 if (compositeop == COMPOSITE_DIVIDE) 0225 return "fdiv"; 0226 // 'hue ' = hue 0227 if (compositeop == COMPOSITE_HUE) 0228 return "hue "; 0229 // 'sat ' = saturation 0230 if (compositeop == COMPOSITE_SATURATION) 0231 return "sat "; 0232 // 'colr' = color 0233 if (compositeop == COMPOSITE_COLOR) 0234 return "colr"; 0235 // 'lum ' = luminosity 0236 if (compositeop == COMPOSITE_LUMINIZE) 0237 return "lum "; 0238 0239 dbgKrita << "Krita blending mode" << compositeop << "does not exist in Photoshop, returning Normal"; 0240 return "norm"; 0241 } 0242 0243 QPoint psd_layer_effects_shadow_base::calculateOffset(const psd_layer_effects_context *context) const 0244 { 0245 Q_UNUSED(context); 0246 0247 qint32 angle = this->m_angle; 0248 0249 qint32 distanceX = -qRound(this->m_distance * cos(kisDegreesToRadians(qreal(angle)))); 0250 qint32 distanceY = qRound(this->m_distance * sin(kisDegreesToRadians(qreal(angle)))); 0251 0252 return QPoint(distanceX, distanceY); 0253 } 0254 0255 // key functions 0256 psd_layer_effects_shadow_base::~psd_layer_effects_shadow_base() 0257 { 0258 } 0259 0260 void psd_layer_effects_shadow_base::scaleLinearSizes(qreal scale) 0261 { 0262 m_distance *= scale; 0263 m_size *= scale; 0264 } 0265 0266 psd_layer_effects_shadow_common::~psd_layer_effects_shadow_common() 0267 { 0268 } 0269 0270 psd_layer_effects_drop_shadow::~psd_layer_effects_drop_shadow() 0271 { 0272 } 0273 0274 psd_layer_effects_glow_common::~psd_layer_effects_glow_common() 0275 { 0276 } 0277 0278 psd_layer_effects_inner_glow::~psd_layer_effects_inner_glow() 0279 { 0280 } 0281 0282 psd_layer_effects_outer_glow::~psd_layer_effects_outer_glow() 0283 { 0284 } 0285 0286 psd_layer_effects_inner_shadow::~psd_layer_effects_inner_shadow() 0287 { 0288 }