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 }