File indexing completed on 2024-05-19 04:32:39

0001 /*
0002  *  SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __STROKE_TESTING_UTILS_H
0008 #define __STROKE_TESTING_UTILS_H
0009 
0010 #include <QString>
0011 #include <KoCanvasResourceProvider.h>
0012 #include "kis_node.h"
0013 #include "kis_types.h"
0014 #include "kis_stroke_strategy.h"
0015 #include "kis_resources_snapshot.h"
0016 
0017 
0018 class KisUndoStore;
0019 
0020 
0021 namespace utils {
0022 
0023     KisImageSP createImage(KisUndoStore *undoStore, const QSize &imageSize);
0024     KoCanvasResourceProvider* createResourceManager(KisImageWSP image,
0025                                              KisNodeSP node = 0,
0026                                              const QString &presetFileName = "autobrush_300px.kpp");
0027 
0028     class StrokeTester
0029     {
0030     public:
0031         StrokeTester(const QString &name, const QSize &imageSize, const QString &presetFileName = "autobrush_300px.kpp");
0032         virtual ~StrokeTester();
0033 
0034         void testSimpleStroke();
0035         void testSimpleStrokeCancelled();
0036         void test();
0037         void benchmark();
0038         void testSimpleStrokeNoVerification();
0039 
0040         void setNumIterations(int value);
0041         void setBaseFuzziness(int value);
0042         void setCancelOnIteration(int value);
0043 
0044         int lastStrokeTime() const;
0045 
0046     protected:
0047         KisStrokeId strokeId() {
0048             return m_strokeId;
0049         }
0050 
0051         virtual void modifyResourceManager(KoCanvasResourceProvider *manager,
0052                                            KisImageWSP image, int iteration);
0053 
0054         virtual void initImage(KisImageWSP image, KisNodeSP activeNode, int iteration);
0055 
0056         // overload
0057         virtual void modifyResourceManager(KoCanvasResourceProvider *manager,
0058                                            KisImageWSP image);
0059 
0060         // overload
0061         virtual void initImage(KisImageWSP image, KisNodeSP activeNode);
0062         virtual void beforeCheckingResult(KisImageWSP image, KisNodeSP activeNode);
0063         virtual void iterationEndedCallback(KisImageWSP image, KisNodeSP activeNode, int iteration);
0064 
0065         virtual KisStrokeStrategy* createStroke(KisResourcesSnapshotSP resources,
0066                                                 KisImageWSP image) = 0;
0067 
0068         virtual void addPaintingJobs(KisImageWSP image,
0069                                      KisResourcesSnapshotSP resources,
0070                                      int iteration);
0071 
0072         // overload
0073         virtual void addPaintingJobs(KisImageWSP image,
0074                                      KisResourcesSnapshotSP resources);
0075 
0076     private:
0077         void testOneStroke(bool cancelled, bool indirectPainting,
0078                            bool externalLayer, bool testUpdates = false);
0079 
0080         QImage doStroke(bool cancelled,
0081                         bool externalLayer, bool testUpdates = false,
0082                         bool needQImage = true);
0083 
0084         QString formatTestName(const QString &baseName, bool cancelled,
0085                                bool indirectPainting, bool externalLayer);
0086         QString referenceFile(const QString &testName);
0087         QString dumpReferenceFile(const QString &testName);
0088         QString resultFile(const QString &testName);
0089 
0090     private:
0091         KisStrokeId m_strokeId;
0092         QString m_name;
0093         QSize m_imageSize;
0094         QString m_presetFilename;
0095         int m_numIterations;
0096         int m_baseFuzziness;
0097         int m_strokeTime = 0;
0098         int m_cancelOnIteration = 0;
0099     };
0100 }
0101 
0102 #endif /* __STROKE_TESTING_UTILS_H */