1 /*
2 * Copyright (c) 2015 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19 #include "kis_file_layer_test.h"
20
21 #include <QTest>
22
23 #include <KoColor.h>
24
25 #include <kis_file_layer.h>
26 #include <kis_transform_mask.h>
27 #include <kis_transform_mask_params_interface.h>
28
29 #include <testutil.h>
30
31 #include "config-limit-long-tests.h"
32
waitForMaskUpdates(KisNodeSP root)33 void waitForMaskUpdates(KisNodeSP root) {
34 #ifdef LIMIT_LONG_TESTS
35 KisLayerUtils::forceAllDelayedNodesUpdate(root);
36 QTest::qWait(100);
37 #else /* LIMIT_LONG_TESTS */
38 Q_UNUSED(root);
39 QTest::qWait(100);
40 #endif /* LIMIT_LONG_TESTS */
41 }
42
testFileLayerPlusTransformMaskOffImage()43 void KisFileLayerTest::testFileLayerPlusTransformMaskOffImage()
44 {
45 TestUtil::ReferenceImageChecker chk("flayer_tmask_offimage", "file_layer");
46
47 QRect refRect(0,0,640,441);
48 TestUtil::MaskParent p(refRect);
49
50 QString refName(TestUtil::fetchDataFileLazy("hakonepa.png"));
51 KisLayerSP flayer = new KisFileLayer(p.image, "", refName, KisFileLayer::None, "flayer", OPACITY_OPAQUE_U8);
52
53 p.image->addNode(flayer, p.image->root(), KisNodeSP());
54
55 waitForMaskUpdates(p.image->root());
56 p.image->waitForDone();
57
58 KisTransformMaskSP mask1 = new KisTransformMask(p.image, "mask1");
59 p.image->addNode(mask1, flayer);
60
61 flayer->setDirty(refRect);
62 p.image->waitForDone();
63 chk.checkImage(p.image, "00_initial_layer_update");
64
65 waitForMaskUpdates(p.image->root());
66 p.image->waitForDone();
67 chk.checkImage(p.image, "00X_initial_layer_update");
68
69
70 flayer->setX(580);
71 flayer->setY(400);
72
73 flayer->setDirty(refRect);
74 p.image->waitForDone();
75 chk.checkImage(p.image, "01_file_layer_moved");
76
77 waitForMaskUpdates(p.image->root());
78 p.image->waitForDone();
79 chk.checkImage(p.image, "01X_file_layer_moved");
80
81
82 QTransform transform = QTransform::fromTranslate(-580, -400);
83 mask1->setTransformParams(KisTransformMaskParamsInterfaceSP(
84 new KisDumbTransformMaskParams(transform)));
85
86
87 /**
88 * NOTE: here we see our image cropped by 1.5 image size rect!
89 * That is expected and controlled by
90 * KisImageConfig::transformMaskOffBoundsReadArea()
91 * parameter
92 */
93
94 mask1->setDirty(refRect);
95 p.image->waitForDone();
96 chk.checkImage(p.image, "02_mask1_moved_mask_update");
97
98 waitForMaskUpdates(p.image->root());
99 p.image->waitForDone();
100 chk.checkImage(p.image, "02X_mask1_moved_mask_update");
101
102 QVERIFY(chk.testPassed());
103 }
104
testFileLayerPlusTransformMaskSmallFileBigOffset()105 void KisFileLayerTest::testFileLayerPlusTransformMaskSmallFileBigOffset()
106 {
107 TestUtil::ReferenceImageChecker chk("flayer_tmask_huge_offset", "file_layer");
108
109 QRect refRect(0,0,2000,1500);
110 TestUtil::MaskParent p(refRect);
111
112 QString refName(TestUtil::fetchDataFileLazy("file_layer_source.png"));
113 KisLayerSP flayer = new KisFileLayer(p.image, "", refName, KisFileLayer::None, "flayer", OPACITY_OPAQUE_U8);
114
115 p.image->addNode(flayer, p.image->root(), KisNodeSP());
116
117 waitForMaskUpdates(p.image->root());
118 p.image->waitForDone();
119
120 // check whether the default bounds of the file layer are
121 // initialized properly
122 QCOMPARE(flayer->original()->defaultBounds()->bounds(), p.image->bounds());
123
124 KisTransformMaskSP mask1 = new KisTransformMask(p.image, "mask1");
125 p.image->addNode(mask1, flayer);
126
127 flayer->setDirty(refRect);
128 p.image->waitForDone();
129 chk.checkImage(p.image, "00_initial_layer_update");
130
131 waitForMaskUpdates(p.image->root());
132 p.image->waitForDone();
133 chk.checkImage(p.image, "00X_initial_layer_update");
134
135 QTransform transform;
136
137 transform = QTransform::fromTranslate(1200, 300);
138 mask1->setTransformParams(KisTransformMaskParamsInterfaceSP(
139 new KisDumbTransformMaskParams(transform)));
140
141 mask1->setDirty(refRect);
142 p.image->waitForDone();
143 chk.checkImage(p.image, "01_mask1_moved_mask_update");
144
145 waitForMaskUpdates(p.image->root());
146 p.image->waitForDone();
147 chk.checkImage(p.image, "01X_mask1_moved_mask_update");
148
149 QVERIFY(chk.testPassed());
150 }
151
152 KISTEST_MAIN(KisFileLayerTest)
153