1 /* This file is part of the KDE project
2 Copyright (C) 2007 Thorsten Zachmann <zachmann@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library 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 GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19 #include "TestPointTypeCommand.h"
20
21 #include <QPainterPath>
22 #include "KoPathShape.h"
23 #include "KoPathPointTypeCommand.h"
24
25 #include <QTest>
26
redoUndoSymmetric()27 void TestPointTypeCommand::redoUndoSymmetric()
28 {
29 KoPathShape path1;
30 path1.moveTo(QPointF(0, 0));
31 path1.lineTo(QPointF(0, 100));
32 KoPathPoint *point1 = path1.curveTo(QPointF(0, 50), QPointF(100, 50), QPointF(100, 100));
33 KoPathPoint *point2 = path1.curveTo(QPointF(100, 200), QPointF(200, 200), QPointF(200, 100));
34 path1.curveTo(QPointF(200, 50), QPointF(300, 50), QPointF(300, 100));
35 // test with normalize
36 KoPathShape path2;
37 KoPathPoint *point3 = path2.moveTo(QPointF(0, 0));
38 path2.curveTo(QPointF(50, 0), QPointF(100, 50), QPointF(100, 100));
39 path2.curveTo(QPointF(50, 100), QPointF(0, 50), QPointF(0, 0));
40 path2.closeMerge();
41
42 QList<KoPathPointData> pd;
43 pd.append(KoPathPointData(&path1, path1.pathPointIndex(point1)));
44 pd.append(KoPathPointData(&path1, path1.pathPointIndex(point2)));
45 pd.append(KoPathPointData(&path2, path2.pathPointIndex(point3)));
46
47 QPainterPath ppath1Org = path1.outline();
48 QPainterPath ppath2Org = path2.outline();
49
50 KoPathPointTypeCommand cmd(pd, KoPathPointTypeCommand::Symmetric);
51 cmd.redo();
52
53 QPainterPath ppath(QPointF(0, 0));
54 ppath.lineTo(0, 100);
55 ppath.cubicTo(0, 50, 100, 25, 100, 100);
56 ppath.cubicTo(100, 175, 200, 175, 200, 100);
57 ppath.cubicTo(200, 25, 300, 50, 300, 100);
58
59 QVERIFY((point1->properties() & KoPathPoint::IsSymmetric) == KoPathPoint::IsSymmetric);
60 QVERIFY((point1->properties() & KoPathPoint::IsSmooth) == KoPathPoint::Normal);
61
62 QVERIFY(ppath == path1.outline());
63
64 cmd.undo();
65
66 QVERIFY(ppath1Org == path1.outline());
67 QVERIFY(ppath2Org == path2.outline());
68 }
69
redoUndoSmooth()70 void TestPointTypeCommand::redoUndoSmooth()
71 {
72 KoPathShape path1;
73 path1.moveTo(QPointF(0, 0));
74 path1.lineTo(QPointF(0, 100));
75 KoPathPoint *point1 = path1.curveTo(QPointF(0, 50), QPointF(100, 50), QPointF(100, 100));
76 KoPathPoint *point2 = path1.curveTo(QPointF(100, 200), QPointF(200, 200), QPointF(200, 100));
77 path1.curveTo(QPointF(200, 50), QPointF(300, 50), QPointF(300, 100));
78 // test with normalize
79 KoPathShape path2;
80 KoPathPoint *point3 = path2.moveTo(QPointF(0, 0));
81 path2.curveTo(QPointF(50, 0), QPointF(100, 50), QPointF(100, 100));
82 path2.curveTo(QPointF(50, 100), QPointF(0, 50), QPointF(0, 0));
83 path2.closeMerge();
84
85 QList<KoPathPointData> pd;
86 pd.append(KoPathPointData(&path1, path1.pathPointIndex(point1)));
87 pd.append(KoPathPointData(&path1, path1.pathPointIndex(point2)));
88 pd.append(KoPathPointData(&path2, path2.pathPointIndex(point3)));
89
90 QPainterPath ppath1Org = path1.outline();
91 QPainterPath ppath2Org = path2.outline();
92
93 KoPathPointTypeCommand cmd(pd, KoPathPointTypeCommand::Smooth);
94 cmd.redo();
95
96 QPainterPath ppath(QPointF(0, 0));
97 ppath.lineTo(0, 100);
98 ppath.cubicTo(0, 50, 100, 50, 100, 100);
99 ppath.cubicTo(100, 200, 200, 200, 200, 100);
100 ppath.cubicTo(200, 50, 300, 50, 300, 100);
101
102 QVERIFY((point1->properties() & KoPathPoint::IsSmooth) == KoPathPoint::IsSmooth);
103 QVERIFY((point1->properties() & KoPathPoint::IsSymmetric) == KoPathPoint::Normal);
104
105 QVERIFY(ppath == path1.outline());
106
107 cmd.undo();
108
109 QVERIFY(ppath1Org == path1.outline());
110 QVERIFY(ppath2Org == path2.outline());
111 }
112
redoUndoCorner()113 void TestPointTypeCommand::redoUndoCorner()
114 {
115 KoPathShape path1;
116 path1.moveTo(QPointF(0, 0));
117 path1.lineTo(QPointF(0, 100));
118 KoPathPoint *point1 = path1.curveTo(QPointF(0, 50), QPointF(100, 50), QPointF(100, 100));
119 KoPathPoint *point2 = path1.curveTo(QPointF(100, 150), QPointF(200, 150), QPointF(200, 100));
120 path1.curveTo(QPointF(200, 50), QPointF(300, 50), QPointF(300, 100));
121 // test with normalize
122 KoPathShape path2;
123 KoPathPoint *point3 = path2.moveTo(QPointF(0, 0));
124 path2.curveTo(QPointF(50, 0), QPointF(100, 50), QPointF(100, 100));
125 path2.curveTo(QPointF(50, 100), QPointF(0, 50), QPointF(0, 0));
126 path2.closeMerge();
127
128 QList<KoPathPointData> pd;
129 pd.append(KoPathPointData(&path1, path1.pathPointIndex(point1)));
130 pd.append(KoPathPointData(&path1, path1.pathPointIndex(point2)));
131 pd.append(KoPathPointData(&path2, path2.pathPointIndex(point3)));
132
133 QPainterPath ppath1Org = path1.outline();
134 QPainterPath ppath2Org = path2.outline();
135
136 KoPathPointTypeCommand cmd1(pd, KoPathPointTypeCommand::Symmetric);
137 cmd1.redo();
138
139 KoPathPointTypeCommand cmd2(pd, KoPathPointTypeCommand::Corner);
140 cmd2.redo();
141
142 QPainterPath ppath(QPointF(0, 0));
143 ppath.lineTo(0, 100);
144 ppath.cubicTo(0, 50, 100, 50, 100, 100);
145 ppath.cubicTo(100, 150, 200, 150, 200, 100);
146 ppath.cubicTo(200, 50, 300, 50, 300, 100);
147
148 QVERIFY((point1->properties() & KoPathPoint::IsSmooth) == KoPathPoint::Normal);
149 QVERIFY((point1->properties() & KoPathPoint::IsSymmetric) == KoPathPoint::Normal);
150
151 QVERIFY(ppath == path1.outline());
152
153 cmd2.undo();
154 cmd1.undo();
155
156 QVERIFY(ppath1Org == path1.outline());
157 QVERIFY(ppath2Org == path2.outline());
158 }
159
160 QTEST_MAIN(TestPointTypeCommand)
161