10#include "qwt_plot_canvas.h"
11#include "qwt_painter.h"
15#include <qpainterpath.h>
18class QwtPlotCanvas::PrivateData
22 : backingStore( NULL )
32 QPixmap* backingStore;
45 m_data =
new PrivateData;
52 setFrameShadow( QFrame::Sunken );
53 setFrameShape( QFrame::Panel );
72 if (
bool( m_data->paintAttributes & attribute ) == on )
76 m_data->paintAttributes |= attribute;
78 m_data->paintAttributes &= ~attribute;
86 if ( m_data->backingStore == NULL )
87 m_data->backingStore =
new QPixmap();
91#if QT_VERSION >= 0x050000
92 *m_data->backingStore = grab( rect() );
94 *m_data->backingStore =
95 QPixmap::grabWidget(
this, rect() );
101 delete m_data->backingStore;
102 m_data->backingStore = NULL;
109 setAttribute( Qt::WA_OpaquePaintEvent,
true );
129 return m_data->paintAttributes & attribute;
135 return m_data->backingStore;
141 if ( m_data->backingStore )
142 *m_data->backingStore = QPixmap();
153 if (
event->type() == QEvent::PolishRequest )
161 setAttribute( Qt::WA_OpaquePaintEvent,
true );
165 if (
event->type() == QEvent::PolishRequest ||
166 event->type() == QEvent::StyleChange )
171 return QFrame::event(
event );
180 QPainter painter(
this );
181 painter.setClipRegion(
event->region() );
184 m_data->backingStore != NULL )
186 QPixmap& bs = *m_data->backingStore;
191 if ( testAttribute(Qt::WA_StyledBackground) )
211 if ( frameWidth() > 0 )
216 painter.drawPixmap( 0, 0, *m_data->backingStore );
220 if ( testAttribute(Qt::WA_StyledBackground ) )
222 if ( testAttribute( Qt::WA_OpaquePaintEvent ) )
233 if ( testAttribute( Qt::WA_OpaquePaintEvent ) )
235 if ( autoFillBackground() )
245 QPainterPath clipPath;
246 clipPath.addRect( rect() );
247 clipPath = clipPath.subtracted(
borderPath( rect() ) );
251 painter.setClipPath( clipPath, Qt::IntersectClip );
261 if ( frameWidth() > 0 )
280 drawFrame( painter );
293 QFrame::resizeEvent(
event );
306 repaint( contentsRect() );
308 update( contentsRect() );
325#include "moc_qwt_plot_canvas.cpp"
static void fillPixmap(const QWidget *, QPixmap &, const QPoint &offset=QPoint())
static qreal devicePixelRatio(const QPaintDevice *)
static QPixmap backingStore(QWidget *, const QSize &)
Base class for all type of plot canvases.
void fillBackground(QPainter *)
Helper function for the derived plot canvas.
virtual void drawBackground(QPainter *)
Helper function for the derived plot canvas.
void drawUnstyled(QPainter *)
Helper function for the derived plot canvas.
FocusIndicator focusIndicator() const
void updateStyleSheetInfo()
Update the cached information about the current style sheet.
double borderRadius() const
QPainterPath canvasBorderPath(const QRect &rect) const
virtual void drawBorder(QPainter *)
void drawCanvas(QPainter *)
Draw the plot to the canvas.
void drawStyled(QPainter *, bool)
Helper function for the derived plot canvas.
virtual void drawFocusIndicator(QPainter *)
QFlags< PaintAttribute > PaintAttributes
virtual void paintEvent(QPaintEvent *) override
virtual ~QwtPlotCanvas()
Destructor.
bool testPaintAttribute(PaintAttribute) const
PaintAttribute
Paint attributes.
@ Opaque
Try to fill the complete contents rectangle of the plot canvas.
@ HackStyledBackground
Try to improve painting of styled backgrounds.
@ BackingStore
Paint double buffered reusing the content of the pixmap buffer when possible.
void setPaintAttribute(PaintAttribute, bool on=true)
Changing the paint attributes.
virtual void resizeEvent(QResizeEvent *) override
QwtPlotCanvas(QwtPlot *=NULL)
Constructor.
virtual bool event(QEvent *) override
const QPixmap * backingStore() const
Q_INVOKABLE void invalidateBackingStore()
Invalidate the internal backing store.
virtual void drawBorder(QPainter *) override
Q_INVOKABLE QPainterPath borderPath(const QRect &) const