qwt_column_symbol.cpp
Go to the documentation of this file.
1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2  * Qwt Widget Library
3  * Copyright (C) 1997 Josef Wilgen
4  * Copyright (C) 2002 Uwe Rathmann
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the Qwt License, Version 1.0
8  *****************************************************************************/
9 
10 #include "qwt_column_symbol.h"
11 #include "qwt_math.h"
12 #include "qwt_painter.h"
13 #include <qpainter.h>
14 #include <qpalette.h>
15 
16 static void qwtDrawBox( QPainter *p, const QRectF &rect,
17  const QPalette &pal, double lw )
18 {
19  if ( lw > 0.0 )
20  {
21  if ( rect.width() == 0.0 )
22  {
23  p->setPen( pal.dark().color() );
24  p->drawLine( rect.topLeft(), rect.bottomLeft() );
25  return;
26  }
27 
28  if ( rect.height() == 0.0 )
29  {
30  p->setPen( pal.dark().color() );
31  p->drawLine( rect.topLeft(), rect.topRight() );
32  return;
33  }
34 
35  lw = qMin( lw, rect.height() / 2.0 - 1.0 );
36  lw = qMin( lw, rect.width() / 2.0 - 1.0 );
37 
38  const QRectF outerRect = rect.adjusted( 0, 0, 1, 1 );
39  QPolygonF polygon( outerRect );
40 
41  if ( outerRect.width() > 2 * lw &&
42  outerRect.height() > 2 * lw )
43  {
44  const QRectF innerRect = outerRect.adjusted( lw, lw, -lw, -lw );
45  polygon = polygon.subtracted( innerRect );
46  }
47 
48  p->setPen( Qt::NoPen );
49 
50  p->setBrush( pal.dark() );
51  p->drawPolygon( polygon );
52  }
53 
54  const QRectF windowRect = rect.adjusted( lw, lw, -lw + 1, -lw + 1 );
55  if ( windowRect.isValid() )
56  p->fillRect( windowRect, pal.window() );
57 }
58 
59 static void qwtDrawPanel( QPainter *painter, const QRectF &rect,
60  const QPalette &pal, double lw )
61 {
62  if ( lw > 0.0 )
63  {
64  if ( rect.width() == 0.0 )
65  {
66  painter->setPen( pal.window().color() );
67  painter->drawLine( rect.topLeft(), rect.bottomLeft() );
68  return;
69  }
70 
71  if ( rect.height() == 0.0 )
72  {
73  painter->setPen( pal.window().color() );
74  painter->drawLine( rect.topLeft(), rect.topRight() );
75  return;
76  }
77 
78  lw = qMin( lw, rect.height() / 2.0 - 1.0 );
79  lw = qMin( lw, rect.width() / 2.0 - 1.0 );
80 
81  const QRectF outerRect = rect.adjusted( 0, 0, 1, 1 );
82  const QRectF innerRect = outerRect.adjusted( lw, lw, -lw, -lw );
83 
84  QPolygonF lines[2];
85 
86  lines[0] += outerRect.bottomLeft();
87  lines[0] += outerRect.topLeft();
88  lines[0] += outerRect.topRight();
89  lines[0] += innerRect.topRight();
90  lines[0] += innerRect.topLeft();
91  lines[0] += innerRect.bottomLeft();
92 
93  lines[1] += outerRect.topRight();
94  lines[1] += outerRect.bottomRight();
95  lines[1] += outerRect.bottomLeft();
96  lines[1] += innerRect.bottomLeft();
97  lines[1] += innerRect.bottomRight();
98  lines[1] += innerRect.topRight();
99 
100  painter->setPen( Qt::NoPen );
101 
102  painter->setBrush( pal.light() );
103  painter->drawPolygon( lines[0] );
104  painter->setBrush( pal.dark() );
105  painter->drawPolygon( lines[1] );
106  }
107 
108  painter->fillRect( rect.adjusted( lw, lw, -lw + 1, -lw + 1 ), pal.window() );
109 }
110 
112 {
113 public:
117  palette( Qt::gray ),
118  lineWidth( 2 )
119  {
120  }
121 
124 
125  QPalette palette;
127 };
128 
136 {
137  d_data = new PrivateData();
138  d_data->style = style;
139 }
140 
143 {
144  delete d_data;
145 }
146 
154 {
155  d_data->style = style;
156 }
157 
163 {
164  return d_data->style;
165 }
166 
173 void QwtColumnSymbol::setPalette( const QPalette &palette )
174 {
176 }
177 
182 const QPalette& QwtColumnSymbol::palette() const
183 {
184  return d_data->palette;
185 }
186 
194 {
196 }
197 
203 {
204  return d_data->frameStyle;
205 }
206 
214 {
215  if ( width < 0 )
216  width = 0;
217 
218  d_data->lineWidth = width;
219 }
220 
226 {
227  return d_data->lineWidth;
228 }
229 
238 void QwtColumnSymbol::draw( QPainter *painter,
239  const QwtColumnRect &rect ) const
240 {
241  painter->save();
242 
243  switch ( d_data->style )
244  {
246  {
247  drawBox( painter, rect );
248  break;
249  }
250  default:;
251  }
252 
253  painter->restore();
254 }
255 
264 void QwtColumnSymbol::drawBox( QPainter *painter,
265  const QwtColumnRect &rect ) const
266 {
267  QRectF r = rect.toRect();
268  if ( QwtPainter::roundingAlignment( painter ) )
269  {
270  r.setLeft( qRound( r.left() ) );
271  r.setRight( qRound( r.right() ) );
272  r.setTop( qRound( r.top() ) );
273  r.setBottom( qRound( r.bottom() ) );
274  }
275 
276  switch ( d_data->frameStyle )
277  {
279  {
280  qwtDrawPanel( painter, r, d_data->palette, d_data->lineWidth );
281  break;
282  }
284  {
285  qwtDrawBox( painter, r, d_data->palette, d_data->lineWidth );
286  break;
287  }
288  default:
289  {
290  painter->fillRect( r, d_data->palette.window() );
291  }
292  }
293 }
Style style() const
virtual ~QwtColumnSymbol()
Destructor.
A plain frame style.
QRectF toRect() const
A drawing primitive for columns.
static void qwtDrawBox(QPainter *p, const QRectF &rect, const QPalette &pal, double lw)
FrameStyle frameStyle() const
QwtColumnSymbol(Style=NoStyle)
static void qwtDrawPanel(QPainter *painter, const QRectF &rect, const QPalette &pal, double lw)
QwtColumnSymbol::FrameStyle frameStyle
QwtColumnSymbol::Style style
int lineWidth() const
A raised frame style.
void setPalette(const QPalette &)
void setFrameStyle(FrameStyle style)
void setLineWidth(int width)
PrivateData * d_data
const QPalette & palette() const
Directed rectangle representing bounding rectangle and orientation of a column.
virtual void draw(QPainter *, const QwtColumnRect &) const
void drawBox(QPainter *, const QwtColumnRect &) const
static bool roundingAlignment()
Definition: qwt_painter.h:176


plotjuggler
Author(s): Davide Faconti
autogenerated on Sat Jul 6 2019 03:44:17