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