File indexing completed on 2024-05-12 15:58:38

0001 /*
0002  *  SPDX-FileCopyrightText: 2014 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #ifndef KIS_PSD_LAYER_STYLE_H
0007 #define KIS_PSD_LAYER_STYLE_H
0008 
0009 class QIODevice;
0010 class QUuid;
0011 
0012 #include <QVector>
0013 
0014 #include <psd.h>
0015 
0016 #include "kis_types.h"
0017 #include "kritaimage_export.h"
0018 
0019 class KisPSDLayerStyle;
0020 typedef QSharedPointer<KisPSDLayerStyle> KisPSDLayerStyleSP;
0021 
0022 
0023 /**
0024  * @brief The KisPSDLayerStyle class implements loading, saving and applying
0025  * the PSD layer effects.
0026  *
0027  * See https://www.tonton-pixel.com/Photoshop%20Additional%20File%20Formats/styles-file-format.html
0028  *
0029  */
0030 class KRITAIMAGE_EXPORT KisPSDLayerStyle : public KoResource
0031 {
0032 
0033 public:
0034     KisPSDLayerStyle(const QString &filename = "", KisResourcesInterfaceSP resourcesInterface = KisResourcesInterfaceSP());
0035     virtual ~KisPSDLayerStyle();
0036     KisPSDLayerStyle(const KisPSDLayerStyle& rhs);
0037     KisPSDLayerStyle operator=(const KisPSDLayerStyle& rhs) = delete;
0038 
0039     KoResourceSP clone() const override;
0040 
0041     bool isSerializable() const override;
0042     bool loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override;
0043     bool saveToDevice(QIODevice *dev) const override;
0044 
0045     void clear();
0046 
0047     QString name() const override;
0048     void setName(const QString &value);
0049 
0050     QUuid uuid() const;
0051     void setUuid(const QUuid &value);
0052 
0053     QString psdUuid() const;
0054     void setPsdUuid(const QString &value);
0055 
0056     QPair<QString, QString> resourceType() const override
0057     {
0058         return QPair<QString, QString>(ResourceType::LayerStyles, "");
0059     }
0060 
0061     /**
0062      * \return true if all the styles are disabled
0063      */
0064     bool isEmpty() const;
0065 
0066     bool isEnabled() const;
0067     void setEnabled(bool value);
0068 
0069     const psd_layer_effects_context* context() const;
0070     const psd_layer_effects_drop_shadow* dropShadow() const;
0071     const psd_layer_effects_inner_shadow* innerShadow() const;
0072     const psd_layer_effects_outer_glow* outerGlow() const;
0073     const psd_layer_effects_inner_glow* innerGlow() const;
0074     const psd_layer_effects_satin* satin() const;
0075     const psd_layer_effects_color_overlay* colorOverlay() const;
0076     const psd_layer_effects_gradient_overlay* gradientOverlay() const;
0077     const psd_layer_effects_pattern_overlay* patternOverlay() const;
0078     const psd_layer_effects_stroke* stroke() const;
0079     const psd_layer_effects_bevel_emboss* bevelAndEmboss() const;
0080 
0081     psd_layer_effects_context* context();
0082     psd_layer_effects_drop_shadow* dropShadow();
0083     psd_layer_effects_inner_shadow* innerShadow();
0084     psd_layer_effects_outer_glow* outerGlow();
0085     psd_layer_effects_inner_glow* innerGlow();
0086     psd_layer_effects_satin* satin();
0087     psd_layer_effects_color_overlay* colorOverlay();
0088     psd_layer_effects_gradient_overlay* gradientOverlay();
0089     psd_layer_effects_pattern_overlay* patternOverlay();
0090     psd_layer_effects_stroke* stroke();
0091     psd_layer_effects_bevel_emboss* bevelAndEmboss();
0092 
0093 
0094     /**
0095      * @return resource interface that is used by KisPSDLayerStyle object for
0096      * loading linked resources
0097      */
0098     KisResourcesInterfaceSP resourcesInterface() const;
0099 
0100     /**
0101      * Set resource interface that will be used by KisPSDLayerStyle object for
0102      * loading linked resources
0103      */
0104     void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface);
0105 
0106     /**
0107      * \see KisRequiredResourcesOperators::hasLocalResourcesSnapshot
0108      */
0109     bool hasLocalResourcesSnapshot() const;
0110 
0111     /**
0112      * \see KisRequiredResourcesOperators::cloneWithResourcesSnapshot
0113      */
0114     KisPSDLayerStyleSP cloneWithResourcesSnapshot(KisResourcesInterfaceSP globalResourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface) const;
0115 
0116     QList<KoResourceLoadResult> embeddedResources(KisResourcesInterfaceSP globalResourcesInterface) const override;
0117 
0118     QList<int> requiredCanvasResources() const override;
0119 
0120 private:
0121     struct Private;
0122     Private * const d;
0123 };
0124 
0125 #endif // KIS_PSD_LAYER_STYLE_H