Changeset View
Changeset View
Standalone View
Standalone View
autotests/test_window_paint_data.cpp
Show All 23 Lines | |||||
24 | #include <QVector2D> | 24 | #include <QVector2D> | ||
25 | #include <QGraphicsRotation> | 25 | #include <QGraphicsRotation> | ||
26 | #include <QGraphicsScale> | 26 | #include <QGraphicsScale> | ||
27 | 27 | | |||
28 | #include <QtTest> | 28 | #include <QtTest> | ||
29 | 29 | | |||
30 | using namespace KWin; | 30 | using namespace KWin; | ||
31 | 31 | | |||
32 | class MockEffectWindowHelper : public QObject | 32 | class MockEffectWindow : public EffectWindow | ||
33 | { | 33 | { | ||
34 | Q_OBJECT | 34 | Q_OBJECT | ||
35 | Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity) | | |||
36 | public: | 35 | public: | ||
37 | MockEffectWindowHelper(QObject *parent = nullptr); | 36 | MockEffectWindow(QObject *parent = nullptr); | ||
38 | double opacity() const { | 37 | WindowQuadList buildQuads(bool force = false) const override; | ||
38 | QVariant data(int role) const override; | ||||
39 | QRect decorationInnerRect() const override; | ||||
40 | void deleteProperty(long int atom) const override; | ||||
41 | void disablePainting(int reason) override; | ||||
42 | void enablePainting(int reason) override; | ||||
43 | EffectWindow *findModal() override; | ||||
44 | const EffectWindowGroup *group() const override; | ||||
45 | bool isPaintingEnabled() override; | ||||
46 | EffectWindowList mainWindows() const override; | ||||
47 | QByteArray readProperty(long int atom, long int type, int format) const override; | ||||
48 | void refWindow() override; | ||||
49 | void unrefWindow() override; | ||||
50 | QRegion shape() const override; | ||||
51 | void setData(int role, const QVariant &data) override; | ||||
52 | void referencePreviousWindowPixmap() override {} | ||||
53 | void unreferencePreviousWindowPixmap() override {} | ||||
54 | bool isDeleted() const override { | ||||
55 | return false; | ||||
56 | } | ||||
57 | bool isMinimized() const override { | ||||
58 | return false; | ||||
59 | } | ||||
60 | double opacity() const override { | ||||
39 | return m_opacity; | 61 | return m_opacity; | ||
40 | } | 62 | } | ||
41 | void setOpacity(qreal opacity) { | 63 | void setOpacity(qreal opacity) { | ||
42 | m_opacity = opacity; | 64 | m_opacity = opacity; | ||
43 | } | 65 | } | ||
44 | private: | 66 | bool hasAlpha() const override { | ||
45 | qreal m_opacity; | 67 | return true; | ||
46 | }; | 68 | } | ||
47 | 69 | QStringList activities() const override { | |||
48 | MockEffectWindowHelper::MockEffectWindowHelper(QObject *parent) | 70 | return QStringList(); | ||
49 | : QObject(parent) | 71 | } | ||
50 | , m_opacity(1.0) | 72 | int desktop() const override { | ||
51 | { | 73 | return 0; | ||
74 | } | ||||
75 | QVector<uint> desktops() const override { | ||||
76 | return {}; | ||||
77 | } | ||||
78 | int x() const override { | ||||
79 | return 0; | ||||
80 | } | ||||
81 | int y() const override { | ||||
82 | return 0; | ||||
83 | } | ||||
84 | int width() const override { | ||||
85 | return 100; | ||||
86 | } | ||||
87 | int height() const override { | ||||
88 | return 100; | ||||
89 | } | ||||
90 | QSize basicUnit() const override { | ||||
91 | return QSize(); | ||||
92 | } | ||||
93 | QRect geometry() const override { | ||||
94 | return QRect(); | ||||
95 | } | ||||
96 | QRect expandedGeometry() const override { | ||||
97 | return QRect(); | ||||
98 | } | ||||
99 | int screen() const override { | ||||
100 | return 0; | ||||
101 | } | ||||
102 | bool hasOwnShape() const override { | ||||
103 | return false; | ||||
104 | } | ||||
105 | QPoint pos() const override { | ||||
106 | return QPoint(); | ||||
107 | } | ||||
108 | QSize size() const override { | ||||
109 | return QSize(100,100); | ||||
110 | } | ||||
111 | QRect rect() const override { | ||||
112 | return QRect(0,0,100,100); | ||||
113 | } | ||||
114 | bool isMovable() const override { | ||||
115 | return true; | ||||
116 | } | ||||
117 | bool isMovableAcrossScreens() const override { | ||||
118 | return true; | ||||
119 | } | ||||
120 | bool isUserMove() const override { | ||||
121 | return false; | ||||
122 | } | ||||
123 | bool isUserResize() const override { | ||||
124 | return false; | ||||
125 | } | ||||
126 | QRect iconGeometry() const override { | ||||
127 | return QRect(); | ||||
128 | } | ||||
129 | bool isDesktop() const override { | ||||
130 | return false; | ||||
131 | } | ||||
132 | bool isDock() const override { | ||||
133 | return false; | ||||
134 | } | ||||
135 | bool isToolbar() const override { | ||||
136 | return false; | ||||
137 | } | ||||
138 | bool isMenu() const override { | ||||
139 | return false; | ||||
140 | } | ||||
141 | bool isNormalWindow() const override { | ||||
142 | return true; | ||||
143 | } | ||||
144 | bool isSpecialWindow() const override { | ||||
145 | return false; | ||||
146 | } | ||||
147 | bool isDialog() const override { | ||||
148 | return false; | ||||
149 | } | ||||
150 | bool isSplash() const override { | ||||
151 | return false; | ||||
152 | } | ||||
153 | bool isUtility() const override { | ||||
154 | return false; | ||||
155 | } | ||||
156 | bool isDropdownMenu() const override { | ||||
157 | return false; | ||||
158 | } | ||||
159 | bool isPopupMenu() const override { | ||||
160 | return false; | ||||
161 | } | ||||
162 | bool isTooltip() const override { | ||||
163 | return false; | ||||
164 | } | ||||
165 | bool isNotification() const override { | ||||
166 | return false; | ||||
167 | } | ||||
168 | bool isOnScreenDisplay() const override { | ||||
169 | return false; | ||||
170 | } | ||||
171 | bool isComboBox() const override { | ||||
172 | return false; | ||||
173 | } | ||||
174 | bool isDNDIcon() const override { | ||||
175 | return false; | ||||
176 | } | ||||
177 | QRect contentsRect() const override { | ||||
178 | return QRect(); | ||||
179 | } | ||||
180 | bool decorationHasAlpha() const override { | ||||
181 | return false; | ||||
182 | } | ||||
183 | QString caption() const override { | ||||
184 | return QString(); | ||||
185 | } | ||||
186 | QIcon icon() const override { | ||||
187 | return QIcon(); | ||||
188 | } | ||||
189 | QString windowClass() const override { | ||||
190 | return QString(); | ||||
191 | } | ||||
192 | QString windowRole() const override { | ||||
193 | return QString(); | ||||
194 | } | ||||
195 | NET::WindowType windowType() const override { | ||||
196 | return NET::Normal; | ||||
197 | } | ||||
198 | bool acceptsFocus() const override { | ||||
199 | return true; | ||||
200 | } | ||||
201 | bool keepAbove() const override { | ||||
202 | return false; | ||||
203 | } | ||||
204 | bool keepBelow() const override { | ||||
205 | return false; | ||||
206 | } | ||||
207 | bool isModal() const override { | ||||
208 | return false; | ||||
209 | } | ||||
210 | bool isSkipSwitcher() const override { | ||||
211 | return false; | ||||
212 | } | ||||
213 | bool isCurrentTab() const override { | ||||
214 | return true; | ||||
215 | } | ||||
216 | bool skipsCloseAnimation() const override { | ||||
217 | return false; | ||||
218 | } | ||||
219 | KWayland::Server::SurfaceInterface *surface() const override { | ||||
220 | return nullptr; | ||||
221 | } | ||||
222 | bool isFullScreen() const override { | ||||
223 | return false; | ||||
224 | } | ||||
225 | bool isUnresponsive() const override { | ||||
226 | return false; | ||||
227 | } | ||||
228 | bool isPopupWindow() const override { | ||||
229 | return false; | ||||
230 | } | ||||
231 | bool isManaged() const override { | ||||
232 | return true; | ||||
233 | } | ||||
234 | bool isWaylandClient() const override { | ||||
235 | return true; | ||||
236 | } | ||||
237 | bool isX11Client() const override { | ||||
238 | return false; | ||||
52 | } | 239 | } | ||
53 | 240 | | |||
54 | class MockEffectWindow : public EffectWindow | 241 | private: | ||
55 | { | 242 | qreal m_opacity = 1.0; | ||
56 | Q_OBJECT | | |||
57 | public: | | |||
58 | MockEffectWindow(QObject *parent = nullptr); | | |||
59 | virtual WindowQuadList buildQuads(bool force = false) const; | | |||
60 | virtual QVariant data(int role) const; | | |||
61 | virtual QRect decorationInnerRect() const; | | |||
62 | virtual void deleteProperty(long int atom) const; | | |||
63 | virtual void disablePainting(int reason); | | |||
64 | virtual void enablePainting(int reason); | | |||
65 | virtual EffectWindow *findModal(); | | |||
66 | virtual const EffectWindowGroup *group() const; | | |||
67 | virtual bool isPaintingEnabled(); | | |||
68 | virtual EffectWindowList mainWindows() const; | | |||
69 | virtual QByteArray readProperty(long int atom, long int type, int format) const; | | |||
70 | virtual void refWindow(); | | |||
71 | virtual void unrefWindow(); | | |||
72 | virtual QRegion shape() const; | | |||
73 | virtual void setData(int role, const QVariant &data); | | |||
74 | virtual void referencePreviousWindowPixmap() {} | | |||
75 | virtual void unreferencePreviousWindowPixmap() {} | | |||
76 | QList<int> desktops() const { return {};} | | |||
77 | }; | 243 | }; | ||
78 | 244 | | |||
79 | MockEffectWindow::MockEffectWindow(QObject *parent) | 245 | MockEffectWindow::MockEffectWindow(QObject *parent) | ||
80 | : EffectWindow(parent) | 246 | : EffectWindow(parent) | ||
81 | { | 247 | { | ||
82 | } | 248 | } | ||
83 | 249 | | |||
84 | WindowQuadList MockEffectWindow::buildQuads(bool force) const | 250 | WindowQuadList MockEffectWindow::buildQuads(bool force) const | ||
▲ Show 20 Lines • Show All 85 Lines • ▼ Show 20 Line(s) | 332 | private Q_SLOTS: | |||
170 | void testOperatorPlus(); | 336 | void testOperatorPlus(); | ||
171 | void testMultiplyOpacity(); | 337 | void testMultiplyOpacity(); | ||
172 | void testMultiplySaturation(); | 338 | void testMultiplySaturation(); | ||
173 | void testMultiplyBrightness(); | 339 | void testMultiplyBrightness(); | ||
174 | }; | 340 | }; | ||
175 | 341 | | |||
176 | void TestWindowPaintData::testCtor() | 342 | void TestWindowPaintData::testCtor() | ||
177 | { | 343 | { | ||
178 | MockEffectWindowHelper helper; | 344 | MockEffectWindow w; | ||
179 | helper.setOpacity(0.5); | 345 | w.setOpacity(0.5); | ||
180 | MockEffectWindow w(&helper); | | |||
181 | WindowPaintData data(&w); | 346 | WindowPaintData data(&w); | ||
182 | QCOMPARE(data.xScale(), 1.0); | 347 | QCOMPARE(data.xScale(), 1.0); | ||
183 | QCOMPARE(data.yScale(), 1.0); | 348 | QCOMPARE(data.yScale(), 1.0); | ||
184 | QCOMPARE(data.zScale(), 1.0); | 349 | QCOMPARE(data.zScale(), 1.0); | ||
185 | QCOMPARE(data.xTranslation(), 0.0); | 350 | QCOMPARE(data.xTranslation(), 0.0); | ||
186 | QCOMPARE(data.yTranslation(), 0.0); | 351 | QCOMPARE(data.yTranslation(), 0.0); | ||
187 | QCOMPARE(data.zTranslation(), 0.0); | 352 | QCOMPARE(data.zTranslation(), 0.0); | ||
188 | QCOMPARE(data.translation(), QVector3D()); | 353 | QCOMPARE(data.translation(), QVector3D()); | ||
189 | QCOMPARE(data.rotationAngle(), 0.0); | 354 | QCOMPARE(data.rotationAngle(), 0.0); | ||
190 | QCOMPARE(data.rotationOrigin(), QVector3D()); | 355 | QCOMPARE(data.rotationOrigin(), QVector3D()); | ||
191 | QCOMPARE(data.rotationAxis(), QVector3D(0.0, 0.0, 1.0)); | 356 | QCOMPARE(data.rotationAxis(), QVector3D(0.0, 0.0, 1.0)); | ||
192 | QCOMPARE(data.opacity(), 0.5); | 357 | QCOMPARE(data.opacity(), 0.5); | ||
193 | QCOMPARE(data.brightness(), 1.0); | 358 | QCOMPARE(data.brightness(), 1.0); | ||
194 | QCOMPARE(data.saturation(), 1.0); | 359 | QCOMPARE(data.saturation(), 1.0); | ||
195 | } | 360 | } | ||
196 | 361 | | |||
197 | void TestWindowPaintData::testCopyCtor() | 362 | void TestWindowPaintData::testCopyCtor() | ||
198 | { | 363 | { | ||
199 | MockEffectWindowHelper helper; | 364 | MockEffectWindow w; | ||
200 | MockEffectWindow w(&helper); | | |||
201 | WindowPaintData data(&w); | 365 | WindowPaintData data(&w); | ||
202 | WindowPaintData data2(data); | 366 | WindowPaintData data2(data); | ||
zzag: Missing override. | |||||
203 | // no value had been changed | 367 | // no value had been changed | ||
204 | QCOMPARE(data2.xScale(), 1.0); | 368 | QCOMPARE(data2.xScale(), 1.0); | ||
205 | QCOMPARE(data2.yScale(), 1.0); | 369 | QCOMPARE(data2.yScale(), 1.0); | ||
206 | QCOMPARE(data2.zScale(), 1.0); | 370 | QCOMPARE(data2.zScale(), 1.0); | ||
207 | QCOMPARE(data2.xTranslation(), 0.0); | 371 | QCOMPARE(data2.xTranslation(), 0.0); | ||
208 | QCOMPARE(data2.yTranslation(), 0.0); | 372 | QCOMPARE(data2.yTranslation(), 0.0); | ||
209 | QCOMPARE(data2.zTranslation(), 0.0); | 373 | QCOMPARE(data2.zTranslation(), 0.0); | ||
210 | QCOMPARE(data2.translation(), QVector3D()); | 374 | QCOMPARE(data2.translation(), QVector3D()); | ||
Show All 26 Lines | |||||
237 | QCOMPARE(data3.rotationAxis(), QVector3D(1.0, 1.0, 0.0)); | 401 | QCOMPARE(data3.rotationAxis(), QVector3D(1.0, 1.0, 0.0)); | ||
238 | QCOMPARE(data3.opacity(), 0.1); | 402 | QCOMPARE(data3.opacity(), 0.1); | ||
239 | QCOMPARE(data3.brightness(), 0.3); | 403 | QCOMPARE(data3.brightness(), 0.3); | ||
240 | QCOMPARE(data3.saturation(), 0.4); | 404 | QCOMPARE(data3.saturation(), 0.4); | ||
241 | } | 405 | } | ||
242 | 406 | | |||
243 | void TestWindowPaintData::testOperatorMultiplyAssign() | 407 | void TestWindowPaintData::testOperatorMultiplyAssign() | ||
244 | { | 408 | { | ||
245 | MockEffectWindowHelper helper; | 409 | MockEffectWindow w; | ||
246 | MockEffectWindow w(&helper); | | |||
247 | WindowPaintData data(&w); | 410 | WindowPaintData data(&w); | ||
248 | // without anything set, it's 1.0 on all axis | 411 | // without anything set, it's 1.0 on all axis | ||
249 | QCOMPARE(data.xScale(), 1.0); | 412 | QCOMPARE(data.xScale(), 1.0); | ||
250 | QCOMPARE(data.yScale(), 1.0); | 413 | QCOMPARE(data.yScale(), 1.0); | ||
251 | QCOMPARE(data.zScale(), 1.0); | 414 | QCOMPARE(data.zScale(), 1.0); | ||
252 | // multiplying by a factor should set all components | 415 | // multiplying by a factor should set all components | ||
253 | data *= 2.0; | 416 | data *= 2.0; | ||
254 | QCOMPARE(data.xScale(), 2.0); | 417 | QCOMPARE(data.xScale(), 2.0); | ||
255 | QCOMPARE(data.yScale(), 2.0); | 418 | QCOMPARE(data.yScale(), 2.0); | ||
256 | QCOMPARE(data.zScale(), 2.0); | 419 | QCOMPARE(data.zScale(), 2.0); | ||
257 | // multiplying by a vector2D should set x and y components | 420 | // multiplying by a vector2D should set x and y components | ||
258 | data *= QVector2D(2.0, 3.0); | 421 | data *= QVector2D(2.0, 3.0); | ||
259 | QCOMPARE(data.xScale(), 4.0); | 422 | QCOMPARE(data.xScale(), 4.0); | ||
260 | QCOMPARE(data.yScale(), 6.0); | 423 | QCOMPARE(data.yScale(), 6.0); | ||
261 | QCOMPARE(data.zScale(), 2.0); | 424 | QCOMPARE(data.zScale(), 2.0); | ||
262 | // multiplying by a vector3d should set all components | 425 | // multiplying by a vector3d should set all components | ||
263 | data *= QVector3D(0.5, 1.5, 2.0); | 426 | data *= QVector3D(0.5, 1.5, 2.0); | ||
264 | QCOMPARE(data.xScale(), 2.0); | 427 | QCOMPARE(data.xScale(), 2.0); | ||
265 | QCOMPARE(data.yScale(), 9.0); | 428 | QCOMPARE(data.yScale(), 9.0); | ||
266 | QCOMPARE(data.zScale(), 4.0); | 429 | QCOMPARE(data.zScale(), 4.0); | ||
267 | } | 430 | } | ||
268 | 431 | | |||
269 | void TestWindowPaintData::testOperatorPlus() | 432 | void TestWindowPaintData::testOperatorPlus() | ||
270 | { | 433 | { | ||
271 | MockEffectWindowHelper helper; | 434 | MockEffectWindow w; | ||
272 | MockEffectWindow w(&helper); | | |||
273 | WindowPaintData data(&w); | 435 | WindowPaintData data(&w); | ||
274 | QCOMPARE(data.xTranslation(), 0.0); | 436 | QCOMPARE(data.xTranslation(), 0.0); | ||
275 | QCOMPARE(data.yTranslation(), 0.0); | 437 | QCOMPARE(data.yTranslation(), 0.0); | ||
276 | QCOMPARE(data.zTranslation(), 0.0); | 438 | QCOMPARE(data.zTranslation(), 0.0); | ||
277 | QCOMPARE(data.translation(), QVector3D()); | 439 | QCOMPARE(data.translation(), QVector3D()); | ||
278 | // test with point | 440 | // test with point | ||
279 | data += QPoint(1, 2); | 441 | data += QPoint(1, 2); | ||
280 | QCOMPARE(data.translation(), QVector3D(1.0, 2.0, 0.0)); | 442 | QCOMPARE(data.translation(), QVector3D(1.0, 2.0, 0.0)); | ||
281 | // test with pointf | 443 | // test with pointf | ||
282 | data += QPointF(0.5, 0.75); | 444 | data += QPointF(0.5, 0.75); | ||
283 | QCOMPARE(data.translation(), QVector3D(1.5, 2.75, 0.0)); | 445 | QCOMPARE(data.translation(), QVector3D(1.5, 2.75, 0.0)); | ||
284 | // test with QVector2D | 446 | // test with QVector2D | ||
285 | data += QVector2D(0.25, 1.5); | 447 | data += QVector2D(0.25, 1.5); | ||
286 | QCOMPARE(data.translation(), QVector3D(1.75, 4.25, 0.0)); | 448 | QCOMPARE(data.translation(), QVector3D(1.75, 4.25, 0.0)); | ||
287 | // test with QVector3D | 449 | // test with QVector3D | ||
288 | data += QVector3D(1.0, 2.0, 3.5); | 450 | data += QVector3D(1.0, 2.0, 3.5); | ||
289 | QCOMPARE(data.translation(), QVector3D(2.75, 6.25, 3.5)); | 451 | QCOMPARE(data.translation(), QVector3D(2.75, 6.25, 3.5)); | ||
290 | } | 452 | } | ||
291 | 453 | | |||
292 | void TestWindowPaintData::testMultiplyBrightness() | 454 | void TestWindowPaintData::testMultiplyBrightness() | ||
293 | { | 455 | { | ||
294 | MockEffectWindowHelper helper; | 456 | MockEffectWindow w; | ||
295 | MockEffectWindow w(&helper); | | |||
296 | WindowPaintData data(&w); | 457 | WindowPaintData data(&w); | ||
297 | QCOMPARE(0.2, data.multiplyBrightness(0.2)); | 458 | QCOMPARE(0.2, data.multiplyBrightness(0.2)); | ||
298 | QCOMPARE(0.2, data.brightness()); | 459 | QCOMPARE(0.2, data.brightness()); | ||
299 | QCOMPARE(0.6, data.multiplyBrightness(3.0)); | 460 | QCOMPARE(0.6, data.multiplyBrightness(3.0)); | ||
300 | QCOMPARE(0.6, data.brightness()); | 461 | QCOMPARE(0.6, data.brightness()); | ||
301 | // just for safety | 462 | // just for safety | ||
302 | QCOMPARE(1.0, data.opacity()); | 463 | QCOMPARE(1.0, data.opacity()); | ||
303 | QCOMPARE(1.0, data.saturation()); | 464 | QCOMPARE(1.0, data.saturation()); | ||
304 | } | 465 | } | ||
305 | 466 | | |||
306 | void TestWindowPaintData::testMultiplyOpacity() | 467 | void TestWindowPaintData::testMultiplyOpacity() | ||
307 | { | 468 | { | ||
308 | MockEffectWindowHelper helper; | 469 | MockEffectWindow w; | ||
309 | MockEffectWindow w(&helper); | | |||
310 | WindowPaintData data(&w); | 470 | WindowPaintData data(&w); | ||
311 | QCOMPARE(0.2, data.multiplyOpacity(0.2)); | 471 | QCOMPARE(0.2, data.multiplyOpacity(0.2)); | ||
312 | QCOMPARE(0.2, data.opacity()); | 472 | QCOMPARE(0.2, data.opacity()); | ||
313 | QCOMPARE(0.6, data.multiplyOpacity(3.0)); | 473 | QCOMPARE(0.6, data.multiplyOpacity(3.0)); | ||
314 | QCOMPARE(0.6, data.opacity()); | 474 | QCOMPARE(0.6, data.opacity()); | ||
315 | // just for safety | 475 | // just for safety | ||
316 | QCOMPARE(1.0, data.brightness()); | 476 | QCOMPARE(1.0, data.brightness()); | ||
317 | QCOMPARE(1.0, data.saturation()); | 477 | QCOMPARE(1.0, data.saturation()); | ||
318 | } | 478 | } | ||
319 | 479 | | |||
320 | void TestWindowPaintData::testMultiplySaturation() | 480 | void TestWindowPaintData::testMultiplySaturation() | ||
321 | { | 481 | { | ||
322 | MockEffectWindowHelper helper; | 482 | MockEffectWindow w; | ||
323 | MockEffectWindow w(&helper); | | |||
324 | WindowPaintData data(&w); | 483 | WindowPaintData data(&w); | ||
325 | QCOMPARE(0.2, data.multiplySaturation(0.2)); | 484 | QCOMPARE(0.2, data.multiplySaturation(0.2)); | ||
326 | QCOMPARE(0.2, data.saturation()); | 485 | QCOMPARE(0.2, data.saturation()); | ||
327 | QCOMPARE(0.6, data.multiplySaturation(3.0)); | 486 | QCOMPARE(0.6, data.multiplySaturation(3.0)); | ||
328 | QCOMPARE(0.6, data.saturation()); | 487 | QCOMPARE(0.6, data.saturation()); | ||
329 | // just for safety | 488 | // just for safety | ||
330 | QCOMPARE(1.0, data.brightness()); | 489 | QCOMPARE(1.0, data.brightness()); | ||
331 | QCOMPARE(1.0, data.opacity()); | 490 | QCOMPARE(1.0, data.opacity()); | ||
332 | } | 491 | } | ||
333 | 492 | | |||
334 | QTEST_MAIN(TestWindowPaintData) | 493 | QTEST_MAIN(TestWindowPaintData) | ||
335 | #include "test_window_paint_data.moc" | 494 | #include "test_window_paint_data.moc" |
Missing override.