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