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