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 // vim: expandtab
11 
12 #ifndef QWT_PLOT_CANVAS_H
13 #define QWT_PLOT_CANVAS_H
14 
15 #include <qframe.h>
16 #include <qpen.h>
17 #include "qwt_global.h"
18 
19 class QwtPlot;
20 class QPixmap;
21 
22 /*!
23   \brief Canvas of a QwtPlot.
24   \sa QwtPlot
25 */
26 class QWT_EXPORT QwtPlotCanvas : public QFrame
27 {
28     Q_OBJECT
29 
30 public:
31 
32     /*!
33       \brief Paint attributes
34 
35       - PaintCached\n
36         Paint double buffered and reuse the content of the pixmap buffer
37         for some spontaneous repaints that happen when a plot gets unhidden,
38         deiconified or changes the focus.
39         Disabling the cache will improve the performance for
40         incremental paints (using QwtPlotCurve::draw).
41 
42       - PaintPacked\n
43         Suppress system background repaints and paint it together with
44         the canvas contents.
45         Painting packed might avoid flickering for expensive repaints,
46         when there is a notable gap between painting the background
47         and the plot contents.
48 
49       The default setting enables PaintCached and PaintPacked
50 
51       \sa setPaintAttribute(), testPaintAttribute(), paintCache()
52      */
53     enum PaintAttribute
54     {
55         PaintCached = 1,
56         PaintPacked = 2
57     };
58 
59     /*!
60       \brief Focus indicator
61 
62       - NoFocusIndicator\n
63         Don't paint a focus indicator
64 
65       - CanvasFocusIndicator\n
66         The focus is related to the complete canvas.
67         Paint the focus indicator using paintFocus()
68 
69       - ItemFocusIndicator\n
70         The focus is related to an item (curve, point, ...) on
71         the canvas. It is up to the application to display a
72         focus indication using f.e. highlighting.
73 
74       \sa setFocusIndicator(), focusIndicator(), paintFocus()
75     */
76 
77     enum FocusIndicator
78     {
79         NoFocusIndicator,
80         CanvasFocusIndicator,
81         ItemFocusIndicator
82     };
83 
84     explicit QwtPlotCanvas(QwtPlot *);
85     virtual ~QwtPlotCanvas();
86 
87     QwtPlot *plot();
88     const QwtPlot *plot() const;
89 
90     void setFocusIndicator(FocusIndicator);
91     FocusIndicator focusIndicator() const;
92 
93     void setPaintAttribute(PaintAttribute, bool on = true);
94     bool testPaintAttribute(PaintAttribute) const;
95 
96     QPixmap *paintCache();
97     const QPixmap *paintCache() const;
98     void invalidatePaintCache();
99 
100     void replot();
101 
102 protected:
103     virtual void hideEvent(QHideEvent *);
104 
105     virtual void paintEvent(QPaintEvent *);
106 
107     virtual void drawContents(QPainter *);
108     virtual void drawFocusIndicator(QPainter *);
109 
110     void drawCanvas(QPainter *painter = NULL);
111 
112 private:
113     void setSystemBackground(bool);
114 
115     class PrivateData;
116     PrivateData *d_data;
117 };
118 
119 #endif
120