]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dfb/toplevel.h
initial (not yet working) code for DirectFB port
[wxWidgets.git] / include / wx / dfb / toplevel.h
diff --git a/include/wx/dfb/toplevel.h b/include/wx/dfb/toplevel.h
new file mode 100644 (file)
index 0000000..82e797b
--- /dev/null
@@ -0,0 +1,127 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/dfb/toplevel.h
+// Purpose:     Top level window, abstraction of wxFrame and wxDialog
+// Author:      Vaclav Slavik
+// Created:     2006-08-10
+// RCS-ID:      $Id$
+// Copyright:   (c) 2006 REA Elektronik GmbH
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_DFB_TOPLEVEL_H_
+#define _WX_DFB_TOPLEVEL_H_
+
+#include "wx/dfb/ifacehelpers.h"
+
+wxDFB_DECLARE_INTERFACE(IDirectFBWindow);
+
+class wxDfbQueuedPaintRequests;
+struct wxDFBWindowEvent;
+
+//-----------------------------------------------------------------------------
+// wxTopLevelWindowDFB
+//-----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxTopLevelWindowDFB : public wxTopLevelWindowBase
+{
+public:
+    // construction
+    wxTopLevelWindowDFB() { Init(); }
+    wxTopLevelWindowDFB(wxWindow *parent,
+                        wxWindowID id,
+                        const wxString& title,
+                        const wxPoint& pos = wxDefaultPosition,
+                        const wxSize& size = wxDefaultSize,
+                        long style = wxDEFAULT_FRAME_STYLE,
+                        const wxString& name = wxFrameNameStr)
+    {
+        Init();
+
+        Create(parent, id, title, pos, size, style, name);
+    }
+
+    bool Create(wxWindow *parent,
+                wxWindowID id,
+                const wxString& title,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxDEFAULT_FRAME_STYLE,
+                const wxString& name = wxFrameNameStr);
+
+    virtual ~wxTopLevelWindowDFB();
+
+    // implement base class pure virtuals
+    virtual void Maximize(bool maximize = true);
+    virtual bool IsMaximized() const;
+    virtual void Iconize(bool iconize = true);
+    virtual bool IsIconized() const;
+    virtual void Restore();
+
+    virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
+    virtual bool IsFullScreen() const { return m_fsIsShowing; }
+
+    virtual bool Show(bool show = true);
+
+    virtual bool CanSetTransparent() { return true; }
+    virtual bool SetTransparent(wxByte alpha);
+
+    virtual void SetTitle(const wxString &title) { m_title = title; }
+    virtual wxString GetTitle() const { return m_title; }
+
+    virtual void Update();
+
+    // implementation from now on
+    // --------------------------
+
+    void OnInternalIdle();
+
+    IDirectFBWindowPtr GetDirectFBWindow() const { return m_dfbwin; }
+
+protected:
+    // common part of all ctors
+    void Init();
+
+    virtual IDirectFBSurfacePtr ObtainDfbSurface() const;
+
+    // overriden wxWindow methods
+    virtual void DoGetPosition(int *x, int *y) const;
+    virtual void DoGetSize(int *width, int *height) const;
+    virtual void DoMoveWindow(int x, int y, int width, int height);
+
+    virtual void DoRefreshRect(const wxRect& rect, bool eraseBack = true);
+
+private:
+    // do queued painting in idle time
+    void HandleQueuedPaintRequests();
+
+    // DirectFB events handling
+    static void HandleDFBWindowEvent(const wxDFBWindowEvent& event_);
+
+protected:
+    wxString      m_title;
+
+    bool          m_fsIsShowing:1;         /* full screen */
+    long          m_fsSaveStyle;
+    long          m_fsSaveFlag;
+    wxRect        m_fsSaveFrame;
+
+    // is the frame currently maximized?
+    bool          m_isMaximized:1;
+    wxRect        m_savedFrame;
+
+    // did we sent wxSizeEvent at least once?
+    bool          m_sizeSet:1;
+
+    // window's opacity (0: transparent, 255: opaque)
+    wxByte        m_opacity;
+
+    // interface to the underlying DirectFB window
+    IDirectFBWindowPtr m_dfbwin;
+
+private:
+    wxDfbQueuedPaintRequests *m_toPaint;
+
+    friend class wxEventLoop; // for HandleDFBWindowEvent
+};
+
+#endif // _WX_DFB_TOPLEVEL_H_