9#include "qwt_polar_canvas.h"
10#include "qwt_polar_plot.h"
11#include "qwt_painter.h"
17#include <qstyleoption.h>
19#include <qx11info_x11.h>
22static inline void qwtDrawStyledBackground(
23 QWidget* widget, QPainter* painter )
26 opt.initFrom( widget );
27 widget->style()->drawPrimitive( QStyle::PE_Widget, &opt, painter, widget );
30static QWidget* qwtBackgroundWidget( QWidget* w )
32 if ( w->parentWidget() == NULL )
35 if ( w->autoFillBackground() )
37 const QBrush brush = w->palette().brush( w->backgroundRole() );
38 if ( brush.color().alpha() > 0 )
42 if ( w->testAttribute( Qt::WA_StyledBackground ) )
44 QImage image( 1, 1, QImage::Format_ARGB32 );
45 image.fill( Qt::transparent );
47 QPainter painter( &image );
48 painter.translate( -w->rect().center() );
49 qwtDrawStyledBackground( w, &painter );
52 if ( qAlpha( image.pixel( 0, 0 ) ) != 0 )
56 return qwtBackgroundWidget( w->parentWidget() );
59class QwtPolarCanvas::PrivateData
63 : backingStore( NULL )
73 QPixmap* backingStore;
80 m_data =
new PrivateData;
83 setCursor( Qt::CrossCursor );
85 setFocusPolicy( Qt::WheelFocus );
99 return qobject_cast< QwtPolarPlot* >( parent() );
105 return qobject_cast< QwtPolarPlot* >( parent() );
120 if (
bool( m_data->paintAttributes & attribute ) == on )
124 m_data->paintAttributes |= attribute;
126 m_data->paintAttributes &= ~attribute;
134 if ( m_data->backingStore == NULL )
135 m_data->backingStore =
new QPixmap();
139 const QRect cr = contentsRect();
140#if QT_VERSION >= 0x050000
141 *m_data->backingStore = grab( cr );
143 *m_data->backingStore = QPixmap::grabWidget(
this, cr );
149 delete m_data->backingStore;
150 m_data->backingStore = NULL;
166 return ( m_data->paintAttributes & attribute ) != 0;
172 return m_data->backingStore;
178 if ( m_data->backingStore )
179 *m_data->backingStore = QPixmap();
188 QPainter painter(
this );
189 painter.setClipRegion( event->region() );
192 && m_data->backingStore != NULL )
194 QPixmap& bs = *m_data->backingStore;
195 if ( bs.size() != size() )
197 bs = QPixmap( size() );
199 if ( bs.x11Info().screen() != x11Info().screen() )
200 bs.x11SetScreen( x11Info().screen() );
205 if ( testAttribute( Qt::WA_StyledBackground ) )
208 qwtDrawStyledBackground(
this, &p );
212 if ( autoFillBackground() )
215 p.fillRect( rect(), palette().brush( backgroundRole() ) );
219 QWidget* bgWidget = qwtBackgroundWidget(
plot() );
222 mapTo( bgWidget, rect().topLeft() ) );
230 if ( frameWidth() > 0 )
234 painter.drawPixmap( 0, 0, *m_data->backingStore );
238 qwtDrawStyledBackground(
this, &painter );
242 if ( frameWidth() > 0 )
243 drawFrame( &painter );
253 QFrame::resizeEvent( event );
255 for (
int scaleId = 0; scaleId < QwtPolar::ScaleCount; scaleId++ )
274 const QPointF center = pl->
plotRect().center();
276 double dx = pos.x() - center.x();
277 double dy = -( pos.y() - center.y() );
284 double min = azimuthMap.
s1();
285 double max = azimuthMap.
s2();
291 azimuth += max - min;
293 else if ( azimuth > max )
295 azimuth -= max - min;
320 const QPointF pos = qwtPolar2Pos(
321 pl->
plotRect().center(), radius, azimuth );
323 return pos.toPoint();
326#include "moc_qwt_polar_canvas.cpp"
static void fillPixmap(const QWidget *, QPixmap &, const QPoint &offset=QPoint())
A point in polar coordinates.
double radius() const
Returns the radius.
double azimuth() const
Returns the azimuth.
QwtPointPolar normalized() const
QFlags< PaintAttribute > PaintAttributes
PaintAttribute
Paint attributes.
void invalidateBackingStore()
Invalidate the internal backing store.
QwtPointPolar invTransform(const QPoint &) const
QPoint transform(const QwtPointPolar &) const
virtual void paintEvent(QPaintEvent *) override
bool testPaintAttribute(PaintAttribute) const
QwtPolarCanvas(QwtPolarPlot *)
Constructor.
virtual ~QwtPolarCanvas()
Destructor.
virtual void resizeEvent(QResizeEvent *) override
const QPixmap * backingStore() const
void setPaintAttribute(PaintAttribute, bool on=true)
Changing the paint attributes.
A plotting widget, displaying a polar coordinate system.
QwtScaleMap scaleMap(int scaleId, double radius) const
virtual void drawCanvas(QPainter *, const QRectF &) const
void updateScale(int scaleId)
double transform(double s) const
double invTransform(double p) const