File indexing completed on 2024-05-12 15:59:02

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Srirupa Datta <srirupa.sps@gmail.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef MultiTransparencyMaskCheck_H
0008 #define MultiTransparencyMaskCheck_H
0009 
0010 #include "KisExportCheckRegistry.h"
0011 #include <KoID.h>
0012 #include <klocalizedstring.h>
0013 #include <kis_image.h>
0014 #include <kis_group_layer.h> 
0015 #include <kis_layer_utils.h>
0016 
0017 class MultiTransparencyMaskCheck : public KisExportCheckBase
0018 {
0019 public:
0020 
0021     MultiTransparencyMaskCheck(const QString &id, Level level, const QString &customWarning = QString())
0022         : KisExportCheckBase(id, level, customWarning, true)
0023     {
0024         if (customWarning.isEmpty()) {
0025             m_warning = i18nc("image conversion warning", "The image has <b>more than one transparency mask on a layer</b>. For all layers that have multiple transparency masks, only the rendered result will be saved.");
0026         }
0027     }
0028 
0029     bool checkNeeded(KisImageSP image) const override
0030     {        
0031         KisNodeSP layer = KisLayerUtils::recursiveFindNode(image->rootLayer(), 
0032             [] (KisNodeSP node)
0033             {
0034                 quint32 transparencyMasks = 0;
0035                 KisNodeSP mask;
0036 
0037                 for (mask = node->firstChild(); mask != 0; mask = mask->nextSibling()) {
0038                     if (mask->inherits("KisTransparencyMask")) {
0039                         transparencyMasks += 1;
0040                         if (transparencyMasks > 1) {
0041                             return true;
0042                         }
0043                     }
0044                 }
0045                     
0046                 return false;
0047             });
0048         
0049         return (layer != 0);
0050     }
0051 
0052     Level check(KisImageSP /*image*/) const override
0053     {
0054         return m_level;
0055     }
0056 
0057 };
0058 
0059 class MultiTransparencyMaskCheckFactory : public KisExportCheckFactory
0060 {
0061 public:
0062 
0063     MultiTransparencyMaskCheckFactory() {}
0064 
0065     ~MultiTransparencyMaskCheckFactory() override {}
0066 
0067     KisExportCheckBase *create(KisExportCheckBase::Level level, const QString &customWarning) override
0068     {
0069         return new MultiTransparencyMaskCheck(id(), level, customWarning);
0070     }
0071 
0072     QString id() const override {
0073         return "MultiTransparencyMaskCheck";
0074     }
0075 };
0076 
0077 #endif // MultiTransparencyMaskrCheck_H