File indexing completed on 2024-05-19 04:26:52

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