1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/dfb/window.h 3// Purpose: wxWindow class 4// Author: Vaclav Slavik 5// Created: 2006-08-10 6// RCS-ID: $Id: window.h 42340 2006-10-24 12:29:14Z VS $ 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 20wxDFB_DECLARE_INTERFACE(IDirectFBSurface); 21struct wxDFBWindowEvent; 22 23class WXDLLIMPEXP_CORE wxFont; 24class WXDLLIMPEXP_CORE wxTopLevelWindowDFB; 25 26class wxOverlayImpl; 27class wxDfbOverlaysList; 28 29// --------------------------------------------------------------------------- 30// wxWindow 31// --------------------------------------------------------------------------- 32 33class WXDLLIMPEXP_CORE wxWindowDFB : public wxWindowBase 34{ 35public: 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 Clear(); 79 virtual void Freeze(); 80 virtual void Thaw(); 81 virtual bool IsFrozen() const { return m_frozenness > 0; } 82 83 virtual bool SetCursor(const wxCursor &cursor); 84 virtual bool SetFont(const wxFont &font) { m_font = font; return true; } 85 86 virtual int GetCharHeight() const; 87 virtual int GetCharWidth() const; 88 virtual void GetTextExtent(const wxString& string, 89 int *x, int *y, 90 int *descent = (int *) NULL, 91 int *externalLeading = (int *) NULL, 92 const wxFont *theFont = (const wxFont *) NULL) 93 const; 94 95#if wxUSE_DRAG_AND_DROP 96 virtual void SetDropTarget(wxDropTarget *dropTarget); 97 98 // Accept files for dragging 99 virtual void DragAcceptFiles(bool accept); 100#endif // wxUSE_DRAG_AND_DROP 101 102 virtual WXWidget GetHandle() const { return this; } 103 104 // implementation from now on 105 // -------------------------- 106 107 // Returns DirectFB surface used for rendering of this window 108 wxIDirectFBSurfacePtr GetDfbSurface(); 109 110 // returns toplevel window the window belongs to 111 wxTopLevelWindowDFB *GetTLW() const { return m_tlw; } 112 113 void OnInternalIdle(); 114 115 virtual bool IsDoubleBuffered() const { return true; } 116 117protected: 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); 128 129 virtual void DoCaptureMouse(); 130 virtual void DoReleaseMouse(); 131 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); 137 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; 141 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(); 146 147 // called by parent to render (part of) the window 148 void PaintWindow(const wxRect& rect); 149 150 // paint window's overlays (if any) on top of window's surface 151 void PaintOverlays(const wxRect& rect); 152 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); 161 162 // add/remove overlay for this window 163 void AddOverlay(wxOverlayImpl *overlay); 164 void RemoveOverlay(wxOverlayImpl *overlay); 165 166 // DirectFB events handling 167 void HandleKeyEvent(const wxDFBWindowEvent& event_); 168 169private: 170 // common part of all ctors 171 void Init(); 172 // counterpart to SetFocus 173 void DFBKillFocus(); 174 175protected: 176 // toplevel window (i.e. DirectFB window) this window belongs to 177 wxTopLevelWindowDFB *m_tlw; 178 179private: 180 // subsurface of TLW's surface covered by this window 181 wxIDirectFBSurfacePtr m_surface; 182 183 // position of the window (relative to the parent, not used by wxTLW, so 184 // don't access it directly) 185 wxRect m_rect; 186 187 // number of calls to Freeze() minus number of calls to Thaw() 188 unsigned m_frozenness; 189 190 // overlays for this window (or NULL if it doesn't have any) 191 wxDfbOverlaysList *m_overlays; 192 193 friend class wxTopLevelWindowDFB; // for HandleXXXEvent 194 friend class wxOverlayImpl; // for Add/RemoveOverlay 195 friend class wxWindowDC; // for PaintOverlays 196 197 DECLARE_DYNAMIC_CLASS(wxWindowDFB) 198 DECLARE_NO_COPY_CLASS(wxWindowDFB) 199 DECLARE_EVENT_TABLE() 200}; 201 202#endif // _WX_DFB_WINDOW_H_ 203