1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/overlay.h
3 // Purpose:     wxOverlay class
4 // Author:      Stefan Csomor
5 // Modified by:
6 // Created:     2006-10-20
7 // RCS-ID:      $Id: overlay.h 53135 2008-04-12 02:31:04Z VZ $
8 // Copyright:   (c) wxWidgets team
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_OVERLAY_H_
13 #define _WX_OVERLAY_H_
14 
15 #include "wx/defs.h"
16 
17 #if defined(wxMAC_USE_CORE_GRAPHICS) && wxMAC_USE_CORE_GRAPHICS
18     #define wxHAS_NATIVE_OVERLAY 1
19 #elif defined(__WXDFB__)
20     #define wxHAS_NATIVE_OVERLAY 1
21 #else
22     // don't define wxHAS_NATIVE_OVERLAY
23 #endif
24 
25 // ----------------------------------------------------------------------------
26 // creates an overlay over an existing window, allowing for manipulations like
27 // rubberbanding etc. This API is not stable yet, not to be used outside wx
28 // internal code
29 // ----------------------------------------------------------------------------
30 
31 class WXDLLIMPEXP_FWD_CORE wxOverlayImpl;
32 class WXDLLIMPEXP_FWD_CORE wxWindowDC;
33 
34 class WXDLLEXPORT wxOverlay
35 {
36 public:
37     wxOverlay();
38     ~wxOverlay();
39 
40     // clears the overlay without restoring the former state
41     // to be done eg when the window content has been changed and repainted
42     void Reset();
43 
44     // returns (port-specific) implementation of the overlay
GetImpl()45     wxOverlayImpl *GetImpl() { return m_impl; }
46 
47 private:
48     friend class WXDLLIMPEXP_FWD_CORE wxDCOverlay;
49 
50     // returns true if it has been setup
51     bool IsOk();
52 
53     void Init(wxWindowDC* dc, int x , int y , int width , int height);
54 
55     void BeginDrawing(wxWindowDC* dc);
56 
57     void EndDrawing(wxWindowDC* dc);
58 
59     void Clear(wxWindowDC* dc);
60 
61     wxOverlayImpl* m_impl;
62 
63     bool m_inDrawing;
64 
65 
66     DECLARE_NO_COPY_CLASS(wxOverlay)
67 };
68 
69 
70 class WXDLLEXPORT wxDCOverlay
71 {
72 public:
73     // connects this overlay to the corresponding drawing dc, if the overlay is
74     // not initialized yet this call will do so
75     wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc, int x , int y , int width , int height);
76 
77     // convenience wrapper that behaves the same using the entire area of the dc
78     wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc);
79 
80     // removes the connection between the overlay and the dc
81     virtual ~wxDCOverlay();
82 
83     // clears the layer, restoring the state at the last init
84     void Clear();
85 
86 private:
87     void Init(wxWindowDC *dc, int x , int y , int width , int height);
88 
89     wxOverlay& m_overlay;
90 
91     wxWindowDC* m_dc;
92 
93 
94     DECLARE_NO_COPY_CLASS(wxDCOverlay)
95 };
96 
97 #endif // _WX_OVERLAY_H_
98