File: qwt__dial__needle_8cpp-source.html

package info (click to toggle)
libqwt 4.2.0-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 9,832 kB
  • ctags: 5,512
  • sloc: cpp: 22,973; ansic: 244; makefile: 64
file content (475 lines) | stat: -rw-r--r-- 26,634 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Qwt User&apos;s Guide: qwt_dial_needle.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.8 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<h1>qwt_dial_needle.cpp</h1><pre class="fragment"><div>00001 <span class="comment">/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************</span>
00002 <span class="comment"> * Qwt Widget Library</span>
00003 <span class="comment"> * Copyright (C) 1997   Josef Wilgen</span>
00004 <span class="comment"> * Copyright (C) 2002   Uwe Rathmann</span>
00005 <span class="comment"> *</span>
00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
00007 <span class="comment"> * modify it under the terms of the Qwt License, Version 1.0</span>
00008 <span class="comment"> *****************************************************************************/</span>
00009 
00010 <span class="preprocessor">#include &lt;math.h&gt;</span>
00011 <span class="preprocessor">#include &lt;qapplication.h&gt;</span>
00012 <span class="preprocessor">#include &lt;qpainter.h&gt;</span>
00013 <span class="preprocessor">#include "<a class="code" href="qwt__math_8h.html">qwt_math.h</a>"</span>
00014 <span class="preprocessor">#include "qwt_painter.h"</span>
00015 <span class="preprocessor">#include "qwt_dial_needle.h"</span>
00016 
<a name="l00018"></a><a class="code" href="class_qwt_dial_needle.html#a0">00018</a> <a class="code" href="class_qwt_dial_needle.html#a0">QwtDialNeedle::QwtDialNeedle</a>():
00019     d_palette(QApplication::palette())
00020 {
00021 }
00022 
<a name="l00024"></a><a class="code" href="class_qwt_dial_needle.html#a1">00024</a> <a class="code" href="class_qwt_dial_needle.html#a1">QwtDialNeedle::~QwtDialNeedle</a>() 
00025 {
00026 }
00027 
<a name="l00033"></a><a class="code" href="class_qwt_dial_needle.html#a3">00033</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_dial_needle.html#a3">QwtDialNeedle::setPalette</a>(<span class="keyword">const</span> QPalette &amp;palette) 
00034 { 
00035     d_palette = palette; 
00036 }
00037 
<a name="l00041"></a><a class="code" href="class_qwt_dial_needle.html#a4">00041</a> <span class="keyword">const</span> QPalette &amp;<a class="code" href="class_qwt_dial_needle.html#a4">QwtDialNeedle::palette</a>()<span class="keyword"> const </span>
00042 <span class="keyword"></span>{ 
00043     <span class="keywordflow">return</span> d_palette; 
00044 }
00045 
<a name="l00047"></a><a class="code" href="class_qwt_dial_needle.html#f0">00047</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_dial_needle.html#f0">QwtDialNeedle::drawKnob</a>(QPainter *painter,
00048     <span class="keyword">const</span> QPoint &amp;pos, <span class="keywordtype">int</span> width, <span class="keyword">const</span> QBrush &amp;brush, <span class="keywordtype">bool</span> sunken)
00049 {
00050     painter-&gt;save();
00051 
00052     QRect rect(0, 0, width, width);
00053     rect.moveCenter(pos);
00054 
00055     painter-&gt;setPen(Qt::NoPen);
00056     painter-&gt;setBrush(brush);
00057     painter-&gt;drawEllipse(rect);
00058 
00059     painter-&gt;setBrush(Qt::NoBrush);
00060 
00061     <span class="keyword">const</span> <span class="keywordtype">int</span> colorOffset = 20;
00062 
00063     <span class="keywordtype">int</span> startAngle = 45;
00064     <span class="keywordflow">if</span> ( sunken )
00065         startAngle += 180;
00066 
00067     QPen pen;
00068     pen.setWidth(1);
00069 
00070     pen.setColor(brush.color().dark(100 - colorOffset));
00071     painter-&gt;setPen(pen);
00072     painter-&gt;drawArc(rect, startAngle * 16, 180 * 16);
00073 
00074     pen.setColor(brush.color().dark(100 + colorOffset));
00075     painter-&gt;setPen(pen);
00076     painter-&gt;drawArc(rect, (startAngle + 180) * 16, 180 * 16);
00077 
00078     painter-&gt;restore();
00079 }
00080 
<a name="l00085"></a><a class="code" href="class_qwt_dial_needle.html#b0">00085</a> <span class="keyword">const</span> QColorGroup &amp;<a class="code" href="class_qwt_dial_needle.html#b0">QwtDialNeedle::colorGroup</a>(QPalette::ColorGroup cg)<span class="keyword"> const</span>
00086 <span class="keyword"></span>{
00087     <span class="keywordflow">switch</span>(cg)
00088     {
00089         <span class="keywordflow">case</span> QPalette::Disabled:
00090             <span class="keywordflow">return</span> d_palette.disabled();
00091         <span class="keywordflow">case</span> QPalette::Inactive:
00092             <span class="keywordflow">return</span> d_palette.inactive();
00093         <span class="keywordflow">default</span>:
00094             <span class="keywordflow">return</span> d_palette.active();
00095     }
00096 }
00097 
<a name="l00101"></a><a class="code" href="class_qwt_dial_simple_needle.html#a0">00101</a> <a class="code" href="class_qwt_dial_simple_needle.html#a0">QwtDialSimpleNeedle::QwtDialSimpleNeedle</a>(Style style, <span class="keywordtype">bool</span> hasKnob, 
00102         <span class="keyword">const</span> QColor &amp;mid, <span class="keyword">const</span> QColor &amp;base):
00103     d_style(style),
00104     d_hasKnob(hasKnob),
00105     d_width(-1)
00106 {
00107     QPalette palette;
00108     <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; QPalette::NColorGroups; i++ )
00109     {
00110         palette.setColor((QPalette::ColorGroup)i,
00111             QColorGroup::Mid, mid);
00112         palette.setColor((QPalette::ColorGroup)i,
00113             QColorGroup::Base, base);
00114     }
00115 
00116     <a class="code" href="class_qwt_dial_needle.html#a3">setPalette</a>(palette);
00117 }
00118 
<a name="l00120"></a><a class="code" href="class_qwt_dial_simple_needle.html#a2">00120</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_dial_simple_needle.html#a2">QwtDialSimpleNeedle::setWidth</a>(<span class="keywordtype">int</span> width)
00121 {
00122     d_width = width;
00123 }
00124 
<a name="l00128"></a><a class="code" href="class_qwt_dial_simple_needle.html#a3">00128</a> <span class="keywordtype">int</span> <a class="code" href="class_qwt_dial_simple_needle.html#a3">QwtDialSimpleNeedle::width</a>()<span class="keyword"> const</span>
00129 <span class="keyword"></span>{
00130     <span class="keywordflow">return</span> d_width;
00131 }
00132 
<a name="l00142"></a><a class="code" href="class_qwt_dial_simple_needle.html#a1">00142</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_dial_simple_needle.html#a1">QwtDialSimpleNeedle::draw</a>(QPainter *painter, <span class="keyword">const</span> QPoint &amp;center,
00143     <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction, QPalette::ColorGroup cg)<span class="keyword"> const</span>
00144 <span class="keyword"></span>{
00145     <span class="keywordflow">if</span> ( d_style == Arrow )
00146     {
00147         <a class="code" href="class_qwt_dial_simple_needle.html#e0">drawArrowNeedle</a>(painter, <a class="code" href="class_qwt_dial_needle.html#b0">colorGroup</a>(cg),
00148             center, length, d_width, direction, d_hasKnob);
00149     }
00150     <span class="keywordflow">else</span>
00151     {
00152         <a class="code" href="class_qwt_dial_simple_needle.html#e1">drawRayNeedle</a>(painter, <a class="code" href="class_qwt_dial_needle.html#b0">colorGroup</a>(cg), center, length, d_width,
00153             direction, d_hasKnob); 
00154     }
00155 }
00156 
<a name="l00160"></a><a class="code" href="class_qwt_dial_simple_needle.html#e1">00160</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_dial_simple_needle.html#e1">QwtDialSimpleNeedle::drawRayNeedle</a>(
00161     QPainter *painter, <span class="keyword">const</span> QColorGroup &amp;cg,
00162     <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> width, <span class="keywordtype">double</span> direction, 
00163     <span class="keywordtype">bool</span> hasKnob)
00164 {
00165     <span class="keywordflow">if</span> ( width &lt;= 0 )
00166         width = 5;
00167 
00168     direction *= M_PI / 180.0;
00169 
00170     painter-&gt;save();
00171 
00172     <span class="keyword">const</span> QPoint p1(center.x() + 1, center.y() + 2);
00173     <span class="keyword">const</span> QPoint p2 = qwtPolar2Pos(p1, length, direction);
00174 
00175     <span class="keywordflow">if</span> ( width == 1 )
00176     {
00177         painter-&gt;setPen(QPen(cg.mid(), 1));
00178         painter-&gt;drawLine(p1, p2);
00179     }
00180     <span class="keywordflow">else</span>
00181     {
00182         QPointArray pa(4);
00183         pa.setPoint(0, qwtPolar2Pos(p1, width / 2, direction + M_PI_2));
00184         pa.setPoint(1, qwtPolar2Pos(p2, width / 2, direction + M_PI_2));
00185         pa.setPoint(2, qwtPolar2Pos(p2, width / 2, direction - M_PI_2));
00186         pa.setPoint(3, qwtPolar2Pos(p1, width / 2, direction - M_PI_2));
00187 
00188         painter-&gt;setPen(Qt::NoPen);
00189         painter-&gt;setBrush(cg.brush(QColorGroup::Mid));
00190         painter-&gt;drawPolygon(pa);
00191     }
00192     <span class="keywordflow">if</span> ( hasKnob )
00193     {
00194         <span class="keywordtype">int</span> knobWidth = QMAX(qRound(width * 0.7), 5);
00195         <span class="keywordflow">if</span> ( knobWidth % 2 == 0 )
00196             knobWidth++;
00197 
00198         <a class="code" href="class_qwt_dial_needle.html#f0">drawKnob</a>(painter, center, knobWidth, 
00199             cg.brush(QColorGroup::Base), FALSE);
00200     }
00201 
00202     painter-&gt;restore();
00203 }
00204 
<a name="l00208"></a><a class="code" href="class_qwt_dial_simple_needle.html#e0">00208</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_dial_simple_needle.html#e0">QwtDialSimpleNeedle::drawArrowNeedle</a>(
00209     QPainter *painter, <span class="keyword">const</span> QColorGroup &amp;cg,
00210     <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> width,
00211     <span class="keywordtype">double</span> direction, <span class="keywordtype">bool</span> hasKnob)
00212 {
00213     direction *= M_PI / 180.0;
00214 
00215     painter-&gt;save();
00216 
00217     <span class="keywordflow">if</span> ( width &lt;= 0 )
00218     {
00219         width = (<span class="keywordtype">int</span>)QMAX(length * 0.06, 9);
00220         <span class="keywordflow">if</span> ( width % 2 == 0 )
00221             width++;
00222     }
00223 
00224     <span class="keyword">const</span> <span class="keywordtype">int</span> peak = 3;
00225     <span class="keyword">const</span> QPoint p1(center.x() + 1, center.y() + 1);
00226     <span class="keyword">const</span> QPoint p2 = qwtPolar2Pos(p1, length - peak, direction);
00227     <span class="keyword">const</span> QPoint p3 = qwtPolar2Pos(p1, length, direction);
00228 
00229     QPointArray pa(5);
00230     pa.setPoint(0, qwtPolar2Pos(p1, width / 2, direction - M_PI_2));
00231     pa.setPoint(1, qwtPolar2Pos(p2, 1, direction - M_PI_2));
00232     pa.setPoint(2, p3);
00233     pa.setPoint(3, qwtPolar2Pos(p2, 1, direction + M_PI_2));
00234     pa.setPoint(4, qwtPolar2Pos(p1, width / 2, direction + M_PI_2));
00235 
00236     painter-&gt;setPen(Qt::NoPen);
00237     painter-&gt;setBrush(cg.brush(QColorGroup::Mid));
00238     painter-&gt;drawPolygon(pa);
00239 
00240     QPointArray shadowPa(3);
00241 
00242     <span class="keyword">const</span> <span class="keywordtype">int</span> colorOffset = 10;
00243 
00244     <span class="keywordtype">int</span> i;
00245     <span class="keywordflow">for</span> ( i = 0; i &lt; 3; i++ )
00246         shadowPa.setPoint(i, pa[i]);
00247 
00248     painter-&gt;setPen(cg.mid().dark(100 + colorOffset));
00249     painter-&gt;drawPolyline(shadowPa);
00250 
00251     <span class="keywordflow">for</span> ( i = 0; i &lt; 3; i++ )
00252         shadowPa.setPoint(i, pa[i + 2]);
00253 
00254     painter-&gt;setPen(cg.mid().dark(100 - colorOffset));
00255     painter-&gt;drawPolyline(shadowPa);
00256 
00257     <span class="keywordflow">if</span> ( hasKnob )
00258     {
00259         <a class="code" href="class_qwt_dial_needle.html#f0">drawKnob</a>(painter, center, qRound(width * 1.3), 
00260             cg.brush(QColorGroup::Base), FALSE);
00261     }
00262 
00263     painter-&gt;restore();
00264 }
00265 
00267 
<a name="l00268"></a><a class="code" href="class_qwt_compass_magnet_needle.html#a0">00268</a> <a class="code" href="class_qwt_compass_magnet_needle.html#a0">QwtCompassMagnetNeedle::QwtCompassMagnetNeedle</a>(Style style,
00269         <span class="keyword">const</span> QColor &amp;light, <span class="keyword">const</span> QColor &amp;dark):
00270     d_style(style)
00271 {   
00272     QPalette palette;
00273     <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; QPalette::NColorGroups; i++ )
00274     {
00275         palette.setColor((QPalette::ColorGroup)i,
00276             QColorGroup::Light, light);
00277         palette.setColor((QPalette::ColorGroup)i,
00278             QColorGroup::Dark, dark);
00279         palette.setColor((QPalette::ColorGroup)i,
00280             QColorGroup::Base, Qt::darkGray);
00281     }
00282 
00283     <a class="code" href="class_qwt_dial_needle.html#a3">setPalette</a>(palette); 
00284 }
00285 
<a name="l00295"></a><a class="code" href="class_qwt_compass_magnet_needle.html#a1">00295</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_magnet_needle.html#a1">QwtCompassMagnetNeedle::draw</a>(QPainter *painter, <span class="keyword">const</span> QPoint &amp;center,
00296     <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction, QPalette::ColorGroup cg)<span class="keyword"> const</span>
00297 <span class="keyword"></span>{
00298     <span class="keywordflow">if</span> ( d_style == ThinStyle )
00299     {
00300         <a class="code" href="class_qwt_compass_magnet_needle.html#e1">drawThinNeedle</a>(painter, <a class="code" href="class_qwt_dial_needle.html#b0">colorGroup</a>(cg), 
00301             center, length, direction); 
00302     }
00303     <span class="keywordflow">else</span>
00304     {
00305         <a class="code" href="class_qwt_compass_magnet_needle.html#e0">drawTriangleNeedle</a>(painter, <a class="code" href="class_qwt_dial_needle.html#b0">colorGroup</a>(cg),
00306             center, length, direction);
00307     }
00308 }
00309 
<a name="l00313"></a><a class="code" href="class_qwt_compass_magnet_needle.html#e0">00313</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_magnet_needle.html#e0">QwtCompassMagnetNeedle::drawTriangleNeedle</a>(
00314     QPainter *painter, <span class="keyword">const</span> QColorGroup &amp;cg,
00315     <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction) 
00316 {
00317     QBrush brush;
00318 
00319     <span class="keyword">const</span> <span class="keywordtype">int</span> width = qRound(length / 3.0);
00320     <span class="keyword">const</span> <span class="keywordtype">int</span> colorOffset =  10;
00321 
00322     painter-&gt;save();
00323     painter-&gt;setPen(Qt::NoPen);
00324 
00325     <span class="keyword">const</span> QPoint arrowCenter(center.x() + 1, center.y() + 1);
00326 
00327     QPointArray pa(3);
00328     pa.setPoint(0, arrowCenter);
00329     pa.setPoint(1, qwtDegree2Pos(arrowCenter, length, direction));
00330 
00331     pa.setPoint(2, qwtDegree2Pos(arrowCenter, width / 2, direction + 90.0));
00332 
00333     brush = cg.brush(QColorGroup::Dark);
00334     brush.setColor(brush.color().dark(100 + colorOffset));
00335     painter-&gt;setBrush(brush);
00336     painter-&gt;drawPolygon(pa);
00337 
00338     pa.setPoint(2, qwtDegree2Pos(arrowCenter, width / 2, direction - 90.0));
00339 
00340     brush = cg.brush(QColorGroup::Dark);
00341     brush.setColor(brush.color().dark(100 - colorOffset));
00342     painter-&gt;setBrush(brush);
00343     painter-&gt;drawPolygon(pa);
00344 
00345     <span class="comment">// --</span>
00346 
00347     pa.setPoint(1, qwtDegree2Pos(arrowCenter, length, direction + 180.0));
00348 
00349     pa.setPoint(2, qwtDegree2Pos(arrowCenter, width / 2, direction + 90.0));
00350 
00351     brush = cg.brush(QColorGroup::Light);
00352     brush.setColor(brush.color().dark(100 + colorOffset));
00353     painter-&gt;setBrush(brush);
00354     painter-&gt;drawPolygon(pa);
00355 
00356     pa.setPoint(2, qwtDegree2Pos(arrowCenter, width / 2, direction - 90.0));
00357 
00358     brush = cg.brush(QColorGroup::Light);
00359     brush.setColor(brush.color().dark(100 - colorOffset));
00360     painter-&gt;setBrush(brush);
00361     painter-&gt;drawPolygon(pa);
00362 
00363     painter-&gt;restore();
00364 }
00365 
<a name="l00369"></a><a class="code" href="class_qwt_compass_magnet_needle.html#e1">00369</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_magnet_needle.html#e1">QwtCompassMagnetNeedle::drawThinNeedle</a>(
00370     QPainter *painter, <span class="keyword">const</span> QColorGroup &amp;cg,
00371     <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction) 
00372 {
00373     <span class="keyword">const</span> <span class="keywordtype">int</span> colorOffset = 10;
00374     <span class="keyword">const</span> <span class="keywordtype">int</span> width = QMAX(qRound(length / 6.0), 3);
00375 
00376     painter-&gt;save();
00377 
00378     <span class="keyword">const</span> QPoint arrowCenter(center.x() + 1, center.y() + 1);
00379 
00380     <a class="code" href="class_qwt_compass_magnet_needle.html#f0">drawPointer</a>(painter, cg.brush(QColorGroup::Dark), colorOffset, 
00381         arrowCenter, length, width, direction);
00382     <a class="code" href="class_qwt_compass_magnet_needle.html#f0">drawPointer</a>(painter, cg.brush(QColorGroup::Light), -colorOffset, 
00383         arrowCenter, length, width, direction + 180.0);
00384     
00385     <a class="code" href="class_qwt_dial_needle.html#f0">drawKnob</a>(painter, arrowCenter, width, 
00386         cg.brush(QColorGroup::Base), TRUE);
00387 
00388     painter-&gt;restore();
00389 }
00390 
<a name="l00394"></a><a class="code" href="class_qwt_compass_magnet_needle.html#f0">00394</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_magnet_needle.html#f0">QwtCompassMagnetNeedle::drawPointer</a>(
00395     QPainter *painter, <span class="keyword">const</span> QBrush &amp;brush,
00396     <span class="keywordtype">int</span> colorOffset, <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, 
00397     <span class="keywordtype">int</span> width, <span class="keywordtype">double</span> direction)
00398 {
00399     painter-&gt;save();
00400 
00401     <span class="keyword">const</span> <span class="keywordtype">int</span> peak = QMAX(qRound(length / 10.0), 5);
00402 
00403     <span class="keyword">const</span> <span class="keywordtype">int</span> knobWidth = width + 8;
00404     QRect knobRect(0, 0, knobWidth, knobWidth);
00405     knobRect.moveCenter(center);
00406 
00407     QPointArray pa(5);
00408 
00409     pa.setPoint(0, qwtDegree2Pos(center, width / 2, direction + 90.0));
00410     pa.setPoint(1, center);
00411     pa.setPoint(2, qwtDegree2Pos(pa.point(1), length - peak, direction));
00412     pa.setPoint(3, qwtDegree2Pos(center, length, direction));
00413     pa.setPoint(4, qwtDegree2Pos(pa.point(0), length - peak, direction));
00414 
00415     painter-&gt;setPen(Qt::NoPen);
00416 
00417     QBrush darkBrush = brush;
00418     darkBrush.setColor(darkBrush.color().dark(100 + colorOffset));
00419     painter-&gt;setBrush(darkBrush);
00420     painter-&gt;drawPolygon(pa);
00421     painter-&gt;drawPie(knobRect, qRound(direction * 16), 90 * 16);
00422 
00423     pa.setPoint(0, qwtDegree2Pos(center, width / 2, direction - 90.0));
00424     pa.setPoint(4, qwtDegree2Pos(pa.point(0), length - peak, direction));
00425 
00426     QBrush lightBrush = brush;
00427     lightBrush.setColor(lightBrush.color().dark(100 - colorOffset));
00428     painter-&gt;setBrush(lightBrush);
00429     painter-&gt;drawPolygon(pa);
00430     painter-&gt;drawPie(knobRect, qRound(direction * 16), -90 * 16);
00431 
00432     painter-&gt;restore();
00433 }
00434 
00436 
<a name="l00437"></a><a class="code" href="class_qwt_compass_wind_arrow.html#a0">00437</a> <a class="code" href="class_qwt_compass_wind_arrow.html#a0">QwtCompassWindArrow::QwtCompassWindArrow</a>(Style style, 
00438         <span class="keyword">const</span> QColor &amp;light, <span class="keyword">const</span> QColor &amp;dark):
00439     d_style(style)
00440 {
00441     QPalette palette;
00442     <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; QPalette::NColorGroups; i++ )
00443     {
00444         palette.setColor((QPalette::ColorGroup)i,
00445             QColorGroup::Light, light);
00446         palette.setColor((QPalette::ColorGroup)i,
00447             QColorGroup::Dark, dark);
00448     }
00449 
00450     <a class="code" href="class_qwt_dial_needle.html#a3">setPalette</a>(palette);
00451 }
00452 
<a name="l00462"></a><a class="code" href="class_qwt_compass_wind_arrow.html#a1">00462</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_wind_arrow.html#a1">QwtCompassWindArrow::draw</a>(QPainter *painter, <span class="keyword">const</span> QPoint &amp;center,
00463     <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction, QPalette::ColorGroup cg)<span class="keyword"> const</span>
00464 <span class="keyword"></span>{
00465     <span class="keywordflow">if</span> ( d_style == Style1 )
00466     {
00467         <a class="code" href="class_qwt_compass_wind_arrow.html#e0">drawStyle1Needle</a>(painter, <a class="code" href="class_qwt_dial_needle.html#b0">colorGroup</a>(cg),
00468             center, length, direction);
00469     }
00470     <span class="keywordflow">else</span>
00471     {
00472         <a class="code" href="class_qwt_compass_wind_arrow.html#e1">drawStyle2Needle</a>(painter, <a class="code" href="class_qwt_dial_needle.html#b0">colorGroup</a>(cg),
00473             center, length, direction); 
00474     }
00475 }
00476 
<a name="l00480"></a><a class="code" href="class_qwt_compass_wind_arrow.html#e0">00480</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_wind_arrow.html#e0">QwtCompassWindArrow::drawStyle1Needle</a>(
00481     QPainter *painter, <span class="keyword">const</span> QColorGroup &amp;cg,
00482     <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction) 
00483 {
00484     <span class="keyword">const</span> <span class="keywordtype">double</span> AR1[] = {0, 0.4, 0.3, 1, 0.8, 1, 0.3, 0.4};
00485     <span class="keyword">const</span> <span class="keywordtype">double</span> AW1[] = {0, -45, -20, -15, 0, 15, 20, 45};
00486 
00487     <span class="keyword">const</span> QPoint arrowCenter(center.x() + 1, center.y() + 1);
00488 
00489     QPointArray pa(8);
00490     pa.setPoint(0, arrowCenter);
00491     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=1; i&lt;8; i++) 
00492     {
00493         <span class="keyword">const</span> QPoint p = qwtDegree2Pos(center, 
00494             AR1[i] * length, direction + AW1[i]);
00495         pa.setPoint(i, p);
00496     }
00497 
00498     painter-&gt;save();
00499     painter-&gt;setPen(Qt::NoPen);
00500     painter-&gt;setBrush(cg.brush(QColorGroup::Light));
00501     painter-&gt;drawPolygon(pa);
00502     painter-&gt;restore();
00503 }
00504 
<a name="l00508"></a><a class="code" href="class_qwt_compass_wind_arrow.html#e1">00508</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_compass_wind_arrow.html#e1">QwtCompassWindArrow::drawStyle2Needle</a>(
00509     QPainter *painter, <span class="keyword">const</span> QColorGroup &amp;cg,
00510     <span class="keyword">const</span> QPoint &amp;center, <span class="keywordtype">int</span> length, <span class="keywordtype">double</span> direction) 
00511 {
00512     painter-&gt;save();
00513     painter-&gt;setPen(Qt::NoPen);
00514 
00515     <span class="keyword">const</span> <span class="keywordtype">double</span> angle = 12.0;
00516     <span class="keyword">const</span> <span class="keywordtype">double</span> ratio = 0.7;
00517 
00518     <span class="keyword">const</span> QPoint arrowCenter(center.x() + 1, center.y() + 1);
00519 
00520     QPointArray pa(3);
00521 
00522     pa.setPoint(0, center);
00523     pa.setPoint(2, qwtDegree2Pos(arrowCenter, ratio * length, direction));
00524 
00525     pa.setPoint(1, qwtDegree2Pos(arrowCenter, length, direction + angle));
00526     painter-&gt;setBrush(cg.brush(QColorGroup::Dark));
00527     painter-&gt;drawPolygon(pa);
00528 
00529     pa.setPoint(1, qwtDegree2Pos(arrowCenter, length, direction - angle));
00530     painter-&gt;setBrush(cg.brush(QColorGroup::Light));
00531     painter-&gt;drawPolygon(pa);
00532 
00533     painter-&gt;restore();
00534 }
00535 
</div></pre><hr size="1"><address style="align: right;"><small>Generated on Tue Nov 16 21:12:20 2004 for Qwt User's Guide by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.8 </small></address>
</body>
</html>