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

« back to all changes in this revision

Viewing changes to doc/html/demos-gradients-gradients-cpp.html

  • 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
<?xml version="1.0" encoding="iso-8859-1"?>
 
2
<!DOCTYPE html
 
3
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
 
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
5
<head>
 
6
    <title>Qt 4.0: gradients.cpp Example File (demos/gradients/gradients.cpp)</title>
 
7
    <style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
 
8
a:link { color: #004faf; text-decoration: none }
 
9
a:visited { color: #672967; text-decoration: none }
 
10
td.postheader { font-family: sans-serif }
 
11
tr.address { font-family: sans-serif }
 
12
body { background: #ffffff; color: black; }</style>
 
13
</head>
 
14
<body>
 
15
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 
16
<tr>
 
17
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></td>
 
18
<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a>&nbsp;&middot; <a href="classes.html"><font color="#004faf">All&nbsp;Classes</font></a>&nbsp;&middot; <a href="mainclasses.html"><font color="#004faf">Main&nbsp;Classes</font></a>&nbsp;&middot; <a href="annotated.html"><font color="#004faf">Annotated</font></a>&nbsp;&middot; <a href="groups.html"><font color="#004faf">Grouped&nbsp;Classes</font></a>&nbsp;&middot; <a href="functions.html"><font color="#004faf">Functions</font></a></td>
 
19
<td align="right" valign="top" width="230"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></td></tr></table><h1 align="center">gradients.cpp Example File<br /><small><small>demos/gradients/gradients.cpp</small></small></h1>
 
20
<pre>&nbsp;   #include &quot;gradients.h&quot;
 
21
    #include &quot;hoverpoints.h&quot;
 
22
 
 
23
    ShadeWidget::ShadeWidget(ShadeType type, QWidget *parent)
 
24
        : QWidget(parent), m_shade_type(type), m_alpha_gradient(QLinearGradient(0, 0, 0, 0))
 
25
    {
 
26
 
 
27
        // Checkers background
 
28
        if (m_shade_type == ARGBShade) {
 
29
            QPixmap pm(20, 20);
 
30
            QPainter pmp(&amp;pm);
 
31
            pmp.fillRect(0, 0, 10, 10, Qt::lightGray);
 
32
            pmp.fillRect(10, 10, 10, 10, Qt::lightGray);
 
33
            pmp.fillRect(0, 10, 10, 10, Qt::darkGray);
 
34
            pmp.fillRect(10, 0, 10, 10, Qt::darkGray);
 
35
            pmp.end();
 
36
            QPalette pal = palette();
 
37
            pal.setBrush(backgroundRole(), QBrush(pm));
 
38
            setPalette(pal);
 
39
 
 
40
        } else {
 
41
            setAttribute(Qt::WA_NoBackground);
 
42
 
 
43
        }
 
44
 
 
45
        QPolygonF points;
 
46
        points &lt;&lt; QPointF(0, sizeHint().height())
 
47
               &lt;&lt; QPointF(sizeHint().width(), 0);
 
48
 
 
49
        m_hoverPoints = new HoverPoints(this, HoverPoints::CircleShape);
 
50
    //     m_hoverPoints-&gt;setConnectionType(HoverPoints::LineConnection);
 
51
        m_hoverPoints-&gt;setPoints(points);
 
52
        m_hoverPoints-&gt;setPointLock(0, HoverPoints::LockToLeft);
 
53
        m_hoverPoints-&gt;setPointLock(1, HoverPoints::LockToRight);
 
54
        m_hoverPoints-&gt;setSortType(HoverPoints::XSort);
 
55
 
 
56
        setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
 
57
 
 
58
        connect(m_hoverPoints, SIGNAL(pointsChanged(const QPolygonF &amp;)), this, SIGNAL(colorsChanged()));
 
59
    }
 
60
 
 
61
    QPolygonF ShadeWidget::points() const
 
62
    {
 
63
        return m_hoverPoints-&gt;points();
 
64
    }
 
65
 
 
66
    uint ShadeWidget::colorAt(int x)
 
67
    {
 
68
        generateShade();
 
69
 
 
70
        QPolygonF pts = m_hoverPoints-&gt;points();
 
71
        for (int i=1; i &lt; pts.size(); ++i) {
 
72
            if (pts.at(i-1).x() &lt;= x &amp;&amp; pts.at(i).x() &gt;= x) {
 
73
                QLineF l(pts.at(i-1), pts.at(i));
 
74
                l.setLength(l.length() * ((x - l.x1()) / l.dx()));
 
75
                return m_shade.pixel(qRound(qMin(l.x2(), (double(m_shade.width() - 1)))),
 
76
                                     qRound(qMin(l.y2(), double(m_shade.height() - 1))));
 
77
            }
 
78
        }
 
79
        return 0;
 
80
    }
 
81
 
 
82
    void ShadeWidget::setGradientStops(const QGradientStops &amp;stops)
 
83
    {
 
84
        if (m_shade_type == ARGBShade) {
 
85
            m_alpha_gradient = QLinearGradient(0, 0, width(), 0);
 
86
 
 
87
            for (int i=0; i&lt;stops.size(); ++i) {
 
88
                QColor c = stops.at(i).second;
 
89
                m_alpha_gradient.setColorAt(stops.at(i).first, QColor(c.red(), c.green(), c.blue()));
 
90
            }
 
91
 
 
92
            m_shade = QImage();
 
93
            generateShade();
 
94
            update();
 
95
        }
 
96
    }
 
97
 
 
98
    void ShadeWidget::paintEvent(QPaintEvent *)
 
99
    {
 
100
        generateShade();
 
101
 
 
102
        QPainter p(this);
 
103
        p.drawImage(0, 0, m_shade);
 
104
 
 
105
        p.setPen(QColor(146, 146, 146));
 
106
        p.drawRect(0, 0, width() - 1, height() - 1);
 
107
    }
 
108
 
 
109
    void ShadeWidget::generateShade()
 
110
    {
 
111
        if (m_shade.isNull() || m_shade.size() != size()) {
 
112
 
 
113
            if (m_shade_type == ARGBShade) {
 
114
                m_shade = QImage(size(), QImage::Format_ARGB32_Premultiplied);
 
115
                m_shade.fill(0);
 
116
 
 
117
                QPainter p(&amp;m_shade);
 
118
                p.fillRect(rect(), m_alpha_gradient);
 
119
 
 
120
                p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
 
121
                QLinearGradient fade(0, 0, 0, height());
 
122
                fade.setColorAt(0, QColor(0, 0, 0, 255));
 
123
                fade.setColorAt(1, QColor(0, 0, 0, 0));
 
124
                p.fillRect(rect(), fade);
 
125
 
 
126
            } else {
 
127
                m_shade = QImage(size(), QImage::Format_RGB32);
 
128
                QLinearGradient shade(0, 0, 0, height());
 
129
                shade.setColorAt(1, Qt::black);
 
130
 
 
131
                if (m_shade_type == RedShade)
 
132
                    shade.setColorAt(0, Qt::red);
 
133
                else if (m_shade_type == GreenShade)
 
134
                    shade.setColorAt(0, Qt::green);
 
135
                else
 
136
                    shade.setColorAt(0, Qt::blue);
 
137
 
 
138
                QPainter p(&amp;m_shade);
 
139
                p.fillRect(rect(), shade);
 
140
            }
 
141
        }
 
142
 
 
143
    }
 
144
 
 
145
    GradientEditor::GradientEditor(QWidget *parent)
 
146
        : QWidget(parent)
 
147
    {
 
148
        QVBoxLayout *vbox = new QVBoxLayout(this);
 
149
        vbox-&gt;setSpacing(1);
 
150
        vbox-&gt;setMargin(1);
 
151
 
 
152
        m_red_shade = new ShadeWidget(ShadeWidget::RedShade, this);
 
153
        m_green_shade = new ShadeWidget(ShadeWidget::GreenShade, this);
 
154
        m_blue_shade = new ShadeWidget(ShadeWidget::BlueShade, this);
 
155
        m_alpha_shade = new ShadeWidget(ShadeWidget::ARGBShade, this);
 
156
 
 
157
        vbox-&gt;addWidget(m_red_shade);
 
158
        vbox-&gt;addWidget(m_green_shade);
 
159
        vbox-&gt;addWidget(m_blue_shade);
 
160
        vbox-&gt;addWidget(m_alpha_shade);
 
161
 
 
162
        connect(m_red_shade, SIGNAL(colorsChanged()), this, SLOT(pointsUpdated()));
 
163
        connect(m_green_shade, SIGNAL(colorsChanged()), this, SLOT(pointsUpdated()));
 
164
        connect(m_blue_shade, SIGNAL(colorsChanged()), this, SLOT(pointsUpdated()));
 
165
        connect(m_alpha_shade, SIGNAL(colorsChanged()), this, SLOT(pointsUpdated()));
 
166
    }
 
167
 
 
168
    inline static bool x_less_than(const QPointF &amp;p1, const QPointF &amp;p2)
 
169
    {
 
170
        return p1.x() &lt; p2.x();
 
171
    }
 
172
 
 
173
    void GradientEditor::pointsUpdated()
 
174
    {
 
175
        double w = m_alpha_shade-&gt;width();
 
176
 
 
177
        QGradientStops stops;
 
178
 
 
179
        QPolygonF points;
 
180
 
 
181
        points += m_red_shade-&gt;points();
 
182
        points += m_green_shade-&gt;points();
 
183
        points += m_blue_shade-&gt;points();
 
184
        points += m_alpha_shade-&gt;points();
 
185
 
 
186
        qSort(points.begin(), points.end(), x_less_than);
 
187
 
 
188
        for (int i=0; i&lt;points.size(); ++i) {
 
189
            double x = int(points.at(i).x());
 
190
            if (i &lt; points.size() - 1 &amp;&amp; x == points.at(i+1).x())
 
191
                continue;
 
192
            QColor color((0x00ff0000 &amp; m_red_shade-&gt;colorAt(int(x))) &gt;&gt; 16,
 
193
                         (0x0000ff00 &amp; m_green_shade-&gt;colorAt(int(x))) &gt;&gt; 8,
 
194
                         (0x000000ff &amp; m_blue_shade-&gt;colorAt(int(x))),
 
195
                         (0xff000000 &amp; m_alpha_shade-&gt;colorAt(int(x))) &gt;&gt; 24);
 
196
 
 
197
            if (x / w &gt; 1)
 
198
                return;
 
199
 
 
200
            stops &lt;&lt; QGradientStop(x / w, color);
 
201
        }
 
202
 
 
203
        m_alpha_shade-&gt;setGradientStops(stops);
 
204
 
 
205
        emit gradientStopsChanged(stops);
 
206
    }
 
207
 
 
208
    static void set_shade_points(const QPolygonF &amp;points, ShadeWidget *shade)
 
209
    {
 
210
        shade-&gt;hoverPoints()-&gt;setPoints(points);
 
211
        shade-&gt;hoverPoints()-&gt;setPointLock(0, HoverPoints::LockToLeft);
 
212
        shade-&gt;hoverPoints()-&gt;setPointLock(points.size() - 1, HoverPoints::LockToRight);
 
213
        shade-&gt;update();
 
214
    }
 
215
 
 
216
    void GradientEditor::setGradientStops(const QGradientStops &amp;stops)
 
217
    {
 
218
        QPolygonF pts_red, pts_green, pts_blue, pts_alpha;
 
219
 
 
220
        double h_red = m_red_shade-&gt;height();
 
221
        double h_green = m_green_shade-&gt;height();
 
222
        double h_blue = m_blue_shade-&gt;height();
 
223
        double h_alpha = m_alpha_shade-&gt;height();
 
224
 
 
225
        for (int i=0; i&lt;stops.size(); ++i) {
 
226
            double pos = stops.at(i).first;
 
227
            QRgb color = stops.at(i).second.rgba();
 
228
            pts_red &lt;&lt; QPointF(pos * m_red_shade-&gt;width(), h_red - qRed(color) * h_red / 255);
 
229
            pts_green &lt;&lt; QPointF(pos * m_green_shade-&gt;width(), h_green - qGreen(color) * h_green / 255);
 
230
            pts_blue &lt;&lt; QPointF(pos * m_blue_shade-&gt;width(), h_blue - qBlue(color) * h_blue / 255);
 
231
            pts_alpha &lt;&lt; QPointF(pos * m_alpha_shade-&gt;width(), h_alpha - qAlpha(color) * h_alpha / 255);
 
232
        }
 
233
 
 
234
        set_shade_points(pts_red, m_red_shade);
 
235
        set_shade_points(pts_green, m_green_shade);
 
236
        set_shade_points(pts_blue, m_blue_shade);
 
237
        set_shade_points(pts_alpha, m_alpha_shade);
 
238
 
 
239
    }
 
240
 
 
241
    GradientWidget::GradientWidget(QWidget *parent)
 
242
        : QWidget(parent)
 
243
    {
 
244
        setWindowTitle(&quot;Gradients&quot;);
 
245
 
 
246
        m_renderer = new GradientRenderer(this);
 
247
 
 
248
        ArthurGroupBox *mainGroup = new ArthurGroupBox(this);
 
249
        mainGroup-&gt;setTitle(&quot;Gradients&quot;);
 
250
 
 
251
        ArthurGroupBox *editorGroup = new ArthurGroupBox(mainGroup);
 
252
        editorGroup-&gt;setAttribute(Qt::WA_ContentsPropagated);
 
253
        editorGroup-&gt;setTitle(&quot;Color Editor&quot;);
 
254
        m_editor = new GradientEditor(editorGroup);
 
255
 
 
256
        ArthurGroupBox *typeGroup = new ArthurGroupBox(mainGroup);
 
257
        typeGroup-&gt;setAttribute(Qt::WA_ContentsPropagated);
 
258
        typeGroup-&gt;setTitle(&quot;Gradient Type&quot;);
 
259
        m_linearButton = new QRadioButton(&quot;Linear Gradient&quot;, typeGroup);
 
260
        m_radialButton = new QRadioButton(&quot;Radial Gradient&quot;, typeGroup);
 
261
        m_conicalButton = new QRadioButton(&quot;Conical Gradient&quot;, typeGroup);
 
262
 
 
263
        ArthurGroupBox *spreadGroup = new ArthurGroupBox(mainGroup);
 
264
        spreadGroup-&gt;setAttribute(Qt::WA_ContentsPropagated);
 
265
        spreadGroup-&gt;setTitle(&quot;Spread Method&quot;);
 
266
        m_padSpreadButton = new QRadioButton(&quot;Pad Spread&quot;, spreadGroup);
 
267
        m_reflectSpreadButton = new QRadioButton(&quot;Reflect Spread&quot;, spreadGroup);
 
268
        m_repeatSpreadButton = new QRadioButton(&quot;Repeat Spread&quot;, spreadGroup);
 
269
 
 
270
        ArthurGroupBox *defaultsGroup = new ArthurGroupBox(mainGroup);
 
271
        defaultsGroup-&gt;setAttribute(Qt::WA_ContentsPropagated);
 
272
        defaultsGroup-&gt;setTitle(&quot;Defaults&quot;);
 
273
        QPushButton *default1Button = new QPushButton(&quot;1&quot;, defaultsGroup);
 
274
        QPushButton *default2Button = new QPushButton(&quot;2&quot;, defaultsGroup);
 
275
        QPushButton *default3Button = new QPushButton(&quot;3&quot;, defaultsGroup);
 
276
        QPushButton *default4Button = new QPushButton(&quot;Reset&quot;, editorGroup);
 
277
 
 
278
        QPushButton *showSourceButton = new QPushButton(mainGroup);
 
279
        showSourceButton-&gt;setText(&quot;Show Source&quot;);
 
280
 
 
281
        QPushButton *whatsThisButton = new QPushButton(mainGroup);
 
282
        whatsThisButton-&gt;setText(&quot;What's This?&quot;);
 
283
        whatsThisButton-&gt;setCheckable(true);
 
284
 
 
285
        // Layouts
 
286
        QHBoxLayout *mainLayout = new QHBoxLayout(this);
 
287
        mainLayout-&gt;addWidget(m_renderer);
 
288
        mainLayout-&gt;addWidget(mainGroup);
 
289
 
 
290
        mainGroup-&gt;setFixedWidth(180);
 
291
        QVBoxLayout *mainGroupLayout = new QVBoxLayout(mainGroup);
 
292
        mainGroupLayout-&gt;addWidget(editorGroup);
 
293
        mainGroupLayout-&gt;addWidget(typeGroup);
 
294
        mainGroupLayout-&gt;addWidget(spreadGroup);
 
295
        mainGroupLayout-&gt;addWidget(defaultsGroup);
 
296
        mainGroupLayout-&gt;addStretch(1);
 
297
        mainGroupLayout-&gt;addWidget(showSourceButton);
 
298
        mainGroupLayout-&gt;addWidget(whatsThisButton);
 
299
 
 
300
        QVBoxLayout *editorGroupLayout = new QVBoxLayout(editorGroup);
 
301
        editorGroupLayout-&gt;addWidget(m_editor);
 
302
 
 
303
        QVBoxLayout *typeGroupLayout = new QVBoxLayout(typeGroup);
 
304
        typeGroupLayout-&gt;addWidget(m_linearButton);
 
305
        typeGroupLayout-&gt;addWidget(m_radialButton);
 
306
        typeGroupLayout-&gt;addWidget(m_conicalButton);
 
307
 
 
308
        QVBoxLayout *spreadGroupLayout = new QVBoxLayout(spreadGroup);
 
309
        spreadGroupLayout-&gt;addWidget(m_padSpreadButton);
 
310
        spreadGroupLayout-&gt;addWidget(m_repeatSpreadButton);
 
311
        spreadGroupLayout-&gt;addWidget(m_reflectSpreadButton);
 
312
 
 
313
        QHBoxLayout *defaultsGroupLayout = new QHBoxLayout(defaultsGroup);
 
314
        defaultsGroupLayout-&gt;addWidget(default1Button);
 
315
        defaultsGroupLayout-&gt;addWidget(default2Button);
 
316
        defaultsGroupLayout-&gt;addWidget(default3Button);
 
317
        editorGroupLayout-&gt;addWidget(default4Button);
 
318
 
 
319
        connect(m_editor, SIGNAL(gradientStopsChanged(const QGradientStops &amp;)),
 
320
                m_renderer, SLOT(setGradientStops(const QGradientStops &amp;)));
 
321
 
 
322
        connect(m_linearButton, SIGNAL(clicked()), m_renderer, SLOT(setLinearGradient()));
 
323
        connect(m_radialButton, SIGNAL(clicked()), m_renderer, SLOT(setRadialGradient()));
 
324
        connect(m_conicalButton, SIGNAL(clicked()), m_renderer, SLOT(setConicalGradient()));
 
325
 
 
326
        connect(m_padSpreadButton, SIGNAL(clicked()), m_renderer, SLOT(setPadSpread()));
 
327
        connect(m_reflectSpreadButton, SIGNAL(clicked()), m_renderer, SLOT(setReflectSpread()));
 
328
        connect(m_repeatSpreadButton, SIGNAL(clicked()), m_renderer, SLOT(setRepeatSpread()));
 
329
 
 
330
        connect(default1Button, SIGNAL(clicked()), this, SLOT(setDefault1()));
 
331
        connect(default2Button, SIGNAL(clicked()), this, SLOT(setDefault2()));
 
332
        connect(default3Button, SIGNAL(clicked()), this, SLOT(setDefault3()));
 
333
        connect(default4Button, SIGNAL(clicked()), this, SLOT(setDefault4()));
 
334
 
 
335
        connect(showSourceButton, SIGNAL(clicked()), m_renderer, SLOT(showSource()));
 
336
 
 
337
        connect(whatsThisButton, SIGNAL(clicked(bool)), m_renderer, SLOT(setDescriptionEnabled(bool)));
 
338
        connect(whatsThisButton, SIGNAL(clicked(bool)),
 
339
                m_renderer-&gt;hoverPoints(), SLOT(setDisabled(bool)));
 
340
        connect(m_renderer, SIGNAL(descriptionEnabledChanged(bool)),
 
341
                whatsThisButton, SLOT(setChecked(bool)));
 
342
        connect(m_renderer, SIGNAL(descriptionEnabledChanged(bool)),
 
343
                m_renderer-&gt;hoverPoints(), SLOT(setDisabled(bool)));
 
344
 
 
345
        m_renderer-&gt;loadSourceFile(&quot;:res/gradients.cpp&quot;);
 
346
        m_renderer-&gt;loadDescription(&quot;:res/gradients.html&quot;);
 
347
 
 
348
        QTimer::singleShot(50, this, SLOT(setDefault1()));
 
349
    }
 
350
 
 
351
    void GradientWidget::setDefault(int config)
 
352
    {
 
353
        QGradientStops stops;
 
354
        QPolygonF points;
 
355
        switch (config) {
 
356
        case 1:
 
357
            stops &lt;&lt; QGradientStop(0.00, QColor::fromRgba(0));
 
358
            stops &lt;&lt; QGradientStop(0.04, QColor::fromRgba(0xff131360));
 
359
            stops &lt;&lt; QGradientStop(0.08, QColor::fromRgba(0xff202ccc));
 
360
            stops &lt;&lt; QGradientStop(0.42, QColor::fromRgba(0xff93d3f9));
 
361
            stops &lt;&lt; QGradientStop(0.51, QColor::fromRgba(0xffb3e6ff));
 
362
            stops &lt;&lt; QGradientStop(0.73, QColor::fromRgba(0xffffffec));
 
363
            stops &lt;&lt; QGradientStop(0.92, QColor::fromRgba(0xff5353d9));
 
364
            stops &lt;&lt; QGradientStop(0.96, QColor::fromRgba(0xff262666));
 
365
            stops &lt;&lt; QGradientStop(1.00, QColor::fromRgba(0));
 
366
            m_linearButton-&gt;animateClick();
 
367
            m_repeatSpreadButton-&gt;animateClick();
 
368
            break;
 
369
 
 
370
        case 2:
 
371
            stops &lt;&lt; QGradientStop(0.00, QColor::fromRgba(0xffffffff));
 
372
            stops &lt;&lt; QGradientStop(0.11, QColor::fromRgba(0xfff9ffa0));
 
373
            stops &lt;&lt; QGradientStop(0.13, QColor::fromRgba(0xfff9ff99));
 
374
            stops &lt;&lt; QGradientStop(0.14, QColor::fromRgba(0xfff3ff86));
 
375
            stops &lt;&lt; QGradientStop(0.49, QColor::fromRgba(0xff93b353));
 
376
            stops &lt;&lt; QGradientStop(0.87, QColor::fromRgba(0xff264619));
 
377
            stops &lt;&lt; QGradientStop(0.96, QColor::fromRgba(0xff0c1306));
 
378
            stops &lt;&lt; QGradientStop(1.00, QColor::fromRgba(0));
 
379
            m_radialButton-&gt;animateClick();
 
380
            m_padSpreadButton-&gt;animateClick();
 
381
            break;
 
382
 
 
383
        case 3:
 
384
            stops &lt;&lt; QGradientStop(0.00, QColor::fromRgba(0));
 
385
            stops &lt;&lt; QGradientStop(0.10, QColor::fromRgba(0xffe0cc73));
 
386
            stops &lt;&lt; QGradientStop(0.17, QColor::fromRgba(0xffc6a006));
 
387
            stops &lt;&lt; QGradientStop(0.46, QColor::fromRgba(0xff600659));
 
388
            stops &lt;&lt; QGradientStop(0.72, QColor::fromRgba(0xff0680ac));
 
389
            stops &lt;&lt; QGradientStop(0.92, QColor::fromRgba(0xffb9d9e6));
 
390
            stops &lt;&lt; QGradientStop(1.00, QColor::fromRgba(0));
 
391
            m_conicalButton-&gt;animateClick();
 
392
            m_padSpreadButton-&gt;animateClick();
 
393
            break;
 
394
 
 
395
        case 4:
 
396
            stops &lt;&lt; QGradientStop(0.00, QColor::fromRgba(0xff000000));
 
397
            stops &lt;&lt; QGradientStop(1.00, QColor::fromRgba(0xffffffff));
 
398
            break;
 
399
 
 
400
        default:
 
401
            qWarning(&quot;bad default: %d\n&quot;, config);
 
402
            break;
 
403
        }
 
404
 
 
405
        QPolygonF pts;
 
406
        int h_off = m_renderer-&gt;width() / 10;
 
407
        int v_off = m_renderer-&gt;height() / 8;
 
408
        pts &lt;&lt; QPointF(m_renderer-&gt;width() / 2, m_renderer-&gt;height() / 2)
 
409
            &lt;&lt; QPointF(m_renderer-&gt;width() / 2 - h_off, m_renderer-&gt;height() / 2 - v_off);
 
410
 
 
411
        m_editor-&gt;setGradientStops(stops);
 
412
        m_renderer-&gt;hoverPoints()-&gt;setPoints(pts);
 
413
        m_renderer-&gt;setGradientStops(stops);
 
414
    }
 
415
 
 
416
    GradientRenderer::GradientRenderer(QWidget *parent)
 
417
        : ArthurFrame(parent)
 
418
    {
 
419
        m_hoverPoints = new HoverPoints(this, HoverPoints::CircleShape);
 
420
        m_hoverPoints-&gt;setPointSize(QSize(20, 20));
 
421
        m_hoverPoints-&gt;setConnectionType(HoverPoints::NoConnection);
 
422
        m_hoverPoints-&gt;setEditable(false);
 
423
 
 
424
        QVector&lt;QPointF&gt; points;
 
425
        points &lt;&lt; QPointF(100, 100) &lt;&lt; QPointF(200, 200);
 
426
        m_hoverPoints-&gt;setPoints(points);
 
427
 
 
428
        m_spread = QGradient::PadSpread;
 
429
        m_gradientType = Qt::LinearGradientPattern;
 
430
    }
 
431
 
 
432
    void GradientRenderer::setGradientStops(const QGradientStops &amp;stops)
 
433
    {
 
434
        m_stops = stops;
 
435
        update();
 
436
    }
 
437
 
 
438
    void GradientRenderer::mousePressEvent(QMouseEvent *)
 
439
    {
 
440
        setDescriptionEnabled(false);
 
441
    }
 
442
 
 
443
    void GradientRenderer::paint(QPainter *p)
 
444
    {
 
445
        QPolygonF pts = m_hoverPoints-&gt;points();
 
446
 
 
447
        QGradient g;
 
448
 
 
449
        if (m_gradientType == Qt::LinearGradientPattern) {
 
450
            g = QLinearGradient(pts.at(0), pts.at(1));
 
451
 
 
452
        } else if (m_gradientType == Qt::RadialGradientPattern) {
 
453
            g = QRadialGradient(pts.at(0), qMin(width(), height()) / 3.0, pts.at(1));
 
454
 
 
455
        } else {
 
456
            QLineF l(pts.at(0), pts.at(1));
 
457
            double angle = l.angle(QLineF(0, 0, 1, 0));
 
458
            if (l.dy() &gt; 0)
 
459
                angle = 360 - angle;
 
460
            g = QConicalGradient(pts.at(0), angle);
 
461
        }
 
462
 
 
463
        for (int i=0; i&lt;m_stops.size(); ++i)
 
464
            g.setColorAt(m_stops.at(i).first, m_stops.at(i).second);
 
465
 
 
466
        g.setSpread(m_spread);
 
467
 
 
468
        p-&gt;setBrush(g);
 
469
        p-&gt;setPen(Qt::NoPen);
 
470
 
 
471
        p-&gt;drawRect(rect());
 
472
 
 
473
    }</pre>
 
474
<p /><address><hr /><div align="center">
 
475
<table width="100%" cellspacing="0" border="0"><tr class="address">
 
476
<td width="30%">Copyright &copy; 2005 <a href="trolltech.html">Trolltech</a></td>
 
477
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
 
478
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
 
479
</tr></table></div></address></body>
 
480
</html>