地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
4.8 KiB

15 years ago
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
15 years ago
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
#ifndef QWT_PLOT_CANVAS_H
#define QWT_PLOT_CANVAS_H
#include "qwt_global.h"
#include <qframe.h>
#include <qpainterpath.h>
15 years ago
class QwtPlot;
class QPixmap;
/*!
\brief Canvas of a QwtPlot.
Canvas is the widget where all plot items are displayed
\sa QwtPlot::setCanvas(), QwtPlotGLCanvas
15 years ago
*/
class QWT_EXPORT QwtPlotCanvas : public QFrame
{
Q_OBJECT
Q_PROPERTY( double borderRadius READ borderRadius WRITE setBorderRadius )
15 years ago
public:
/*!
\brief Paint attributes
The default setting enables BackingStore and Opaque.
15 years ago
\sa setPaintAttribute(), testPaintAttribute()
15 years ago
*/
enum PaintAttribute
{
/*!
\brief Paint double buffered reusing the content
of the pixmap buffer when possible.
Using a backing store might improve the performance
significantly, when working with widget overlays ( like rubber bands ).
Disabling the cache might improve the performance for
incremental paints (using QwtPlotDirectPainter ).
\sa backingStore(), invalidateBackingStore()
*/
BackingStore = 1,
/*!
\brief Try to fill the complete contents rectangle
of the plot canvas
When using styled backgrounds Qt assumes, that the
canvas doesn't fill its area completely
( f.e because of rounded borders ) and fills the area
below the canvas. When this is done with gradients it might
result in a serious performance bottleneck - depending on the size.
When the Opaque attribute is enabled the canvas tries to
identify the gaps with some heuristics and to fill those only.
\warning Will not work for semitransparent backgrounds
*/
Opaque = 2,
/*!
\brief Try to improve painting of styled backgrounds
QwtPlotCanvas supports the box model attributes for
customizing the layout with style sheets. Unfortunately
the design of Qt style sheets has no concept how to
handle backgrounds with rounded corners - beside of padding.
When HackStyledBackground is enabled the plot canvas tries
to separate the background from the background border
by reverse engineering to paint the background before and
the border after the plot items. In this order the border
gets perfectly antialiased and you can avoid some pixel
artifacts in the corners.
*/
HackStyledBackground = 4,
/*!
When ImmediatePaint is set replot() calls repaint()
instead of update().
\sa replot(), QWidget::repaint(), QWidget::update()
*/
ImmediatePaint = 8
15 years ago
};
//! Paint attributes
typedef QFlags<PaintAttribute> PaintAttributes;
15 years ago
/*!
\brief Focus indicator
The default setting is NoFocusIndicator
15 years ago
\sa setFocusIndicator(), focusIndicator(), paintFocus()
*/
enum FocusIndicator
{
//! Don't paint a focus indicator
15 years ago
NoFocusIndicator,
/*!
The focus is related to the complete canvas.
Paint the focus indicator using paintFocus()
*/
15 years ago
CanvasFocusIndicator,
/*!
The focus is related to an item (curve, point, ...) on
the canvas. It is up to the application to display a
focus indication using f.e. highlighting.
*/
15 years ago
ItemFocusIndicator
};
explicit QwtPlotCanvas( QwtPlot * = NULL );
15 years ago
virtual ~QwtPlotCanvas();
QwtPlot *plot();
const QwtPlot *plot() const;
void setFocusIndicator( FocusIndicator );
15 years ago
FocusIndicator focusIndicator() const;
void setBorderRadius( double );
double borderRadius() const;
15 years ago
void setPaintAttribute( PaintAttribute, bool on = true );
bool testPaintAttribute( PaintAttribute ) const;
15 years ago
const QPixmap *backingStore() const;
void invalidateBackingStore();
15 years ago
virtual bool event( QEvent * );
15 years ago
Q_INVOKABLE QPainterPath borderPath( const QRect & ) const;
15 years ago
public Q_SLOTS:
void replot();
protected:
virtual void paintEvent( QPaintEvent * );
virtual void resizeEvent( QResizeEvent * );
virtual void drawFocusIndicator( QPainter * );
virtual void drawBorder( QPainter * );
void updateStyleSheetInfo();
15 years ago
private:
void drawCanvas( QPainter *, bool withBackground );
15 years ago
class PrivateData;
PrivateData *d_data;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCanvas::PaintAttributes )
15 years ago
#endif