1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/dfb/window.h
3 // Purpose: wxWindow class
4 // Author: Vaclav Slavik
7 // Copyright: (c) 2006 REA Elektronik GmbH
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_DFB_WINDOW_H_
12 #define _WX_DFB_WINDOW_H_
14 // ---------------------------------------------------------------------------
16 // ---------------------------------------------------------------------------
18 #include "wx/dfb/dfbptr.h"
20 wxDFB_DECLARE_INTERFACE(IDirectFBSurface
);
21 struct wxDFBWindowEvent
;
23 class WXDLLIMPEXP_CORE wxFont
;
24 class WXDLLIMPEXP_CORE wxTopLevelWindowDFB
;
27 class wxDfbOverlaysList
;
29 // ---------------------------------------------------------------------------
31 // ---------------------------------------------------------------------------
33 class WXDLLIMPEXP_CORE wxWindowDFB
: public wxWindowBase
36 wxWindowDFB() { Init(); }
38 wxWindowDFB(wxWindow
*parent
,
40 const wxPoint
& pos
= wxDefaultPosition
,
41 const wxSize
& size
= wxDefaultSize
,
43 const wxString
& name
= wxPanelNameStr
)
46 Create(parent
, id
, pos
, size
, style
, name
);
49 virtual ~wxWindowDFB();
51 bool Create(wxWindow
*parent
,
53 const wxPoint
& pos
= wxDefaultPosition
,
54 const wxSize
& size
= wxDefaultSize
,
56 const wxString
& name
= wxPanelNameStr
);
58 // implement base class (pure) virtual methods
59 // -------------------------------------------
61 virtual void SetLabel( const wxString
&WXUNUSED(label
) ) {}
62 virtual wxString
GetLabel() const { return wxEmptyString
; }
67 virtual bool Show(bool show
= true);
69 virtual void SetFocus();
71 virtual bool Reparent(wxWindowBase
*newParent
);
73 virtual void WarpPointer(int x
, int y
);
75 virtual void Refresh(bool eraseBackground
= true,
76 const wxRect
*rect
= (const wxRect
*) NULL
);
77 virtual void Update();
79 virtual void Freeze();
81 virtual bool IsFrozen() const { return m_frozenness
> 0; }
83 virtual bool SetCursor(const wxCursor
&cursor
);
84 virtual bool SetFont(const wxFont
&font
) { m_font
= font
; return true; }
86 virtual int GetCharHeight() const;
87 virtual int GetCharWidth() const;
88 virtual void GetTextExtent(const wxString
& string
,
90 int *descent
= (int *) NULL
,
91 int *externalLeading
= (int *) NULL
,
92 const wxFont
*theFont
= (const wxFont
*) NULL
)
95 #if wxUSE_DRAG_AND_DROP
96 virtual void SetDropTarget(wxDropTarget
*dropTarget
);
98 // Accept files for dragging
99 virtual void DragAcceptFiles(bool accept
);
100 #endif // wxUSE_DRAG_AND_DROP
102 virtual WXWidget
GetHandle() const { return this; }
104 // implementation from now on
105 // --------------------------
107 // Returns DirectFB surface used for rendering of this window
108 wxIDirectFBSurfacePtr
GetDfbSurface();
110 // returns toplevel window the window belongs to
111 wxTopLevelWindowDFB
*GetTLW() const { return m_tlw
; }
113 void OnInternalIdle();
115 virtual bool IsDoubleBuffered() const { return true; }
118 // implement the base class pure virtuals
119 virtual void DoClientToScreen(int *x
, int *y
) const;
120 virtual void DoScreenToClient(int *x
, int *y
) const;
121 virtual void DoGetPosition(int *x
, int *y
) const;
122 virtual void DoGetSize(int *width
, int *height
) const;
123 virtual void DoGetClientSize(int *width
, int *height
) const;
124 virtual void DoSetSize(int x
, int y
,
125 int width
, int height
,
126 int sizeFlags
= wxSIZE_AUTO
);
127 virtual void DoSetClientSize(int width
, int height
);
129 virtual void DoCaptureMouse();
130 virtual void DoReleaseMouse();
132 // move the window to the specified location and resize it: this is called
133 // from both DoSetSize() and DoSetClientSize() and would usually just call
134 // ::MoveWindow() except for composite controls which will want to arrange
135 // themselves inside the given rectangle
136 virtual void DoMoveWindow(int x
, int y
, int width
, int height
);
138 // return DFB surface used to render this window (will be assigned to
139 // m_surface if the window is visible)
140 virtual wxIDirectFBSurfacePtr
ObtainDfbSurface() const;
142 // this method must be called when window's position, size or visibility
143 // changes; it resets m_surface so that ObtainDfbSurface has to be called
144 // next time GetDfbSurface is called
145 void InvalidateDfbSurface();
147 // called by parent to render (part of) the window
148 void PaintWindow(const wxRect
& rect
);
150 // paint window's overlays (if any) on top of window's surface
151 void PaintOverlays(const wxRect
& rect
);
153 // refreshes the entire window (including non-client areas)
154 void DoRefreshWindow();
155 // refreshes given rectangle of the window (in window, _not_ client coords)
156 virtual void DoRefreshRect(const wxRect
& rect
);
157 // refreshes given rectangle; unlike RefreshRect(), the argument is in
158 // window, not client, coords and unlike DoRefreshRect() and like Refresh(),
159 // does nothing if the window is hidden or frozen
160 void RefreshWindowRect(const wxRect
& rect
);
162 // add/remove overlay for this window
163 void AddOverlay(wxOverlayImpl
*overlay
);
164 void RemoveOverlay(wxOverlayImpl
*overlay
);
166 // DirectFB events handling
167 void HandleKeyEvent(const wxDFBWindowEvent
& event_
);
170 // common part of all ctors
172 // counterpart to SetFocus
176 // toplevel window (i.e. DirectFB window) this window belongs to
177 wxTopLevelWindowDFB
*m_tlw
;
180 // subsurface of TLW's surface covered by this window
181 wxIDirectFBSurfacePtr m_surface
;
183 // position of the window (relative to the parent, not used by wxTLW, so
184 // don't access it directly)
187 // number of calls to Freeze() minus number of calls to Thaw()
188 unsigned m_frozenness
;
190 // overlays for this window (or NULL if it doesn't have any)
191 wxDfbOverlaysList
*m_overlays
;
193 friend class wxTopLevelWindowDFB
; // for HandleXXXEvent
194 friend class wxOverlayImpl
; // for Add/RemoveOverlay
195 friend class wxWindowDC
; // for PaintOverlays
197 DECLARE_DYNAMIC_CLASS(wxWindowDFB
)
198 DECLARE_NO_COPY_CLASS(wxWindowDFB
)
199 DECLARE_EVENT_TABLE()
202 #endif // _WX_DFB_WINDOW_H_