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 #include "KisExportCheckRegistry.h"
0008 #include <KoID.h>
0009 #include <klocalizedstring.h>
0010 #include <kis_image.h>
0011 #include <KoColorSpace.h>
0012 #include <KoColorModelStandardIds.h>
0013 #include <KoColorSpaceRegistry.h>
0014 #include <kis_generator_registry.h>
0015 
0016 #include <AnimationCheck.h>
0017 #include <ColorModelCheck.h>
0018 #include <ColorModelPerLayerCheck.h>
0019 #include <CompositionsCheck.h>
0020 #include <ExifCheck.h>
0021 #include <MultiLayerCheck.h>
0022 #include <MultiTransparencyMaskCheck.h>
0023 #include <PSDLayerStylesCheck.h>
0024 #include <sRGBProfileCheck.h>
0025 #include <NodeTypeCheck.h>
0026 #include <ImageSizeCheck.h>
0027 #include <ColorModelHomogenousCheck.h>
0028 #include <FillLayerTypeCheck.h>
0029 
0030 #include <QGlobalStatic>
0031 
0032 Q_GLOBAL_STATIC(KisExportCheckRegistry, s_instance)
0033 
0034 KisExportCheckRegistry::KisExportCheckRegistry ()
0035 {
0036     KisExportCheckFactory *chkFactory = 0;
0037 
0038     // Multilayer check
0039     chkFactory = new MultiLayerCheckFactory();
0040     add(chkFactory->id(), chkFactory);
0041 
0042     // Multi transparency mask check
0043     chkFactory = new MultiTransparencyMaskCheckFactory();
0044     add(chkFactory->id(), chkFactory);
0045 
0046     // Animation check
0047     chkFactory = new AnimationCheckFactory();
0048     add(chkFactory->id(), chkFactory);
0049 
0050     // Compositions
0051     chkFactory = new CompositionsCheckFactory();
0052     add(chkFactory->id(), chkFactory);
0053 
0054     // Layer styles
0055     chkFactory = new PSDLayerStyleCheckFactory();
0056     add(chkFactory->id(), chkFactory);
0057 
0058     // Check the layers for the presence of exiv info: note this is also
0059     // done for multilayer images even though jpeg, which supports exiv,
0060     // only can handle one layer.
0061     chkFactory = new ExifCheckFactory();
0062     add(chkFactory->id(), chkFactory);
0063 
0064     // Check for saving exiv info in multi layered images.
0065     // This is specific to TIFF, which treats Exif as part of the file format itself.
0066     chkFactory = new TiffExifCheckFactory();
0067     add(chkFactory->id(), chkFactory);
0068 
0069     // Check whether the image is sRGB
0070     chkFactory = new sRGBProfileCheckFactory();
0071     add(chkFactory->id(), chkFactory);
0072 
0073     // Image size
0074     chkFactory = new ImageSizeCheckFactory();
0075     add(chkFactory->id(), chkFactory);
0076 
0077     // Do all layer have the image colorspace
0078     chkFactory = new ColorModelHomogenousCheckFactory();
0079     add(chkFactory->id(), chkFactory);
0080 
0081     QList<KoID> allColorModels = KoColorSpaceRegistry::instance()->colorModelsList(KoColorSpaceRegistry::AllColorSpaces);
0082     Q_FOREACH(const KoID &colorModelID, allColorModels) {
0083         QList<KoID> allColorDepths = KoColorSpaceRegistry::instance()->colorDepthList(colorModelID.id(), KoColorSpaceRegistry::AllColorSpaces);
0084         Q_FOREACH(const KoID &colorDepthID, allColorDepths) {
0085 
0086             Q_ASSERT(!colorModelID.name().isEmpty());
0087             Q_ASSERT(!colorDepthID.name().isEmpty());
0088 
0089             // Per layer color model/channel depth checks
0090             chkFactory = new ColorModelPerLayerCheckFactory(colorModelID, colorDepthID);
0091             add(chkFactory->id(), chkFactory);
0092 
0093             // Image color model/channel depth checks
0094             chkFactory = new ColorModelCheckFactory(colorModelID, colorDepthID);
0095             add(chkFactory->id(), chkFactory);
0096         }
0097     }
0098 
0099     // Node type checks
0100     chkFactory = new NodeTypeCheckFactory("KisCloneLayer", i18n("Clone Layer"));
0101     add(chkFactory->id(), chkFactory);
0102     chkFactory = new NodeTypeCheckFactory("KisGroupLayer", i18nc("A group of layers", "Group"));
0103     add(chkFactory->id(), chkFactory);
0104     chkFactory = new NodeTypeCheckFactory("KisFileLayer", i18n("File Layer"));
0105     add(chkFactory->id(), chkFactory);
0106     chkFactory = new NodeTypeCheckFactory("KisShapeLayer", i18n("Vector Layer"));
0107     add(chkFactory->id(), chkFactory);
0108     chkFactory = new NodeTypeCheckFactory("KisAdjustmentLayer", i18n("Filter Layer"));
0109     add(chkFactory->id(), chkFactory);
0110     chkFactory = new NodeTypeCheckFactory("KisGeneratorLayer", i18n("Generator Layer"));
0111     add(chkFactory->id(), chkFactory);
0112     chkFactory = new NodeTypeCheckFactory("KisColorizeMask", i18n("Colorize Mask"));
0113     add(chkFactory->id(), chkFactory);
0114     chkFactory = new NodeTypeCheckFactory("KisFilterMask", i18n("Filter Mask"));
0115     add(chkFactory->id(), chkFactory);
0116     chkFactory = new NodeTypeCheckFactory("KisTransformMask", i18n("Transform Mask"));
0117     add(chkFactory->id(), chkFactory);
0118     chkFactory = new NodeTypeCheckFactory("KisTransparencyMask", i18n("Transparency Mask"));
0119     add(chkFactory->id(), chkFactory);
0120     chkFactory = new NodeTypeCheckFactory("KisSelectionMask", i18n("Selection Mask"));
0121     add(chkFactory->id(), chkFactory);
0122 
0123     // Fill layer/generator types.
0124     for (QString generatorId : KisGeneratorRegistry::instance()->keys()) {
0125         chkFactory = new FillLayerTypeCheckFactory(generatorId);
0126         add(chkFactory->id(), chkFactory);
0127     }
0128 }
0129 
0130 KisExportCheckRegistry::~KisExportCheckRegistry ()
0131 {
0132     qDeleteAll(values());
0133 }
0134 
0135 KisExportCheckRegistry *KisExportCheckRegistry ::instance()
0136 {
0137     return s_instance;
0138 }
0139