~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to demos/affine/xform.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "xform.h"
 
2
#include "hoverpoints.h"
 
3
#include "arthurwidgets.h"
 
4
 
 
5
#include <qlayout.h>
 
6
#include <qpainter.h>
 
7
#include <qpainterpath.h>
 
8
 
 
9
const int alpha = 155;
 
10
 
 
11
XFormView::XFormView(QWidget *parent)
 
12
    : ArthurFrame(parent)
 
13
{
 
14
    setAttribute(Qt::WA_MouseTracking);
 
15
    type = VectorType;
 
16
    rotation = 0.0;
 
17
    scale = 1.0;
 
18
    shear = 0.0;
 
19
 
 
20
    pixmap = QPixmap(":/res/bg1.jpg");
 
21
    pts = new HoverPoints(this, HoverPoints::CircleShape);
 
22
    pts->setConnectionType(HoverPoints::LineConnection);
 
23
    pts->setEditable(false);
 
24
    pts->setPointSize(QSize(15, 15));
 
25
    pts->setShapeBrush(QBrush(QColor(151, 0, 0, alpha)));
 
26
    pts->setShapePen(QPen(QColor(255, 100, 50, alpha)));
 
27
    pts->setConnectionPen(QPen(QColor(151, 0, 0, alpha), 0, Qt::DotLine, Qt::FlatCap, Qt::BevelJoin));
 
28
    pts->setBoundingRect(QRectF(0, 0, 500, 500));
 
29
    ctrlPoints << QPointF(250, 250) << QPointF(350, 250);
 
30
    pts->setPoints(ctrlPoints);
 
31
    connect(pts, SIGNAL(pointsChanged(const QPolygonF&)),
 
32
            this, SLOT(updateCtrlPoints(const QPolygonF &)));
 
33
    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 
34
}
 
35
 
 
36
void XFormView::mousePressEvent(QMouseEvent *)
 
37
{
 
38
    setDescriptionEnabled(false);
 
39
}
 
40
 
 
41
void XFormView::resizeEvent(QResizeEvent *)
 
42
{
 
43
    pts->setBoundingRect(rect());
 
44
}
 
45
 
 
46
void XFormView::paint(QPainter *p)
 
47
{
 
48
    p->save();
 
49
    p->setRenderHint(QPainter::Antialiasing);
 
50
    p->setRenderHint(QPainter::SmoothPixmapTransform);
 
51
    switch (type) {
 
52
    case VectorType:
 
53
        drawVectorType(p);
 
54
        break;
 
55
    case PixmapType:
 
56
        drawPixmapType(p);
 
57
        break;
 
58
    case TextType:
 
59
        drawTextType(p);
 
60
        break;
 
61
    }
 
62
    p->restore();
 
63
}
 
64
 
 
65
void XFormView::updateCtrlPoints(const QPolygonF &points)
 
66
{
 
67
    QPointF trans = points.at(0) - ctrlPoints.at(0);
 
68
 
 
69
    if (qAbs(points.at(0).x() - points.at(1).x()) < 10
 
70
        && qAbs(points.at(0).y() - points.at(1).y()) < 10)
 
71
        pts->setPoints(ctrlPoints);
 
72
    if (!trans.isNull()) {
 
73
        ctrlPoints[0] = points.at(0);
 
74
        ctrlPoints[1] += trans;
 
75
        pts->setPoints(ctrlPoints);
 
76
    }
 
77
    ctrlPoints = points;
 
78
 
 
79
    QLineF line(ctrlPoints.at(0), ctrlPoints.at(1));
 
80
    rotation = line.angle(QLineF(0, 0, 1, 0));
 
81
    if (line.dy() < 0)
 
82
        rotation = 360 - rotation;
 
83
 
 
84
    if (trans.isNull())
 
85
        emit rotationChanged(int(rotation*10));
 
86
}
 
87
 
 
88
void XFormView::setVectorType()
 
89
{
 
90
    type = VectorType;
 
91
    update();
 
92
}
 
93
 
 
94
void XFormView::setPixmapType()
 
95
{
 
96
    type = PixmapType;
 
97
    update();
 
98
}
 
99
 
 
100
void XFormView::setTextType()
 
101
{
 
102
    type = TextType;
 
103
    update();
 
104
}
 
105
 
 
106
void XFormView::setAnimation(bool animate)
 
107
{
 
108
    timer.stop();
 
109
    if (animate)
 
110
        timer.start(25, this);
 
111
}
 
112
 
 
113
void XFormView::changeRotation(int r)
 
114
{
 
115
    double old_rot = rotation;
 
116
    rotation = double(r/10.0);
 
117
 
 
118
    QPointF center(pts->points().at(0));
 
119
    QMatrix m;
 
120
    m.translate(center.x(), center.y());
 
121
    m.rotate(rotation - old_rot);
 
122
    m.translate(-center.x(), -center.y());
 
123
    pts->setPoints(pts->points() * m);
 
124
 
 
125
    update();
 
126
}
 
127
 
 
128
void XFormView::changeScale(int s)
 
129
{
 
130
    scale = double(s/1000.0);
 
131
    update();
 
132
}
 
133
 
 
134
void XFormView::changeShear(int s)
 
135
{
 
136
    shear = double(s/1000.0);
 
137
    update();
 
138
}
 
139
 
 
140
void XFormView::timerEvent(QTimerEvent *e)
 
141
{
 
142
    if (e->timerId() == timer.timerId()) {
 
143
        QPointF center(pts->points().at(0));
 
144
        QMatrix m;
 
145
        m.translate(center.x(), center.y());
 
146
        m.rotate(0.2);
 
147
        m.translate(-center.x(), -center.y());
 
148
        pts->setPoints(pts->points() * m);
 
149
 
 
150
        setUpdatesEnabled(false);
 
151
        static double scale_inc = 0.003;
 
152
        static double shear_inc = -0.001;
 
153
        emit scaleChanged(int((scale + scale_inc) * 1000));
 
154
        emit shearChanged(int((shear + shear_inc) * 1000));
 
155
        if (scale >= 4.0 || scale <= 0.1)
 
156
            scale_inc = -scale_inc;
 
157
        if (shear >= 1.0 || shear <= -1.0)
 
158
            shear_inc = -shear_inc;
 
159
        setUpdatesEnabled(true);
 
160
 
 
161
        pts->firePointChange();
 
162
    }
 
163
}
 
164
 
 
165
void XFormView::wheelEvent(QWheelEvent *e)
 
166
{
 
167
    scale += e->delta()/600.0;
 
168
    scale = qMax(.1, qMin(4.0, scale));
 
169
    emit scaleChanged(int(scale*1000));
 
170
}
 
171
 
 
172
void XFormView::reset()
 
173
{
 
174
    emit rotationChanged(0);
 
175
    emit scaleChanged(1000);
 
176
    emit shearChanged(0);
 
177
    ctrlPoints = QPolygonF();
 
178
    ctrlPoints << QPointF(250, 250) << QPointF(350, 250);
 
179
    pts->setPoints(ctrlPoints);
 
180
    pts->firePointChange();
 
181
}
 
182
 
 
183
void XFormView::drawPixmapType(QPainter *painter)
 
184
{
 
185
    QPointF center(pixmap.width()/2.0, pixmap.height()/2.0);
 
186
    painter->translate(ctrlPoints.at(0) - center);
 
187
 
 
188
    painter->translate(center);
 
189
    painter->rotate(rotation);
 
190
    painter->scale(scale, scale);
 
191
    painter->shear(shear, shear);
 
192
    painter->translate(-center);
 
193
 
 
194
    painter->drawPixmap(QPointF(0, 0), pixmap);
 
195
    painter->setPen(QPen(QColor(255, 0, 0, alpha), 1, Qt::DotLine, Qt::FlatCap, Qt::BevelJoin));
 
196
    painter->setBrush(Qt::NoBrush);
 
197
    painter->drawRect(QRectF(0, 0, pixmap.width(), pixmap.height()).adjusted(-2, -2, 2, 2));
 
198
}
 
199
 
 
200
void XFormView::drawTextType(QPainter *painter)
 
201
{
 
202
    QFont f("times new roman,utopia");
 
203
    f.setStyleStrategy(QFont::ForceOutline);
 
204
    f.setPointSize(72);
 
205
    f.setStyleHint(QFont::Times);
 
206
    painter->setFont(f);
 
207
 
 
208
    QFontMetrics fm(f);
 
209
    QRectF br(fm.boundingRect(textEditor->text()));
 
210
    QPointF center(br.center());
 
211
    painter->translate(ctrlPoints.at(0) - center);
 
212
 
 
213
    painter->translate(center);
 
214
    painter->rotate(rotation);
 
215
    painter->scale(scale, scale);
 
216
    painter->shear(shear, shear);
 
217
    painter->translate(-center);
 
218
 
 
219
    painter->drawText(0, 0, textEditor->text());
 
220
    painter->setPen(QPen(QColor(255, 0, 0, alpha), 1, Qt::DotLine, Qt::FlatCap, Qt::BevelJoin));
 
221
    painter->setBrush(Qt::NoBrush);
 
222
    painter->drawRect(br.adjusted(-1, -1, 1, 1));
 
223
}
 
224
 
 
225
void XFormView::drawVectorType(QPainter *painter)
 
226
{
 
227
    QPainterPath path;
 
228
    painter->translate(ctrlPoints.at(0) - QPointF(250,250));
 
229
 
 
230
    painter->scale(0.77, 0.77);
 
231
    painter->translate(98.9154 + 30 , -217.691 - 20);
 
232
 
 
233
    QRect br(-55, 275, 500, 590);
 
234
    QPoint center = br.center();
 
235
    painter->translate(center.x(), center.y());
 
236
    painter->rotate(rotation);
 
237
    painter->scale(scale, scale);
 
238
    painter->shear(shear, shear);
 
239
    painter->translate(-center.x(), -center.y());
 
240
 
 
241
    painter->setPen(Qt::NoPen);
 
242
    path.moveTo(120, 470);
 
243
    path.lineTo(60+245, 470);
 
244
    path.lineTo(60+245, 470+350);
 
245
    path.lineTo(60, 470+350);
 
246
    path.lineTo(60, 470+80);
 
247
 
 
248
    painter->setBrush(Qt::white);
 
249
    painter->drawPath(path);
 
250
    path = QPainterPath();
 
251
 
 
252
    painter->setBrush(QColor( 193, 193, 191, 255));
 
253
    path.moveTo(329.336, 727.552);
 
254
    path.cubicTo(QPointF(315.224, 726.328), QPointF(304.136, 715.816), QPointF(303.128, 694.936));
 
255
    path.cubicTo(QPointF(306.368, 639.496), QPointF(309.608, 582.112), QPointF(271.232, 545.104));
 
256
    path.cubicTo(QPointF(265.256, 499.024), QPointF(244.016, 482.104), QPointF(234.008, 452.512));
 
257
    path.lineTo(218.24, 441.208);
 
258
    path.lineTo(237.104, 411.688);
 
259
    path.lineTo(245.168, 411.904);
 
260
    path.lineTo(323.936, 571.168);
 
261
    path.lineTo(340.424, 651.448);
 
262
    path.closeSubpath();
 
263
    painter->drawPath(path);
 
264
    path = QPainterPath();
 
265
 
 
266
    painter->setBrush(QColor(193, 193, 191, 255));
 
267
    path.moveTo(136.232, 439.696);
 
268
    path.cubicTo(QPointF(133.856, 455.248), QPointF(132.56, 470.512), QPointF(134.792, 485.272));
 
269
    path.cubicTo(QPointF(118.376, 507.592), QPointF(105.92, 530.128), QPointF(104.48, 553.312));
 
270
    path.cubicTo(QPointF(92.024, 586.504), QPointF(62.432, 614.584), QPointF(67.544, 680.104));
 
271
    path.cubicTo(QPointF(84.176, 697.456), QPointF(107.432, 713.584), QPointF(127.376, 730.36));
 
272
    path.cubicTo(QPointF(152.432, 751.312), QPointF(137.528, 778.96), QPointF(102.248, 772.408));
 
273
    path.cubicTo(QPointF(94.4, 763.768), QPointF(76.616, 709.624), QPointF(42.92, 676.288));
 
274
    path.lineTo(49.544, 632.584);
 
275
    path.lineTo(81.368, 547.408);
 
276
    path.lineTo(120.968, 484.048);
 
277
    path.lineTo(125.36, 456.688);
 
278
    path.lineTo(119.816, 386.776);
 
279
    path.lineTo(124.424, 361.216);
 
280
    path.lineTo(136.232, 439.696);
 
281
    path.closeSubpath();
 
282
    painter->drawPath(path);
 
283
    path = QPainterPath();
 
284
 
 
285
    painter->setBrush(QColor(193, 193, 191, 255));
 
286
    path.moveTo(115.64, 341.416);
 
287
    path.cubicTo(QPointF(116.576, 336.376), QPointF(117.8, 331.624), QPointF(119.312, 327.16));
 
288
    path.lineTo(121.688, 342.784);
 
289
    path.closeSubpath();
 
290
    painter->drawPath(path);
 
291
    path = QPainterPath();
 
292
 
 
293
    painter->setBrush(QColor(193, 193, 191, 255));
 
294
    path.moveTo(120.968, 500.464);
 
295
    path.cubicTo(QPointF(108.368, 523.792), QPointF(103.976, 546.256), QPointF(132.92, 550.216));
 
296
    path.cubicTo(QPointF(117.008, 553.888), QPointF(97.208, 568.648), QPointF(77.192, 593.488));
 
297
    path.lineTo(77.624, 543.016);
 
298
    path.lineTo(101.456, 503.272);
 
299
    path.closeSubpath();
 
300
    painter->drawPath(path);
 
301
    path = QPainterPath();
 
302
 
 
303
    painter->setBrush(QColor(193, 193, 191, 255));
 
304
    path.moveTo(-33.256, 818.488);
 
305
    path.cubicTo(QPointF(10.52, 838.144), QPointF(41.408, 837.064), QPointF(69.272, 850.96));
 
306
    path.cubicTo(QPointF(91.304, 862.552), QPointF(113.552, 861.184), QPointF(126.944, 847.144));
 
307
    path.cubicTo(QPointF(138.32, 832.456), QPointF(146.744, 831.736), QPointF(163.52, 830.224));
 
308
    path.cubicTo(QPointF(190.952, 828.568), QPointF(217.736, 828.28), QPointF(241.928, 830.8));
 
309
    path.lineTo(269.576, 833.032);
 
310
    path.cubicTo(QPointF(269.072, 864.064), QPointF(328.04, 867.88), QPointF(345.392, 844.336));
 
311
    path.cubicTo(QPointF(366.344, 819.424), QPointF(395.144, 808.264), QPointF(419.84, 790.192));
 
312
    path.lineTo(289.304, 725.536);
 
313
    path.cubicTo(QPointF(255.824, 806.464), QPointF(131.048, 827.632), QPointF(113.768, 763.264));
 
314
    path.closeSubpath();
 
315
    painter->drawPath(path);
 
316
    path = QPainterPath();
 
317
 
 
318
    painter->setBrush(QColor(193, 193, 191, 255));
 
319
    path.moveTo(286.424, 711.568);
 
320
    path.cubicTo(QPointF(273.824, 711.496), QPointF(260.936, 715.6), QPointF(261.944, 732.16));
 
321
    path.lineTo(266.192, 776.44);
 
322
    path.lineTo(304.424, 756.64);
 
323
    path.closeSubpath();
 
324
    painter->drawPath(path);
 
325
    path = QPainterPath();
 
326
 
 
327
    painter->setBrush(QColor(0, 0, 0, 255));
 
328
    path.moveTo(-37.36, 821.224);
 
329
    path.cubicTo(QPointF(7.136, 840.88), QPointF(38.6, 839.728), QPointF(66.968, 853.696));
 
330
    path.cubicTo(QPointF(89.36, 865.216), QPointF(111.968, 863.92), QPointF(125.648, 849.808));
 
331
    path.cubicTo(QPointF(137.24, 835.192), QPointF(145.808, 834.472), QPointF(162.872, 832.96));
 
332
    path.cubicTo(QPointF(190.736, 831.232), QPointF(218.024, 831.016), QPointF(242.648, 833.464));
 
333
    path.lineTo(270.728, 835.768);
 
334
    path.cubicTo(QPointF(270.224, 866.8), QPointF(330.272, 870.544), QPointF(347.912, 847));
 
335
    path.cubicTo(QPointF(369.224, 822.088), QPointF(398.528, 811), QPointF(423.656, 792.856));
 
336
    path.lineTo(290.816, 728.272);
 
337
    path.cubicTo(QPointF(256.76, 809.128), QPointF(129.824, 830.296), QPointF(112.256, 766));
 
338
    path.closeSubpath();
 
339
    painter->drawPath(path);
 
340
    path = QPainterPath();
 
341
 
 
342
    painter->setBrush(QColor(183, 114, 0, 255));
 
343
    path.moveTo(382.328, 691.984);
 
344
    path.cubicTo(QPointF(403.64, 698.968), QPointF(389.888, 720.28), QPointF(400.76, 732.52));
 
345
    path.cubicTo(QPointF(405.44, 742.888), QPointF(415.304, 752.032), QPointF(431.792, 760.528));
 
346
    path.cubicTo(QPointF(459.368, 774.424), QPointF(426.248, 799.336), QPointF(392.768, 812.08));
 
347
    path.cubicTo(QPointF(351.944, 825.616), QPointF(344.024, 862.912), QPointF(299.312, 851.896));
 
348
    path.cubicTo(QPointF(283.112, 846.496), QPointF(278.36, 831.808), QPointF(278.864, 809.128));
 
349
    path.cubicTo(QPointF(284.264, 762.76), QPointF(277.784, 730.432), QPointF(278.792, 698.824));
 
350
    path.cubicTo(QPointF(278.72, 686.152), QPointF(283.544, 684.64), QPointF(307.232, 687.952));
 
351
    path.cubicTo(QPointF(310.04, 726.328), QPointF(352.376, 727.336), QPointF(382.328, 691.984));
 
352
    path.closeSubpath();
 
353
    painter->drawPath(path);
 
354
    path = QPainterPath();
 
355
 
 
356
    painter->setBrush(QColor(242, 183, 0, 255));
 
357
    path.moveTo(339.632, 826.624);
 
358
    path.cubicTo(QPointF(371.6, 814.312), QPointF(403.856, 798.112), QPointF(429.848, 782.128));
 
359
    path.cubicTo(QPointF(437.84, 777.448), QPointF(438.92, 765.928), QPointF(427.688, 762.328));
 
360
    path.cubicTo(QPointF(403.352, 748.504), QPointF(390.104, 731.224), QPointF(392.912, 708.76));
 
361
    path.cubicTo(QPointF(393.344, 700.912), QPointF(383.696, 692.56), QPointF(381.104, 700.048));
 
362
    path.cubicTo(QPointF(359.864, 771.472), QPointF(291.32, 767.656), QPointF(300.752, 696.952));
 
363
    path.cubicTo(QPointF(301.256, 694.864), QPointF(301.76, 692.776), QPointF(302.264, 690.76));
 
364
    path.cubicTo(QPointF(289.952, 688.24), QPointF(285.2, 690.976), QPointF(285.776, 700.408));
 
365
    path.lineTo(295.28, 806.608);
 
366
    path.cubicTo(QPointF(297.656, 830.8), QPointF(317.312, 836.128), QPointF(339.632, 826.624));
 
367
    path.closeSubpath();
 
368
    painter->drawPath(path);
 
369
    path = QPainterPath();
 
370
 
 
371
    painter->setBrush(QColor(0, 0, 0, 255));
 
372
    path.moveTo(354.464, 537.544);
 
373
    path.cubicTo(QPointF(379.16, 569.8), QPointF(404.432, 651.088), QPointF(384.416, 691.552));
 
374
    path.cubicTo(QPointF(360.944, 737.776), QPointF(307.808, 743.248), QPointF(305.504, 695.8));
 
375
    path.cubicTo(QPointF(308.816, 639.64), QPointF(311.984, 581.536), QPointF(273.68, 544.096));
 
376
    path.cubicTo(QPointF(267.704, 497.368), QPointF(246.392, 480.232), QPointF(236.384, 450.28));
 
377
    path.lineTo(203.12, 426.088);
 
378
    path.lineTo(133.568, 435.088);
 
379
    path.cubicTo(QPointF(130.76, 452.152), QPointF(129.104, 468.784), QPointF(131.552, 484.912));
 
380
    path.cubicTo(QPointF(115.064, 507.376), QPointF(102.608, 530.056), QPointF(101.168, 553.312));
 
381
    path.cubicTo(QPointF(88.712, 586.648), QPointF(59.12, 614.944), QPointF(64.232, 680.752));
 
382
    path.cubicTo(QPointF(80.864, 698.248), QPointF(104.12, 714.448), QPointF(124.064, 731.296));
 
383
    path.cubicTo(QPointF(149.12, 752.392), QPointF(135.512, 776.296), QPointF(100.232, 769.672));
 
384
    path.cubicTo(QPointF(78.848, 746.056), QPointF(56.744, 722.872), QPointF(35.288, 699.328));
 
385
    path.cubicTo(QPointF(12.392, 683.056), QPointF(3.896, 662.176), QPointF(27.368, 630.496));
 
386
    path.cubicTo(QPointF(43.424, 609.04), QPointF(47.96, 562.456), QPointF(62, 543.664));
 
387
    path.cubicTo(QPointF(74.312, 525.16), QPointF(92.24, 508.6), QPointF(105.272, 490.096));
 
388
    path.cubicTo(QPointF(112.184, 477.928), QPointF(114.344, 468.568), QPointF(113.264, 454.456));
 
389
    path.lineTo(110.312, 369.136);
 
390
    path.cubicTo(QPointF(108.368, 307.216), QPointF(142.424, 274.24), QPointF(189.8, 275.248));
 
391
    path.cubicTo(QPointF(243.512, 275.752), QPointF(287.576, 312.472), QPointF(288.152, 378.28));
 
392
    path.cubicTo(QPointF(292.688, 410.32), QPointF(283.256, 428.68), QPointF(308.672, 474.472));
 
393
    path.cubicTo(QPointF(334.52, 522.712), QPointF(338.552, 520.12), QPointF(354.464, 537.544));
 
394
    path.closeSubpath();
 
395
    painter->drawPath(path);
 
396
    path = QPainterPath();
 
397
 
 
398
    painter->setBrush(QColor(193, 193, 191, 255));
 
399
    path.moveTo(261.296, 503.632);
 
400
    path.lineTo(263.528, 512.2);
 
401
    path.cubicTo(QPointF(257.696, 501.688), QPointF(250.712, 483.616), QPointF(241.928, 475.696));
 
402
    path.cubicTo(QPointF(239.264, 473.536), QPointF(235.808, 473.608), QPointF(233.72, 475.624));
 
403
    path.cubicTo(QPointF(222.056, 486.928), QPointF(193.112, 510.112), QPointF(169.928, 507.088));
 
404
    path.cubicTo(QPointF(152.072, 505.288), QPointF(134.648, 493.264), QPointF(130.832, 480.232));
 
405
    path.cubicTo(QPointF(128.816, 470.872), QPointF(129.752, 463.168), QPointF(130.976, 455.32));
 
406
    path.lineTo(240.704, 453.52);
 
407
    path.cubicTo(QPointF(238.472, 463.168), QPointF(253.088, 487), QPointF(261.296, 503.632));
 
408
    path.closeSubpath();
 
409
    painter->drawPath(path);
 
410
    path = QPainterPath();
 
411
 
 
412
    painter->setBrush(QColor(193, 193, 191, 255));
 
413
    path.moveTo(143.144, 363.232);
 
414
    path.cubicTo(QPointF(154.088, 363.232), QPointF(163.88, 376.84), QPointF(163.808, 395.632));
 
415
    path.cubicTo(QPointF(163.736, 408.232), QPointF(155.528, 411.472), QPointF(149.336, 417.016));
 
416
    path.cubicTo(QPointF(146.6, 419.536), QPointF(145.952, 433.144), QPointF(142.568, 433.144));
 
417
    path.cubicTo(QPointF(131.696, 433.144), QPointF(123.488, 413.776), QPointF(123.488, 395.632));
 
418
    path.cubicTo(QPointF(123.488, 377.56), QPointF(132.272, 363.232), QPointF(143.144, 363.232));
 
419
    path.closeSubpath();
 
420
    painter->drawPath(path);
 
421
    path = QPainterPath();
 
422
 
 
423
    painter->setBrush(QColor(255, 255, 255, 255));
 
424
    path.moveTo(144.368, 375.04);
 
425
    path.cubicTo(QPointF(154.088, 375.04), QPointF(160.856, 379.936), QPointF(161.648, 391.312));
 
426
    path.cubicTo(QPointF(162.224, 399.16), QPointF(160.136, 411.76), QPointF(154.664, 414.424));
 
427
    path.cubicTo(QPointF(152.144, 415.648), QPointF(143.432, 426.664), QPointF(140.408, 426.52));
 
428
    path.cubicTo(QPointF(128.096, 425.944), QPointF(125, 402.112), QPointF(125.936, 390.736));
 
429
    path.cubicTo(QPointF(126.8, 379.36), QPointF(134.72, 375.04), QPointF(144.368, 375.04));
 
430
    path.closeSubpath();
 
431
    painter->drawPath(path);
 
432
    path = QPainterPath();
 
433
 
 
434
    painter->setBrush(QColor(0, 0, 0, 255));
 
435
    path.moveTo(141.848, 382.672);
 
436
    path.cubicTo(QPointF(148.544, 382.096), QPointF(154.736, 389.728), QPointF(155.6, 399.664));
 
437
    path.cubicTo(QPointF(156.464, 409.6), QPointF(151.64, 418.24), QPointF(144.944, 418.816));
 
438
    path.cubicTo(QPointF(138.248, 419.392), QPointF(132.056, 411.76), QPointF(131.192, 401.752));
 
439
    path.cubicTo(QPointF(130.328, 391.816), QPointF(135.152, 383.248), QPointF(141.848, 382.672));
 
440
    path.closeSubpath();
 
441
    painter->drawPath(path);
 
442
    path = QPainterPath();
 
443
 
 
444
    painter->setBrush(QColor(193, 193, 191, 255));
 
445
    path.moveTo(151.064, 397.288);
 
446
    path.cubicTo(QPointF(151.424, 399.088), QPointF(149.408, 400.024), QPointF(148.832, 398.224));
 
447
    path.cubicTo(QPointF(148.256, 395.992), QPointF(146.888, 393.328), QPointF(145.088, 391.168));
 
448
    path.cubicTo(QPointF(143.936, 389.872), QPointF(145.088, 388.432), QPointF(146.528, 389.44));
 
449
    path.cubicTo(QPointF(149.048, 391.528), QPointF(150.488, 394.12), QPointF(151.064, 397.288));
 
450
    path.closeSubpath();
 
451
    painter->drawPath(path);
 
452
    path = QPainterPath();
 
453
 
 
454
    painter->setBrush(QColor(193, 193, 191, 255));
 
455
    path.moveTo(216.944, 360.712);
 
456
    path.cubicTo(QPointF(232.712, 360.712), QPointF(245.6, 377.416), QPointF(245.6, 397.792));
 
457
    path.cubicTo(QPointF(245.6, 418.24), QPointF(232.712, 434.872), QPointF(216.944, 434.872));
 
458
    path.cubicTo(QPointF(201.176, 434.872), QPointF(188.432, 418.24), QPointF(188.432, 397.792));
 
459
    path.cubicTo(QPointF(188.432, 377.416), QPointF(201.176, 360.712), QPointF(216.944, 360.712));
 
460
    path.closeSubpath();
 
461
    painter->drawPath(path);
 
462
    path = QPainterPath();
 
463
 
 
464
    painter->setBrush(QColor(255, 255, 255, 255));
 
465
    path.moveTo(224.792, 374.968);
 
466
    path.cubicTo(QPointF(235.664, 378.856), QPointF(241.928, 387.424), QPointF(242.72, 396.568));
 
467
    path.cubicTo(QPointF(243.656, 407.08), QPointF(239.408, 418.96), QPointF(230.264, 425.944));
 
468
    path.cubicTo(QPointF(227.672, 427.888), QPointF(197.72, 416.08), QPointF(195.992, 411.616));
 
469
    path.cubicTo(QPointF(193.4, 405.208), QPointF(191.816, 392.896), QPointF(193.76, 385.624));
 
470
    path.cubicTo(QPointF(194.552, 382.744), QPointF(197.216, 378.568), QPointF(201.176, 376.336));
 
471
    path.cubicTo(QPointF(207.44, 372.808), QPointF(216.656, 372.088), QPointF(224.792, 374.968));
 
472
    path.closeSubpath();
 
473
    painter->drawPath(path);
 
474
    path = QPainterPath();
 
475
 
 
476
    painter->setBrush(QColor(0, 0, 0, 255));
 
477
    path.moveTo(216.872, 380.944);
 
478
    path.cubicTo(QPointF(225.584, 380.944), QPointF(232.712, 389.296), QPointF(232.712, 399.448));
 
479
    path.cubicTo(QPointF(232.712, 409.672), QPointF(225.584, 418.024), QPointF(216.872, 418.024));
 
480
    path.cubicTo(QPointF(208.16, 418.024), QPointF(201.032, 409.672), QPointF(201.032, 399.448));
 
481
    path.cubicTo(QPointF(201.032, 389.296), QPointF(208.16, 380.944), QPointF(216.872, 380.944));
 
482
    path.closeSubpath();
 
483
    painter->drawPath(path);
 
484
    path = QPainterPath();
 
485
 
 
486
    painter->setBrush(QColor(193, 193, 191, 255));
 
487
    path.moveTo(227.096, 392.392);
 
488
    path.cubicTo(QPointF(228.104, 394.048), QPointF(226.448, 395.776), QPointF(225.224, 394.12));
 
489
    path.cubicTo(QPointF(223.784, 392.104), QPointF(221.408, 389.944), QPointF(218.888, 388.432));
 
490
    path.cubicTo(QPointF(217.232, 387.568), QPointF(217.808, 385.624), QPointF(219.68, 386.2));
 
491
    path.cubicTo(QPointF(222.92, 387.28), QPointF(225.368, 389.368), QPointF(227.096, 392.392));
 
492
    path.closeSubpath();
 
493
    painter->drawPath(path);
 
494
    path = QPainterPath();
 
495
 
 
496
    painter->setBrush(QColor(183, 114, 0, 255));
 
497
    path.moveTo(164.96, 404.488);
 
498
    path.cubicTo(QPointF(172.376, 402.328), QPointF(184.112, 403.048), QPointF(192.248, 404.632));
 
499
    path.cubicTo(QPointF(200.384, 406.792), QPointF(222.056, 418.24), QPointF(245.024, 430.696));
 
500
    path.cubicTo(QPointF(247.976, 432.208), QPointF(248.84, 437.104), QPointF(245.024, 438.688));
 
501
    path.cubicTo(QPointF(239.12, 439.12), QPointF(249.272, 453.664), QPointF(238.904, 458.848));
 
502
    path.cubicTo(QPointF(223.352, 462.88), QPointF(198.44, 485.992), QPointF(186.128, 487.864));
 
503
    path.cubicTo(QPointF(179.288, 489.376), QPointF(172.232, 489.592), QPointF(164.6, 487.864));
 
504
    path.cubicTo(QPointF(140.552, 482.968), QPointF(134.216, 455.608), QPointF(122.912, 450.064));
 
505
    path.cubicTo(QPointF(119.816, 446.824), QPointF(121.4, 441.208), QPointF(122.408, 440.056));
 
506
    path.cubicTo(QPointF(123.632, 434.224), QPointF(149.696, 406.216), QPointF(164.96, 404.488));
 
507
    path.closeSubpath();
 
508
    painter->drawPath(path);
 
509
    path = QPainterPath();
 
510
 
 
511
    painter->setBrush(QColor(242, 183, 0, 255));
 
512
    path.moveTo(185.408, 405.856);
 
513
    path.cubicTo(QPointF(198.44, 407.296), QPointF(226.088, 423.928), QPointF(239.408, 430.624));
 
514
    path.cubicTo(QPointF(242.72, 432.424), QPointF(242.504, 437.824), QPointF(239.552, 438.688));
 
515
    path.cubicTo(QPointF(236.384, 440.488), QPointF(235.448, 438.256), QPointF(232.928, 437.896));
 
516
    path.cubicTo(QPointF(228.896, 435.736), QPointF(222.272, 440.92), QPointF(217.016, 444.88));
 
517
    path.cubicTo(QPointF(186.704, 467.776), QPointF(180.656, 465.256), QPointF(156.176, 462.664));
 
518
    path.cubicTo(QPointF(147.68, 460.576), QPointF(142.136, 457.984), QPointF(139.688, 455.968));
 
519
    path.cubicTo(QPointF(141.488, 445.888), QPointF(160.496, 407.656), QPointF(166.76, 406.792));
 
520
    path.cubicTo(QPointF(168.344, 404.704), QPointF(179.936, 404.632), QPointF(185.408, 405.856));
 
521
    path.closeSubpath();
 
522
    painter->drawPath(path);
 
523
    path = QPainterPath();
 
524
 
 
525
    painter->setBrush(QColor(183, 114, 0, 255));
 
526
    path.moveTo(190.664, 412.048);
 
527
    path.lineTo(193.76, 413.416);
 
528
    path.cubicTo(QPointF(196.064, 414.712), QPointF(193.256, 418.168), QPointF(190.736, 417.088));
 
529
    path.lineTo(186.2, 415.504);
 
530
    path.cubicTo(QPointF(183.536, 413.272), QPointF(186.704, 410.104), QPointF(190.664, 412.048));
 
531
    path.closeSubpath();
 
532
    painter->drawPath(path);
 
533
    path = QPainterPath();
 
534
 
 
535
    painter->setBrush(QColor(193, 193, 191, 255));
 
536
    path.moveTo(268.568, 452.368);
 
537
    path.cubicTo(QPointF(273.032, 454.384), QPointF(279.224, 457.192), QPointF(282.536, 460.144));
 
538
    path.cubicTo(QPointF(285.488, 464.104), QPointF(286.784, 468.064), QPointF(286.424, 472.024));
 
539
    path.cubicTo(QPointF(285.776, 474.544), QPointF(284.12, 476.344), QPointF(281.24, 477.424));
 
540
    path.cubicTo(QPointF(277.856, 478.216), QPointF(273.68, 477.424), QPointF(271.376, 474.112));
 
541
    path.cubicTo(QPointF(269.864, 471.448), QPointF(265.256, 462.16), QPointF(263.96, 460.576));
 
542
    path.cubicTo(QPointF(262.232, 457.12), QPointF(261.944, 454.456), QPointF(262.88, 452.368));
 
543
    path.cubicTo(QPointF(264.032, 451.288), QPointF(266.048, 451), QPointF(268.568, 452.368));
 
544
    path.closeSubpath();
 
545
    painter->drawPath(path);
 
546
    path = QPainterPath();
 
547
 
 
548
    painter->setBrush(QColor(255, 255, 255, 255));
 
549
    path.moveTo(273.752, 461.584);
 
550
    path.cubicTo(QPointF(275.48, 462.376), QPointF(277.928, 463.456), QPointF(279.224, 464.68));
 
551
    path.cubicTo(QPointF(280.376, 466.264), QPointF(280.88, 467.776), QPointF(280.736, 469.36));
 
552
    path.cubicTo(QPointF(280.52, 470.296), QPointF(279.8, 471.016), QPointF(278.72, 471.448));
 
553
    path.cubicTo(QPointF(277.352, 471.808), QPointF(275.768, 471.448), QPointF(274.832, 470.152));
 
554
    path.cubicTo(QPointF(274.256, 469.144), QPointF(272.456, 465.472), QPointF(271.952, 464.824));
 
555
    path.cubicTo(QPointF(271.232, 463.456), QPointF(271.088, 462.448), QPointF(271.448, 461.584));
 
556
    path.cubicTo(QPointF(271.952, 461.152), QPointF(272.744, 461.08), QPointF(273.752, 461.584));
 
557
    path.closeSubpath();
 
558
    painter->drawPath(path);
 
559
    path = QPainterPath();
 
560
 
 
561
    painter->setBrush(QColor(193, 193, 191, 255));
 
562
    path.moveTo(238.616, 358.552);
 
563
    path.cubicTo(QPointF(239.048, 359.2), QPointF(238.976, 359.776), QPointF(238.4, 360.28));
 
564
    path.cubicTo(QPointF(237.896, 360.784), QPointF(237.176, 360.712), QPointF(236.24, 360.208));
 
565
    path.lineTo(231.632, 356.248);
 
566
    path.cubicTo(QPointF(231.056, 355.744), QPointF(230.912, 354.952), QPointF(231.272, 354.088));
 
567
    path.cubicTo(QPointF(232.28, 353.44), QPointF(233.144, 353.44), QPointF(233.936, 354.088));
 
568
    path.closeSubpath();
 
569
    painter->drawPath(path);
 
570
    path = QPainterPath();
 
571
 
 
572
    painter->setBrush(QColor(193, 193, 191, 255));
 
573
    path.moveTo(235.592, 305.992);
 
574
    path.cubicTo(QPointF(239.624, 308.224), QPointF(240.848, 313.912), QPointF(238.184, 318.592));
 
575
    path.cubicTo(QPointF(235.592, 323.2), QPointF(230.12, 325.144), QPointF(226.016, 322.84));
 
576
    path.cubicTo(QPointF(221.984, 320.536), QPointF(220.76, 314.92), QPointF(223.424, 310.24));
 
577
    path.cubicTo(QPointF(226.016, 305.56), QPointF(231.488, 303.688), QPointF(235.592, 305.992));
 
578
    path.closeSubpath();
 
579
    painter->drawPath(path);
 
580
    path = QPainterPath();
 
581
 
 
582
    painter->setBrush(QColor(193, 193, 191, 255));
 
583
    path.moveTo(374.912, 680.536);
 
584
    path.cubicTo(QPointF(378.296, 683.128), QPointF(373.256, 687.376), QPointF(371.024, 686.296));
 
585
    path.cubicTo(QPointF(369.152, 685.648), QPointF(367.784, 683.488), QPointF(366.92, 682.408));
 
586
    path.cubicTo(QPointF(366.128, 681.184), QPointF(366.2, 679.168), QPointF(366.92, 678.448));
 
587
    path.cubicTo(QPointF(367.712, 677.44), QPointF(369.728, 677.656), QPointF(371.024, 678.52));
 
588
    path.cubicTo(QPointF(372.32, 679.168), QPointF(373.616, 679.888), QPointF(374.912, 680.536));
 
589
    path.closeSubpath();
 
590
    painter->drawPath(path);
 
591
    path = QPainterPath();
 
592
 
 
593
    painter->setBrush(QColor(193, 193, 191, 255));
 
594
    path.moveTo(297.44, 551.512);
 
595
    path.cubicTo(QPointF(338.984, 572.896), QPointF(350, 611.56), QPointF(332.072, 664.192));
 
596
    path.cubicTo(QPointF(330.992, 666.64), QPointF(334.16, 668.368), QPointF(335.24, 666.064));
 
597
    path.cubicTo(QPointF(354.824, 610.336), QPointF(341.432, 571.312), QPointF(299.024, 548.56));
 
598
    path.cubicTo(QPointF(296.864, 547.552), QPointF(295.28, 550.432), QPointF(297.44, 551.512));
 
599
    path.closeSubpath();
 
600
    painter->drawPath(path);
 
601
    path = QPainterPath();
 
602
 
 
603
    painter->setBrush(QColor(193, 193, 191, 255));
 
604
    path.moveTo(72.008, 569.512);
 
605
    path.cubicTo(QPointF(38.312, 627.256), QPointF(38.096, 662.68), QPointF(62.504, 681.328));
 
606
    path.cubicTo(QPointF(63.728, 682.264), QPointF(64.448, 680.032), QPointF(63.296, 679.168));
 
607
    path.cubicTo(QPointF(36.296, 655.48), QPointF(48.896, 615.52), QPointF(74.168, 570.88));
 
608
    path.cubicTo(QPointF(74.888, 569.584), QPointF(72.512, 568.432), QPointF(72.008, 569.512));
 
609
    path.closeSubpath();
 
610
    painter->drawPath(path);
 
611
    path = QPainterPath();
 
612
 
 
613
    painter->setBrush(QColor(193, 193, 191, 255));
 
614
    path.moveTo(289.376, 586.864);
 
615
    path.cubicTo(QPointF(289.232, 589.168), QPointF(288.368, 589.528), QPointF(286.424, 587.368));
 
616
    path.cubicTo(QPointF(279.8, 575.848), QPointF(235.088, 551.44), QPointF(213.344, 548.704));
 
617
    path.cubicTo(QPointF(209.24, 547.264), QPointF(209.456, 545.392), QPointF(213.488, 544.816));
 
618
    path.cubicTo(QPointF(229.184, 544.816), QPointF(241.28, 537.904), QPointF(254.96, 537.904));
 
619
    path.cubicTo(QPointF(258.704, 538.048), QPointF(262.304, 539.488), QPointF(264.392, 541.648));
 
620
    path.cubicTo(QPointF(269.504, 544.96), QPointF(288.08, 570.592), QPointF(289.376, 586.864));
 
621
    path.closeSubpath();
 
622
    painter->drawPath(path);
 
623
    path = QPainterPath();
 
624
 
 
625
    painter->setBrush(QColor(193, 193, 191, 255));
 
626
    path.moveTo(180.152, 546.832);
 
627
    path.cubicTo(QPointF(180.872, 550.792), QPointF(163.808, 545.68), QPointF(164.744, 556.696));
 
628
    path.cubicTo(QPointF(165.032, 559.72), QPointF(160.496, 561.376), QPointF(160.64, 556.696));
 
629
    path.cubicTo(QPointF(160.64, 548.272), QPointF(161.072, 548.416), QPointF(152.72, 546.832));
 
630
    path.cubicTo(QPointF(151.208, 546.76), QPointF(151.352, 544.528), QPointF(152.72, 544.816));
 
631
    path.lineTo(152.72, 544.816);
 
632
    path.cubicTo(QPointF(158.696, 546.472), QPointF(166.76, 542.872), QPointF(166.4, 538.84));
 
633
    path.cubicTo(QPointF(166.256, 537.472), QPointF(168.56, 537.688), QPointF(168.488, 538.84));
 
634
    path.cubicTo(QPointF(167.984, 545.248), QPointF(181.664, 542.152), QPointF(180.152, 546.832));
 
635
    path.closeSubpath();
 
636
    painter->drawPath(path);
 
637
    path = QPainterPath();
 
638
 
 
639
    painter->setBrush(QColor(193, 193, 191, 255));
 
640
    path.moveTo(151.568, 705.376);
 
641
    path.cubicTo(QPointF(151.64, 708.328), QPointF(148.76, 707.68), QPointF(148.544, 705.592));
 
642
    path.cubicTo(QPointF(140.192, 680.536), QPointF(143.72, 618.832), QPointF(151.856, 598.96));
 
643
    path.cubicTo(QPointF(152.432, 596.08), QPointF(156.248, 596.944), QPointF(155.744, 598.96));
 
644
    path.cubicTo(QPointF(147.104, 635.464), QPointF(147.248, 673.048), QPointF(151.568, 705.376));
 
645
    path.closeSubpath();
 
646
    painter->drawPath(path);
 
647
    path = QPainterPath();
 
648
 
 
649
    painter->setBrush(QColor(183, 114, 0, 255));
 
650
    path.moveTo(51.704, 684.424);
 
651
    path.cubicTo(QPointF(75.68, 707.824), QPointF(91.376, 743.248), QPointF(114.632, 775.288));
 
652
    path.cubicTo(QPointF(148.472, 816.04), QPointF(121.472, 858.304), QPointF(66.464, 845.56));
 
653
    path.cubicTo(QPointF(38.888, 835.192), QPointF(-0.784, 836.344), QPointF(-32.68, 825.832));
 
654
    path.cubicTo(QPointF(-55.072, 820.36), QPointF(-55.864, 809.272), QPointF(-44.416, 787.6));
 
655
    path.cubicTo(QPointF(-40.384, 773.776), QPointF(-40.024, 751.312), QPointF(-43.768, 732.592));
 
656
    path.cubicTo(QPointF(-45.784, 718.408), QPointF(-39.232, 710.488), QPointF(-24.112, 708.832));
 
657
    path.lineTo(-24.112, 708.832);
 
658
    path.cubicTo(QPointF(-11.296, 708.688), QPointF(6.56, 713.872), QPointF(16.28, 686.44));
 
659
    path.cubicTo(QPointF(23.552, 673.336), QPointF(40.976, 672.976), QPointF(51.704, 684.424));
 
660
    path.closeSubpath();
 
661
    painter->drawPath(path);
 
662
    path = QPainterPath();
 
663
 
 
664
    painter->setBrush(QColor(242, 183, 0, 255));
 
665
    path.moveTo(24.632, 699.04);
 
666
    path.cubicTo(QPointF(23.84, 680.968), QPointF(39.32, 677.296), QPointF(49.688, 688.312));
 
667
    path.cubicTo(QPointF(68.192, 710.992), QPointF(85.112, 736.048), QPointF(100.376, 764.992));
 
668
    path.cubicTo(QPointF(124.712, 804.16), QPointF(104.624, 842.68), QPointF(67.904, 828.064));
 
669
    path.cubicTo(QPointF(49.688, 817.84), QPointF(6.128, 813.304), QPointF(-17.344, 809.128));
 
670
    path.cubicTo(QPointF(-33.04, 807.832), QPointF(-35.128, 797.608), QPointF(-29.152, 791.848));
 
671
    path.cubicTo(QPointF(-20.944, 782.416), QPointF(-20.08, 759.808), QPointF(-27.856, 740.512));
 
672
    path.cubicTo(QPointF(-35.56, 728.56), QPointF(-21.088, 715.384), QPointF(-9.712, 720.856));
 
673
    path.cubicTo(QPointF(0.8, 727.048), QPointF(25.64, 713.08), QPointF(24.632, 699.04));
 
674
    path.closeSubpath();
 
675
    painter->drawPath(path);
 
676
 
 
677
    painter->setPen(QPen(QColor(255, 0, 0, alpha), 1, Qt::DotLine, Qt::FlatCap, Qt::BevelJoin));
 
678
    painter->setBrush(Qt::NoBrush);
 
679
    painter->drawRect(br.adjusted(-1, -1, 1, 1));
 
680
}
 
681
 
 
682
 
 
683
XFormWidget::XFormWidget(QWidget *parent)
 
684
    : QWidget(parent)
 
685
{
 
686
    setWindowTitle("Affine Transformations");
 
687
 
 
688
    view = new XFormView(this);
 
689
 
 
690
    QGroupBox *mainGroup = new ArthurGroupBox(this);
 
691
    mainGroup->setFixedWidth(180);
 
692
    mainGroup->setTitle("Affine Transformations");
 
693
 
 
694
    ArthurGroupBox *rotateGroup = new ArthurGroupBox(mainGroup);
 
695
    rotateGroup->setAttribute(Qt::WA_ContentsPropagated);
 
696
    rotateGroup->setTitle("Rotate");
 
697
    QSlider *rotateSlider = new QSlider(Qt::Horizontal, rotateGroup);
 
698
    rotateSlider->setRange(0, 3600);
 
699
    rotateSlider->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
 
700
 
 
701
    ArthurGroupBox *scaleGroup = new ArthurGroupBox(mainGroup);
 
702
    scaleGroup->setAttribute(Qt::WA_ContentsPropagated);
 
703
    scaleGroup->setTitle("Scale");
 
704
    QSlider *scaleSlider = new QSlider(Qt::Horizontal, scaleGroup);
 
705
    scaleSlider->setRange(1, 4000);
 
706
    scaleSlider->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
 
707
 
 
708
    ArthurGroupBox *shearGroup = new ArthurGroupBox(mainGroup);
 
709
    shearGroup->setAttribute(Qt::WA_ContentsPropagated);
 
710
    shearGroup->setTitle("Shear");
 
711
    QSlider *shearSlider = new QSlider(Qt::Horizontal, shearGroup);
 
712
    shearSlider->setRange(-990, 990);
 
713
    shearSlider->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
 
714
 
 
715
    ArthurGroupBox *typeGroup = new ArthurGroupBox(mainGroup);
 
716
    typeGroup->setAttribute(Qt::WA_ContentsPropagated);
 
717
    typeGroup->setTitle("Type");
 
718
    QRadioButton *vectorType = new QRadioButton(typeGroup);
 
719
    QRadioButton *pixmapType = new QRadioButton(typeGroup);
 
720
    QRadioButton *textType= new QRadioButton(typeGroup);
 
721
    vectorType->setText("Vector Image");
 
722
    pixmapType->setText("Pixmap");
 
723
    textType->setText("Text");
 
724
    view->textEditor = new QLineEdit(typeGroup);
 
725
 
 
726
    QPushButton *resetButton = new QPushButton(mainGroup);
 
727
    resetButton->setText("Reset Transform");
 
728
 
 
729
    QPushButton *animateButton = new QPushButton(mainGroup);
 
730
    animateButton->setText("Animate");
 
731
    animateButton->setCheckable(true);
 
732
 
 
733
    QPushButton *showSourceButton = new QPushButton(mainGroup);
 
734
    showSourceButton->setText("Show Source");
 
735
 
 
736
    QPushButton *whatsThisButton = new QPushButton(mainGroup);
 
737
    whatsThisButton->setText("What's This?");
 
738
    whatsThisButton->setCheckable(true);
 
739
 
 
740
    QHBoxLayout *viewLayout = new QHBoxLayout(this);
 
741
    viewLayout->addWidget(view);
 
742
    viewLayout->addWidget(mainGroup);
 
743
 
 
744
    QVBoxLayout *rotateGroupLayout = new QVBoxLayout(rotateGroup);
 
745
    rotateGroupLayout->addWidget(rotateSlider);
 
746
 
 
747
    QVBoxLayout *scaleGroupLayout = new QVBoxLayout(scaleGroup);
 
748
    scaleGroupLayout->addWidget(scaleSlider);
 
749
 
 
750
    QVBoxLayout *shearGroupLayout = new QVBoxLayout(shearGroup);
 
751
    shearGroupLayout->addWidget(shearSlider);
 
752
 
 
753
    QVBoxLayout *typeGroupLayout = new QVBoxLayout(typeGroup);
 
754
    typeGroupLayout->addWidget(vectorType);
 
755
    typeGroupLayout->addWidget(pixmapType);
 
756
    typeGroupLayout->addWidget(textType);
 
757
    typeGroupLayout->addSpacing(4);
 
758
    typeGroupLayout->addWidget(view->textEditor);
 
759
 
 
760
    QVBoxLayout *mainGroupLayout = new QVBoxLayout(mainGroup);
 
761
    mainGroupLayout->addWidget(rotateGroup);
 
762
    mainGroupLayout->addWidget(scaleGroup);
 
763
    mainGroupLayout->addWidget(shearGroup);
 
764
    mainGroupLayout->addWidget(typeGroup);
 
765
    mainGroupLayout->addStretch(1);
 
766
    mainGroupLayout->addWidget(resetButton);
 
767
    mainGroupLayout->addWidget(animateButton);
 
768
    mainGroupLayout->addWidget(showSourceButton);
 
769
    mainGroupLayout->addWidget(whatsThisButton);
 
770
 
 
771
    connect(rotateSlider, SIGNAL(valueChanged(int)), view, SLOT(changeRotation(int)));
 
772
    connect(shearSlider, SIGNAL(valueChanged(int)), view, SLOT(changeShear(int)));
 
773
    connect(scaleSlider, SIGNAL(valueChanged(int)), view, SLOT(changeScale(int)));
 
774
 
 
775
    connect(vectorType, SIGNAL(clicked()), view, SLOT(setVectorType()));
 
776
    connect(pixmapType, SIGNAL(clicked()), view, SLOT(setPixmapType()));
 
777
    connect(textType, SIGNAL(clicked()), view, SLOT(setTextType()));
 
778
    connect(textType, SIGNAL(toggled(bool)), view->textEditor, SLOT(setEnabled(bool)));
 
779
    connect(view->textEditor, SIGNAL(textChanged(const QString &)), view, SLOT(update()));
 
780
 
 
781
    connect(view, SIGNAL(rotationChanged(int)), rotateSlider, SLOT(setValue(int)));
 
782
    connect(view, SIGNAL(scaleChanged(int)), scaleSlider, SLOT(setValue(int)));
 
783
    connect(view, SIGNAL(shearChanged(int)), shearSlider, SLOT(setValue(int)));
 
784
 
 
785
    connect(resetButton, SIGNAL(clicked()), view, SLOT(reset()));
 
786
    connect(animateButton, SIGNAL(clicked(bool)), view, SLOT(setAnimation(bool)));
 
787
    connect(whatsThisButton, SIGNAL(clicked(bool)), view, SLOT(setDescriptionEnabled(bool)));
 
788
    connect(whatsThisButton, SIGNAL(clicked(bool)), view->hoverPoints(), SLOT(setDisabled(bool)));
 
789
    connect(view, SIGNAL(descriptionEnabledChanged(bool)), view->hoverPoints(), SLOT(setDisabled(bool)));
 
790
    connect(view, SIGNAL(descriptionEnabledChanged(bool)), whatsThisButton, SLOT(setChecked(bool)));
 
791
    connect(showSourceButton, SIGNAL(clicked()), view, SLOT(showSource()));
 
792
 
 
793
    view->loadSourceFile(":res/xform.cpp");
 
794
    view->loadDescription(":res/xform.html");
 
795
 
 
796
    // defaults
 
797
    view->reset();
 
798
    vectorType->setChecked(true);
 
799
    view->textEditor->setText("Trolltech");
 
800
    view->textEditor->setEnabled(false);
 
801
 
 
802
    animateButton->animateClick();
 
803
}