// headers
// ---------------------------------------------------------------------------
-#include "wx/dfb/ifacehelpers.h"
+#include "wx/dfb/dfbptr.h"
wxDFB_DECLARE_INTERFACE(IDirectFBSurface);
struct wxDFBWindowEvent;
-class WXDLLIMPEXP_CORE wxFont;
-class WXDLLIMPEXP_CORE wxTopLevelWindowDFB;
+class WXDLLIMPEXP_FWD_CORE wxFont;
+class WXDLLIMPEXP_FWD_CORE wxNonOwnedWindow;
+
+class wxOverlayImpl;
+class wxDfbOverlaysList;
// ---------------------------------------------------------------------------
// wxWindow
virtual void Refresh(bool eraseBackground = true,
const wxRect *rect = (const wxRect *) NULL);
virtual void Update();
- virtual void Clear();
- virtual void Freeze();
- virtual void Thaw();
- bool IsFrozen() const { return m_frozenness > 0; }
virtual bool SetCursor(const wxCursor &cursor);
virtual bool SetFont(const wxFont &font) { m_font = font; return true; }
virtual int GetCharHeight() const;
virtual int GetCharWidth() const;
- virtual void GetTextExtent(const wxString& string,
- int *x, int *y,
- int *descent = (int *) NULL,
- int *externalLeading = (int *) NULL,
- const wxFont *theFont = (const wxFont *) NULL)
- const;
#if wxUSE_DRAG_AND_DROP
virtual void SetDropTarget(wxDropTarget *dropTarget);
// --------------------------
// Returns DirectFB surface used for rendering of this window
- IDirectFBSurfacePtr GetDfbSurface();
+ wxIDirectFBSurfacePtr GetDfbSurface();
// returns toplevel window the window belongs to
- wxTopLevelWindowDFB *GetTLW() const { return m_tlw; }
+ wxNonOwnedWindow *GetTLW() const { return m_tlw; }
void OnInternalIdle();
+ virtual bool IsDoubleBuffered() const { return true; }
+
protected:
// implement the base class pure virtuals
+ virtual void DoGetTextExtent(const wxString& string,
+ int *x, int *y,
+ int *descent = NULL,
+ int *externalLeading = NULL,
+ const wxFont *theFont = NULL) const;
virtual void DoClientToScreen(int *x, int *y) const;
virtual void DoScreenToClient(int *x, int *y) const;
virtual void DoGetPosition(int *x, int *y) const;
virtual void DoCaptureMouse();
virtual void DoReleaseMouse();
+ virtual void DoThaw();
+
// move the window to the specified location and resize it: this is called
// from both DoSetSize() and DoSetClientSize() and would usually just call
// ::MoveWindow() except for composite controls which will want to arrange
// return DFB surface used to render this window (will be assigned to
// m_surface if the window is visible)
- virtual IDirectFBSurfacePtr ObtainDfbSurface() const;
+ virtual wxIDirectFBSurfacePtr ObtainDfbSurface() const;
// this method must be called when window's position, size or visibility
// changes; it resets m_surface so that ObtainDfbSurface has to be called
void InvalidateDfbSurface();
// called by parent to render (part of) the window
- void PaintWindow(const wxRect& rect, bool eraseBackground);
+ void PaintWindow(const wxRect& rect);
- // implementation of Refresh()
- void DoRefreshWindow(bool eraseBack = true);
- virtual void DoRefreshRect(const wxRect& rect, bool eraseBack = true);
+ // paint window's overlays (if any) on top of window's surface
+ void PaintOverlays(const wxRect& rect);
+
+ // refreshes the entire window (including non-client areas)
+ void DoRefreshWindow();
+ // refreshes given rectangle of the window (in window, _not_ client coords)
+ virtual void DoRefreshRect(const wxRect& rect);
+ // refreshes given rectangle; unlike RefreshRect(), the argument is in
+ // window, not client, coords and unlike DoRefreshRect() and like Refresh(),
+ // does nothing if the window is hidden or frozen
+ void RefreshWindowRect(const wxRect& rect);
+
+ // add/remove overlay for this window
+ void AddOverlay(wxOverlayImpl *overlay);
+ void RemoveOverlay(wxOverlayImpl *overlay);
// DirectFB events handling
void HandleKeyEvent(const wxDFBWindowEvent& event_);
// common part of all ctors
void Init();
// counterpart to SetFocus
- void KillFocus();
+ void DFBKillFocus();
protected:
// toplevel window (i.e. DirectFB window) this window belongs to
- wxTopLevelWindowDFB *m_tlw;
+ wxNonOwnedWindow *m_tlw;
private:
// subsurface of TLW's surface covered by this window
- IDirectFBSurfacePtr m_surface;
+ wxIDirectFBSurfacePtr m_surface;
// position of the window (relative to the parent, not used by wxTLW, so
// don't access it directly)
wxRect m_rect;
- // number of calls to Freeze() minus number of calls to Thaw()
- unsigned m_frozenness;
+ // overlays for this window (or NULL if it doesn't have any)
+ wxDfbOverlaysList *m_overlays;
- friend class wxTopLevelWindowDFB; // for HandleXXXEvent
+ friend class wxNonOwnedWindow; // for HandleXXXEvent
+ friend class wxOverlayImpl; // for Add/RemoveOverlay
+ friend class wxWindowDCImpl; // for PaintOverlays
DECLARE_DYNAMIC_CLASS(wxWindowDFB)
- DECLARE_NO_COPY_CLASS(wxWindowDFB)
+ wxDECLARE_NO_COPY_CLASS(wxWindowDFB);
DECLARE_EVENT_TABLE()
};
-
#endif // _WX_DFB_WINDOW_H_