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