File indexing completed on 2024-05-12 15:59:02
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef FILLLAYERTYPECHECK_H 0008 #define FILLLAYERTYPECHECK_H 0009 0010 0011 #include "KisExportCheckRegistry.h" 0012 #include <KoID.h> 0013 #include <klocalizedstring.h> 0014 #include <kis_assert.h> 0015 #include <kis_image.h> 0016 #include <kis_generator_registry.h> 0017 #include <kis_generator_layer.h> 0018 #include <kis_node_visitor.h> 0019 #include <kis_group_layer.h> 0020 0021 0022 class FillLayerTypeCheckVisitor : public KisNodeVisitor 0023 { 0024 public: 0025 0026 using KisNodeVisitor::visit; 0027 0028 FillLayerTypeCheckVisitor (QString fillLayerID) 0029 : m_count(0) 0030 , m_fillLayerID(fillLayerID) 0031 { 0032 } 0033 0034 quint32 count() { 0035 return m_count; 0036 } 0037 0038 bool visit(KisNode*) override {return true;} 0039 0040 bool visit(KisPaintLayer *) override {return true;} 0041 0042 bool visit(KisGroupLayer *layer) override { 0043 return visitAll(layer); 0044 } 0045 0046 0047 bool visit(KisAdjustmentLayer *) override {return true;} 0048 0049 bool visit(KisExternalLayer *) override {return true;} 0050 0051 bool visit(KisCloneLayer *) override {return true;} 0052 0053 bool visit(KisGeneratorLayer * layer) override { 0054 return check(layer); 0055 } 0056 0057 bool visit(KisFilterMask *) override {return true;} 0058 0059 bool visit(KisTransformMask *) override {return true;} 0060 0061 bool visit(KisTransparencyMask *) override {return true;} 0062 0063 bool visit(KisSelectionMask *) override {return true;} 0064 0065 bool visit(KisColorizeMask *) override {return true;} 0066 0067 0068 private: 0069 bool check(KisGeneratorLayer * node) { 0070 if (node->filter()->name() == m_fillLayerID) { 0071 m_count++; 0072 } 0073 return true; 0074 } 0075 0076 quint32 m_count; 0077 const QString m_fillLayerID; 0078 0079 }; 0080 0081 0082 class FillLayerTypeCheck : public KisExportCheckBase 0083 { 0084 public: 0085 0086 FillLayerTypeCheck(const QString &generatorID, const QString &id, Level level, const QString &customWarning = QString()) 0087 : KisExportCheckBase(id, level, customWarning), 0088 m_fillLayerID(generatorID) 0089 { 0090 if (customWarning.isEmpty()) { 0091 QString name = KisGeneratorRegistry::instance()->get(generatorID)->name(); 0092 m_warning = i18nc("image conversion warning", "The image contains a Fill Layer of type <b>%1</b>, which is not supported, the layer will be converted to a paintlayer", name); 0093 } 0094 } 0095 0096 bool checkNeeded(KisImageSP image) const override 0097 { 0098 FillLayerTypeCheckVisitor v(m_fillLayerID); 0099 image->rootLayer()->accept(v); 0100 return (v.count() > 0); 0101 } 0102 0103 Level check(KisImageSP /*image*/) const override 0104 { 0105 return m_level; 0106 } 0107 0108 const QString m_fillLayerID; 0109 }; 0110 0111 class FillLayerTypeCheckFactory : public KisExportCheckFactory 0112 { 0113 public: 0114 0115 FillLayerTypeCheckFactory(const QString &generatorID) 0116 : m_fillLayerID(generatorID) 0117 { 0118 } 0119 0120 ~FillLayerTypeCheckFactory() override {} 0121 0122 KisExportCheckBase *create(KisExportCheckBase::Level level, const QString &customWarning) override 0123 { 0124 return new FillLayerTypeCheck(m_fillLayerID, id(), level, customWarning); 0125 } 0126 0127 QString id() const override { 0128 return "FillLayerTypeCheck/" + m_fillLayerID; 0129 } 0130 0131 const QString m_fillLayerID; 0132 }; 0133 #endif // FILLLAYERTYPECHECK_H