]> git.saurik.com Git - wxWidgets.git/blob - include/wx/dfb/window.h
684b282a4f20d9fe56456eaa0cc4cc225bfa0a7d
[wxWidgets.git] / include / wx / dfb / window.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/dfb/window.h
3 // Purpose: wxWindow class
4 // Author: Vaclav Slavik
5 // Created: 2006-08-10
6 // RCS-ID: $Id$
7 // Copyright: (c) 2006 REA Elektronik GmbH
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifndef _WX_DFB_WINDOW_H_
12 #define _WX_DFB_WINDOW_H_
13
14 // ---------------------------------------------------------------------------
15 // headers
16 // ---------------------------------------------------------------------------
17
18 #include "wx/dfb/dfbptr.h"
19
20 wxDFB_DECLARE_INTERFACE(IDirectFBSurface);
21 struct wxDFBWindowEvent;
22
23 class WXDLLIMPEXP_FWD_CORE wxFont;
24 class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow;
25
26 class wxOverlayImpl;
27 class wxDfbOverlaysList;
28
29 // ---------------------------------------------------------------------------
30 // wxWindow
31 // ---------------------------------------------------------------------------
32
33 class WXDLLIMPEXP_CORE wxWindowDFB : public wxWindowBase
34 {
35 public:
36 wxWindowDFB() { Init(); }
37
38 wxWindowDFB(wxWindow *parent,
39 wxWindowID id,
40 const wxPoint& pos = wxDefaultPosition,
41 const wxSize& size = wxDefaultSize,
42 long style = 0,
43 const wxString& name = wxPanelNameStr)
44 {
45 Init();
46 Create(parent, id, pos, size, style, name);
47 }
48
49 virtual ~wxWindowDFB();
50
51 bool Create(wxWindow *parent,
52 wxWindowID id,
53 const wxPoint& pos = wxDefaultPosition,
54 const wxSize& size = wxDefaultSize,
55 long style = 0,
56 const wxString& name = wxPanelNameStr);
57
58 // implement base class (pure) virtual methods
59 // -------------------------------------------
60
61 virtual void SetLabel( const wxString &WXUNUSED(label) ) {}
62 virtual wxString GetLabel() const { return wxEmptyString; }
63
64 virtual void Raise();
65 virtual void Lower();
66
67 virtual bool Show(bool show = true);
68
69 virtual void SetFocus();
70
71 virtual bool Reparent(wxWindowBase *newParent);
72
73 virtual void WarpPointer(int x, int y);
74
75 virtual void Refresh(bool eraseBackground = true,
76 const wxRect *rect = (const wxRect *) NULL);
77 virtual void Update();
78 virtual void Freeze();
79 virtual void Thaw();
80 virtual bool IsFrozen() const { return m_frozenness > 0; }
81
82 virtual bool SetCursor(const wxCursor &cursor);
83 virtual bool SetFont(const wxFont &font) { m_font = font; return true; }
84
85 virtual int GetCharHeight() const;
86 virtual int GetCharWidth() const;
87 virtual void GetTextExtent(const wxString& string,
88 int *x, int *y,
89 int *descent = (int *) NULL,
90 int *externalLeading = (int *) NULL,
91 const wxFont *theFont = (const wxFont *) NULL)
92 const;
93
94 #if wxUSE_DRAG_AND_DROP
95 virtual void SetDropTarget(wxDropTarget *dropTarget);
96
97 // Accept files for dragging
98 virtual void DragAcceptFiles(bool accept);
99 #endif // wxUSE_DRAG_AND_DROP
100
101 virtual WXWidget GetHandle() const { return this; }
102
103 // implementation from now on
104 // --------------------------
105
106 // Returns DirectFB surface used for rendering of this window
107 wxIDirectFBSurfacePtr GetDfbSurface();
108
109 // returns toplevel window the window belongs to
110 wxNonOwnedWindow *GetTLW() const { return m_tlw; }
111
112 void OnInternalIdle();
113
114 virtual bool IsDoubleBuffered() const { return true; }
115
116 protected:
117 // implement the base class pure virtuals
118 virtual void DoClientToScreen(int *x, int *y) const;
119 virtual void DoScreenToClient(int *x, int *y) const;
120 virtual void DoGetPosition(int *x, int *y) const;
121 virtual void DoGetSize(int *width, int *height) const;
122 virtual void DoGetClientSize(int *width, int *height) const;
123 virtual void DoSetSize(int x, int y,
124 int width, int height,
125 int sizeFlags = wxSIZE_AUTO);
126 virtual void DoSetClientSize(int width, int height);
127
128 virtual void DoCaptureMouse();
129 virtual void DoReleaseMouse();
130
131 // move the window to the specified location and resize it: this is called
132 // from both DoSetSize() and DoSetClientSize() and would usually just call
133 // ::MoveWindow() except for composite controls which will want to arrange
134 // themselves inside the given rectangle
135 virtual void DoMoveWindow(int x, int y, int width, int height);
136
137 // return DFB surface used to render this window (will be assigned to
138 // m_surface if the window is visible)
139 virtual wxIDirectFBSurfacePtr ObtainDfbSurface() const;
140
141 // this method must be called when window's position, size or visibility
142 // changes; it resets m_surface so that ObtainDfbSurface has to be called
143 // next time GetDfbSurface is called
144 void InvalidateDfbSurface();
145
146 // called by parent to render (part of) the window
147 void PaintWindow(const wxRect& rect);
148
149 // paint window's overlays (if any) on top of window's surface
150 void PaintOverlays(const wxRect& rect);
151
152 // refreshes the entire window (including non-client areas)
153 void DoRefreshWindow();
154 // refreshes given rectangle of the window (in window, _not_ client coords)
155 virtual void DoRefreshRect(const wxRect& rect);
156 // refreshes given rectangle; unlike RefreshRect(), the argument is in
157 // window, not client, coords and unlike DoRefreshRect() and like Refresh(),
158 // does nothing if the window is hidden or frozen
159 void RefreshWindowRect(const wxRect& rect);
160
161 // add/remove overlay for this window
162 void AddOverlay(wxOverlayImpl *overlay);
163 void RemoveOverlay(wxOverlayImpl *overlay);
164
165 // DirectFB events handling
166 void HandleKeyEvent(const wxDFBWindowEvent& event_);
167
168 private:
169 // common part of all ctors
170 void Init();
171 // counterpart to SetFocus
172 void DFBKillFocus();
173
174 protected:
175 // toplevel window (i.e. DirectFB window) this window belongs to
176 wxNonOwnedWindow *m_tlw;
177
178 private:
179 // subsurface of TLW's surface covered by this window
180 wxIDirectFBSurfacePtr m_surface;
181
182 // position of the window (relative to the parent, not used by wxTLW, so
183 // don't access it directly)
184 wxRect m_rect;
185
186 // number of calls to Freeze() minus number of calls to Thaw()
187 unsigned m_frozenness;
188
189 // overlays for this window (or NULL if it doesn't have any)
190 wxDfbOverlaysList *m_overlays;
191
192 friend class wxNonOwnedWindow; // for HandleXXXEvent
193 friend class wxOverlayImpl; // for Add/RemoveOverlay
194 friend class wxWindowDCImpl; // for PaintOverlays
195
196 DECLARE_DYNAMIC_CLASS(wxWindowDFB)
197 DECLARE_NO_COPY_CLASS(wxWindowDFB)
198 DECLARE_EVENT_TABLE()
199 };
200
201 #endif // _WX_DFB_WINDOW_H_