File indexing completed on 2024-06-23 04:27:06

0001 /*
0002  * KDE. Krita Project.
0003  *
0004  * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include <KisGlobalResourcesInterface.h>
0010 #include <KoColorSpace.h>
0011 #include <KoColorSpaceRegistry.h>
0012 #include <KoProgressUpdater.h>
0013 #include <KoUpdater.h>
0014 #include <generator/kis_generator_registry.h>
0015 #include <kis_filter_configuration.h>
0016 #include <kis_processing_information.h>
0017 #include <kis_selection.h>
0018 #include <simpletest.h>
0019 #include <testimage.h>
0020 #include <testutil.h>
0021 
0022 
0023 #include "KisScreentoneGeneratorTest.h"
0024 
0025 void KisScreentoneGeneratorTest::initTestCase()
0026 {
0027     KisGeneratorRegistry::instance();
0028 }
0029 
0030 void testGenerate(const QString &testName, const QHash<QString, QVariant> &properties)
0031 {
0032     KisGeneratorSP generator = KisGeneratorRegistry::instance()->get("screentone");
0033     QVERIFY(generator);
0034 
0035     KisFilterConfigurationSP config = generator->defaultConfiguration(KisGlobalResourcesInterface::instance());
0036     QVERIFY(config);
0037 
0038     KisPaintDeviceSP paintDevice = new KisPaintDevice(KoColorSpaceRegistry::instance()->rgb8());
0039     KisProcessingInformation processingInformation(paintDevice, QPoint(0, 0), KisSelectionSP());
0040     TestUtil::TestProgressBar *testProgressBar = new TestUtil::TestProgressBar();
0041     KoProgressUpdater *progressUpdater = new KoProgressUpdater(testProgressBar);
0042     KoUpdaterPtr updater = progressUpdater->startSubtask();
0043 
0044     QSize testImageSize(256, 256);
0045 
0046     QHashIterator<QString, QVariant> it(properties);
0047     while (it.hasNext()) {
0048         it.next();
0049         config->setProperty(it.key(), it.value());
0050     }
0051 
0052     generator->generate(processingInformation, testImageSize, config, updater);
0053 
0054     QImage referenceImage(QString(FILES_DATA_DIR) + QDir::separator() + testName + ".png");
0055     QImage deviceImage = paintDevice->convertToQImage(0, 0, 0, testImageSize.width(), testImageSize.height());
0056 
0057     QPoint differingPoint;
0058     if (!TestUtil::compareQImages(differingPoint, referenceImage, deviceImage)) {
0059         deviceImage.save(testName + "_generated.png");
0060         QFAIL(QString(testName + ": failed to compare images, first different pixel: %1,%2 ").arg(differingPoint.x()).arg(differingPoint.y()).toLatin1());
0061     }
0062 
0063     delete progressUpdater;
0064     delete testProgressBar;
0065 }
0066 
0067 void KisScreentoneGeneratorTest::testGenerate01()
0068 {
0069     QHash<QString, QVariant> properties;
0070 
0071     properties.insert("equalization_mode", 0);
0072     properties.insert("brightness", 70);
0073 
0074     testGenerate("test01", properties);
0075 }
0076 
0077 void KisScreentoneGeneratorTest::testGenerate02()
0078 {
0079     QHash<QString, QVariant> properties;
0080 
0081     properties.insert("equalization_mode", 1);
0082     properties.insert("brightness", 70);
0083 
0084     testGenerate("test02", properties);
0085 }
0086 
0087 void KisScreentoneGeneratorTest::testGenerate03()
0088 {
0089     QHash<QString, QVariant> properties;
0090 
0091     properties.insert("equalization_mode", 2);
0092     properties.insert("brightness", 70);
0093 
0094     testGenerate("test03", properties);
0095 }
0096 
0097 void KisScreentoneGeneratorTest::testGenerate04()
0098 {
0099     QHash<QString, QVariant> properties;
0100 
0101     properties.insert("equalization_mode", 0);
0102     properties.insert("align_to_pixel_grid", false);
0103     properties.insert("brightness", 70);
0104 
0105     testGenerate("test04", properties);
0106 }
0107 
0108 void KisScreentoneGeneratorTest::testGenerate05()
0109 {
0110     QHash<QString, QVariant> properties;
0111 
0112     properties.insert("equalization_mode", 1);
0113     properties.insert("align_to_pixel_grid", false);
0114     properties.insert("brightness", 70);
0115 
0116     testGenerate("test05", properties);
0117 }
0118 
0119 void KisScreentoneGeneratorTest::testGenerate06()
0120 {
0121     QHash<QString, QVariant> properties;
0122 
0123     properties.insert("equalization_mode", 2);
0124     properties.insert("align_to_pixel_grid", false);
0125     properties.insert("brightness", 70);
0126 
0127     testGenerate("test06", properties);
0128 }
0129 
0130 void KisScreentoneGeneratorTest::testGenerate07()
0131 {
0132     QHash<QString, QVariant> properties;
0133 
0134     properties.insert("pattern", 1);
0135     properties.insert("shape", 1);
0136     properties.insert("equalization_mode", 0);
0137 
0138     properties.insert("size_mode", 1);
0139     properties.insert("keep_size_square", false);
0140     properties.insert("size_x", 100.0);
0141     properties.insert("rotation", 15.0);
0142 
0143     QVariant v;
0144     v.setValue(KoColor(QColor(255, 0, 0), KoColorSpaceRegistry::instance()->rgb8()));
0145     properties.insert("foreground_color", v);
0146     properties.insert("background_opacity", 0);
0147     properties.insert("brightness", 75);
0148     properties.insert("contrast", 90);
0149 
0150     testGenerate("test07", properties);
0151 }
0152 
0153 void KisScreentoneGeneratorTest::testGenerate08()
0154 {
0155     QHash<QString, QVariant> properties;
0156 
0157     properties.insert("pattern", 1);
0158     properties.insert("shape", 1);
0159     properties.insert("equalization_mode", 1);
0160 
0161     properties.insert("size_mode", 1);
0162     properties.insert("keep_size_square", false);
0163     properties.insert("size_x", 100.0);
0164     properties.insert("rotation", 15.0);
0165 
0166     QVariant v;
0167     v.setValue(KoColor(QColor(255, 0, 0), KoColorSpaceRegistry::instance()->rgb8()));
0168     properties.insert("foreground_color", v);
0169     properties.insert("background_opacity", 0);
0170     properties.insert("brightness", 75);
0171     properties.insert("contrast", 90);
0172 
0173     testGenerate("test08", properties);
0174 }
0175 
0176 void KisScreentoneGeneratorTest::testGenerate09()
0177 {
0178     QHash<QString, QVariant> properties;
0179 
0180     properties.insert("pattern", 1);
0181     properties.insert("shape", 1);
0182     properties.insert("equalization_mode", 2);
0183 
0184     properties.insert("size_mode", 1);
0185     properties.insert("keep_size_square", false);
0186     properties.insert("size_x", 100.0);
0187     properties.insert("rotation", 15.0);
0188 
0189     QVariant v;
0190     v.setValue(KoColor(QColor(255, 0, 0), KoColorSpaceRegistry::instance()->rgb8()));
0191     properties.insert("foreground_color", v);
0192     properties.insert("background_opacity", 0);
0193     properties.insert("brightness", 75);
0194     properties.insert("contrast", 90);
0195 
0196     testGenerate("test09", properties);
0197 }
0198 
0199 KISTEST_MAIN(KisScreentoneGeneratorTest)