File indexing completed on 2024-05-12 15:59:03
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef PSDLayerStyleCHECK_H 0008 #define PSDLayerStyleCHECK_H 0009 0010 #include "KisExportCheckRegistry.h" 0011 #include <KoID.h> 0012 #include <klocalizedstring.h> 0013 #include <kis_image.h> 0014 #include <KoColorSpace.h> 0015 #include <kis_node_visitor.h> 0016 #include "kis_node.h" 0017 #include "kis_paint_layer.h" 0018 #include "kis_group_layer.h" 0019 #include "kis_adjustment_layer.h" 0020 #include "kis_external_layer_iface.h" 0021 #include "kis_clone_layer.h" 0022 #include "generator/kis_generator_layer.h" 0023 0024 class KisLayerStyleVisitor : public KisNodeVisitor 0025 { 0026 public: 0027 0028 using KisNodeVisitor::visit; 0029 0030 KisLayerStyleVisitor() 0031 : m_count(0) 0032 { 0033 } 0034 0035 quint32 count() { 0036 return m_count; 0037 } 0038 0039 bool visit(KisNode* node) override { 0040 return check(node); 0041 } 0042 0043 bool visit(KisPaintLayer *layer) override { 0044 return check(layer); 0045 } 0046 0047 bool visit(KisGroupLayer *layer) override { 0048 return check(layer); 0049 } 0050 0051 0052 bool visit(KisAdjustmentLayer *layer) override { 0053 return check(layer); 0054 } 0055 0056 bool visit(KisExternalLayer *layer) override { 0057 return check(layer); 0058 } 0059 0060 bool visit(KisCloneLayer *layer) override { 0061 return check(layer); 0062 } 0063 0064 bool visit(KisGeneratorLayer * layer) override { 0065 return check(layer); 0066 } 0067 0068 bool visit(KisFilterMask *) override {return true;} 0069 0070 bool visit(KisTransformMask *) override {return true;} 0071 0072 bool visit(KisTransparencyMask *) override {return true;} 0073 0074 bool visit(KisSelectionMask *) override {return true;} 0075 0076 bool visit(KisColorizeMask *) override {return true;} 0077 0078 0079 private: 0080 bool check(KisNode * node) 0081 { 0082 KisLayer *layer = dynamic_cast<KisLayer*>(node); 0083 if (layer) { 0084 if (layer->layerStyle()) { 0085 m_count++; 0086 } 0087 } 0088 visitAll(node); 0089 return true; 0090 } 0091 0092 quint32 m_count; 0093 }; 0094 0095 0096 class PSDLayerStyleCheck : public KisExportCheckBase 0097 { 0098 public: 0099 0100 PSDLayerStyleCheck(const QString &id, Level level, const QString &customWarning = QString()) 0101 : KisExportCheckBase(id, level, customWarning, true) 0102 { 0103 if (customWarning.isEmpty()) { 0104 m_warning = i18nc("image conversion warning", "The image contains <b>layer styles</b>. The layer styles will not be saved."); 0105 } 0106 } 0107 0108 bool checkNeeded(KisImageSP image) const override 0109 { 0110 KisLayerStyleVisitor v; 0111 image->rootLayer()->accept(v); 0112 return (v.count() > 0); 0113 } 0114 0115 Level check(KisImageSP /*image*/) const override 0116 { 0117 return m_level; 0118 } 0119 }; 0120 0121 class PSDLayerStyleCheckFactory : public KisExportCheckFactory 0122 { 0123 public: 0124 0125 PSDLayerStyleCheckFactory() {} 0126 0127 ~PSDLayerStyleCheckFactory() override {} 0128 0129 KisExportCheckBase *create(KisExportCheckBase::Level level, const QString &customWarning) override 0130 { 0131 return new PSDLayerStyleCheck(id(), level, customWarning); 0132 } 0133 0134 QString id() const override { 0135 return "PSDLayerStyleCheck"; 0136 } 0137 }; 0138 0139 #endif // PSDLayerStyleCHECK_H