qwt_column_symbol.cpp
Go to the documentation of this file.
1 /******************************************************************************
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_painter.h"
12 #include "qwt_math.h"
13 
14 #include <qpainter.h>
15 #include <qpalette.h>
16 
17 static void qwtDrawBox( QPainter* p, const QRectF& rect,
18  const QPalette& pal, double lw )
19 {
20  if ( lw > 0.0 )
21  {
22  if ( rect.width() == 0.0 )
23  {
24  p->setPen( pal.dark().color() );
25  p->drawLine( rect.topLeft(), rect.bottomLeft() );
26  return;
27  }
28 
29  if ( rect.height() == 0.0 )
30  {
31  p->setPen( pal.dark().color() );
32  p->drawLine( rect.topLeft(), rect.topRight() );
33  return;
34  }
35 
36  lw = qwtMinF( lw, rect.height() / 2.0 - 1.0 );
37  lw = qwtMinF( lw, rect.width() / 2.0 - 1.0 );
38 
39  const QRectF outerRect = rect.adjusted( 0, 0, 1, 1 );
40  QPolygonF polygon( outerRect );
41 
42  if ( outerRect.width() > 2 * lw && 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 = qwtMinF( lw, rect.height() / 2.0 - 1.0 );
79  lw = qwtMinF( 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  m_data = new PrivateData();
138  m_data->style = style;
139 }
140 
143 {
144  delete m_data;
145 }
146 
154 {
155  m_data->style = style;
156 }
157 
163 {
164  return m_data->style;
165 }
166 
173 void QwtColumnSymbol::setPalette( const QPalette& palette )
174 {
176 }
177 
182 const QPalette& QwtColumnSymbol::palette() const
183 {
184  return m_data->palette;
185 }
186 
194 {
196 }
197 
203 {
204  return m_data->frameStyle;
205 }
206 
214 {
215  if ( width < 0 )
216  width = 0;
217 
218  m_data->lineWidth = width;
219 }
220 
226 {
227  return m_data->lineWidth;
228 }
229 
238 void QwtColumnSymbol::draw( QPainter* painter,
239  const QwtColumnRect& rect ) const
240 {
241  painter->save();
242 
243  switch ( m_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 ( m_data->frameStyle )
277  {
279  {
280  qwtDrawPanel( painter, r, m_data->palette, m_data->lineWidth );
281  break;
282  }
284  {
285  qwtDrawBox( painter, r, m_data->palette, m_data->lineWidth );
286  break;
287  }
288  default:
289  {
290  painter->fillRect( r.adjusted( 0, 0, 1, 1 ), m_data->palette.window() );
291  }
292  }
293 }
294 
296 QRectF QwtColumnRect::toRect() const
297 {
298  QRectF r( hInterval.minValue(), vInterval.minValue(),
299  hInterval.maxValue() - hInterval.minValue(),
300  vInterval.maxValue() - vInterval.minValue() );
301 
302  r = r.normalized();
303 
304  if ( hInterval.borderFlags() & QwtInterval::ExcludeMinimum )
305  r.adjust( 1, 0, 0, 0 );
306 
307  if ( hInterval.borderFlags() & QwtInterval::ExcludeMaximum )
308  r.adjust( 0, 0, -1, 0 );
309 
310  if ( vInterval.borderFlags() & QwtInterval::ExcludeMinimum )
311  r.adjust( 0, 1, 0, 0 );
312 
313  if ( vInterval.borderFlags() & QwtInterval::ExcludeMaximum )
314  r.adjust( 0, 0, 0, -1 );
315 
316  return r;
317 }
318 
virtual ~QwtColumnSymbol()
Destructor.
A plain frame style.
FrameStyle frameStyle() const
Max value is not included in the interval.
Definition: qwt_interval.h:38
PrivateData * m_data
A drawing primitive for columns.
static void qwtDrawBox(QPainter *p, const QRectF &rect, const QPalette &pal, double lw)
QwtColumnSymbol(Style=NoStyle)
static void qwtDrawPanel(QPainter *painter, const QRectF &rect, const QPalette &pal, double lw)
QwtColumnSymbol::FrameStyle frameStyle
QWT_CONSTEXPR float qwtMinF(float a, float b)
Definition: qwt_math.h:99
QwtColumnSymbol::Style style
A raised frame style.
void setPalette(const QPalette &)
Min value is not included in the interval.
Definition: qwt_interval.h:35
void setFrameStyle(FrameStyle)
void setLineWidth(int width)
Directed rectangle representing bounding rectangle and orientation of a column.
void drawBox(QPainter *, const QwtColumnRect &) const
const QPalette & palette() const
QRectF toRect() const
static bool roundingAlignment()
Definition: qwt_painter.h:183
virtual void draw(QPainter *, const QwtColumnRect &) const


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Jun 19 2023 03:01:38