File indexing completed on 2024-05-12 15:59:02
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef COLORMODELHOMOGENOUSCHECK_H 0008 #define COLORMODELHOMOGENOUSCHECK_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 <KoColorModelStandardIds.h> 0016 #include <kis_layer.h> 0017 #include <kis_node_visitor.h> 0018 #include "kis_node.h" 0019 #include "kis_paint_layer.h" 0020 #include "kis_group_layer.h" 0021 #include "kis_adjustment_layer.h" 0022 #include "kis_external_layer_iface.h" 0023 #include "kis_clone_layer.h" 0024 #include "generator/kis_generator_layer.h" 0025 0026 class KisColorModelHomogenousCheckVisitor : public KisNodeVisitor 0027 { 0028 public: 0029 0030 using KisNodeVisitor::visit; 0031 0032 KisColorModelHomogenousCheckVisitor(KoID colorModelID, KoID colorDepthID) 0033 : m_count(0) 0034 , m_colorModelID(colorModelID) 0035 , m_colorDepthID(colorDepthID) 0036 { 0037 } 0038 0039 quint32 count() { 0040 return m_count; 0041 } 0042 0043 bool visit(KisNode* node) override { 0044 return check(node); 0045 } 0046 0047 bool visit(KisPaintLayer *layer) override { 0048 return check(layer); 0049 } 0050 0051 bool visit(KisGroupLayer *layer) override { 0052 return check(layer); 0053 } 0054 0055 0056 bool visit(KisAdjustmentLayer *layer) override { 0057 return check(layer); 0058 } 0059 0060 bool visit(KisExternalLayer *layer) override { 0061 return check(layer); 0062 } 0063 0064 bool visit(KisCloneLayer *layer) override { 0065 return check(layer); 0066 } 0067 0068 bool visit(KisGeneratorLayer * layer) override { 0069 return check(layer); 0070 } 0071 0072 bool visit(KisFilterMask *) override {return true;} 0073 0074 bool visit(KisTransformMask *) override {return true;} 0075 0076 bool visit(KisTransparencyMask *) override {return true;} 0077 0078 bool visit(KisSelectionMask *) override {return true;} 0079 0080 bool visit(KisColorizeMask *) override {return true;} 0081 0082 0083 private: 0084 bool check(KisNode * node) 0085 { 0086 KisLayer *layer = dynamic_cast<KisLayer*>(node); 0087 if (layer) { 0088 0089 const KoColorSpace * cs = layer->colorSpace(); 0090 if (cs->colorModelId() != m_colorModelID || cs->colorDepthId() != m_colorDepthID) { 0091 m_count++; 0092 } 0093 } 0094 visitAll(node); 0095 return true; 0096 } 0097 0098 quint32 m_count; 0099 const KoID m_colorModelID; 0100 const KoID m_colorDepthID; 0101 0102 }; 0103 0104 class ColorModelHomogenousCheck : public KisExportCheckBase 0105 { 0106 public: 0107 0108 ColorModelHomogenousCheck(const QString &id, Level level, const QString &customWarning = QString()) 0109 : KisExportCheckBase(id, level, customWarning, true) 0110 { 0111 if (customWarning.isEmpty()) { 0112 m_warning = i18nc("image conversion warning", "Your image contains layers with a color model that is different from the image. The layers will be converted."); 0113 } 0114 } 0115 0116 bool checkNeeded(KisImageSP image) const override 0117 { 0118 const KoColorSpace *cs = image->colorSpace(); 0119 KisColorModelHomogenousCheckVisitor v(cs->colorModelId(), cs->colorDepthId()); 0120 image->rootLayer()->accept(v); 0121 return (v.count() > 0); 0122 } 0123 0124 Level check(KisImageSP /*image*/) const override 0125 { 0126 return m_level; 0127 } 0128 0129 }; 0130 0131 class ColorModelHomogenousCheckFactory : public KisExportCheckFactory 0132 { 0133 public: 0134 0135 ColorModelHomogenousCheckFactory() 0136 { 0137 } 0138 0139 ~ColorModelHomogenousCheckFactory() override {} 0140 0141 KisExportCheckBase *create(KisExportCheckBase::Level level, const QString &customWarning) override 0142 { 0143 return new ColorModelHomogenousCheck(id(), level, customWarning); 0144 } 0145 0146 QString id() const override { 0147 return "ColorModelHomogenousCheck"; 0148 } 0149 0150 }; 0151 0152 0153 #endif // COLORMODELHOMOGENOUSCHECK_H