File indexing completed on 2024-05-12 15:58:09
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_ASL_LAYER_STYLE_SERIALIZER_H 0008 #define __KIS_ASL_LAYER_STYLE_SERIALIZER_H 0009 0010 #include "kritaimage_export.h" 0011 0012 class QIODevice; 0013 class KoPattern; 0014 class KisResourceModel; 0015 0016 #include "kis_psd_layer_style.h" 0017 #include "asl/kis_asl_callback_object_catcher.h" 0018 #include "KisLocalStrokeResources.h" 0019 0020 class KRITAIMAGE_EXPORT KisAslLayerStyleSerializer 0021 { 0022 public: 0023 KisAslLayerStyleSerializer(); 0024 ~KisAslLayerStyleSerializer(); 0025 0026 void saveToDevice(QIODevice &device); 0027 bool saveToFile(const QString& filename); 0028 void readFromDevice(QIODevice &device); 0029 bool readFromFile(const QString& filename); 0030 0031 void assignAllLayerStylesToLayers(KisNodeSP root, const QString &storageLocation); 0032 static QVector<KisPSDLayerStyleSP> collectAllLayerStyles(KisNodeSP root); 0033 0034 QVector<KisPSDLayerStyleSP> styles() const; 0035 void setStyles(const QVector<KisPSDLayerStyleSP> &styles); 0036 0037 QHash<QString, KoPatternSP> patterns() const; 0038 QVector<KoAbstractGradientSP> gradients() const; 0039 QHash<QString, KisPSDLayerStyleSP> stylesHash(); 0040 0041 0042 void registerPSDPattern(const QDomDocument &doc); 0043 void readFromPSDXML(const QDomDocument &doc); 0044 0045 QDomDocument formXmlDocument() const; 0046 QDomDocument formPsdXmlDocument() const; 0047 0048 bool isInitialized() { 0049 return m_initialized; 0050 } 0051 0052 bool isValid() { 0053 return isInitialized() && m_isValid; 0054 } 0055 0056 static QVector<KoResourceSP> fetchEmbeddedResources(const KisPSDLayerStyle *style); 0057 0058 private: 0059 void registerPatternObject(const KoPatternSP pattern, const QString& patternUuid); 0060 0061 void assignPatternObject(const QString &patternUuid, const QString &patternName, std::function<void(KoPatternSP)> setPattern); 0062 void assignGradientObject(KoAbstractGradientSP gradient, std::function<void(KoAbstractGradientSP)> setGradient); 0063 0064 static QVector<KoPatternSP> fetchAllPatterns(const KisPSDLayerStyle *style); 0065 0066 void newStyleStarted(bool isPsdStructure); 0067 void connectCatcherToStyle(KisPSDLayerStyle *style, const QString &prefix); 0068 0069 private: 0070 QHash<QString, KoPatternSP> m_patternsStore; 0071 0072 KisAslCallbackObjectCatcher m_catcher; 0073 QVector<KisPSDLayerStyleSP> m_stylesVector; 0074 QVector<KoAbstractGradientSP> m_gradientsStore; 0075 QHash<QString, KisPSDLayerStyleSP> m_stylesHash; 0076 bool m_initialized {false}; 0077 bool m_isValid {true}; 0078 QSharedPointer<KisLocalStrokeResources> m_localResourcesInterface; 0079 }; 0080 0081 #endif /* __KIS_ASL_LAYER_STYLE_SERIALIZER_H */