]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dfb/wrapdfb.h
allow specifying the mask colour in wxImage::ConvertAlphaToMask() (closes #10143)
[wxWidgets.git] / include / wx / dfb / wrapdfb.h
index c08123d103f71f8358039f67d0b3d879b57920e8..da753b6063f23000ba2dd587ade1b1f51560db00 100644 (file)
 #define _WX_DFB_WRAPDFB_H_
 
 #include "wx/dfb/dfbptr.h"
 #define _WX_DFB_WRAPDFB_H_
 
 #include "wx/dfb/dfbptr.h"
+#include "wx/gdicmn.h"
+#include "wx/vidmode.h"
 
 #include <directfb.h>
 
 #include <directfb.h>
+#include <directfb_version.h>
+
+// DFB < 1.0 didn't have u8 type, only __u8
+#if DIRECTFB_MAJOR_VERSION == 0
+typedef __u8 u8;
+#endif
+
 
 wxDFB_DECLARE_INTERFACE(IDirectFB);
 wxDFB_DECLARE_INTERFACE(IDirectFBDisplayLayer);
 
 wxDFB_DECLARE_INTERFACE(IDirectFB);
 wxDFB_DECLARE_INTERFACE(IDirectFBDisplayLayer);
@@ -205,13 +214,16 @@ struct wxIDirectFBSurface : public wxDfbWrapper<IDirectFBSurface>
     bool GetPixelFormat(DFBSurfacePixelFormat *caps)
         { return Check(m_ptr->GetPixelFormat(m_ptr, caps)); }
 
     bool GetPixelFormat(DFBSurfacePixelFormat *caps)
         { return Check(m_ptr->GetPixelFormat(m_ptr, caps)); }
 
+    // convenience version of GetPixelFormat, returns DSPF_UNKNOWN if fails
+    DFBSurfacePixelFormat GetPixelFormat();
+
     bool SetClip(const DFBRegion *clip)
         { return Check(m_ptr->SetClip(m_ptr, clip)); }
 
     bool SetClip(const DFBRegion *clip)
         { return Check(m_ptr->SetClip(m_ptr, clip)); }
 
-    bool SetColor(__u8 r, __u8 g, __u8 b, __u8 a)
+    bool SetColor(u8 r, u8 g, u8 b, u8 a)
         { return Check(m_ptr->SetColor(m_ptr, r, g, b, a)); }
 
         { return Check(m_ptr->SetColor(m_ptr, r, g, b, a)); }
 
-    bool Clear(__u8 r, __u8 g, __u8 b, __u8 a)
+    bool Clear(u8 r, u8 g, u8 b, u8 a)
         { return Check(m_ptr->Clear(m_ptr, r, g, b, a)); }
 
     bool DrawLine(int x1, int y1, int x2, int y2)
         { return Check(m_ptr->Clear(m_ptr, r, g, b, a)); }
 
     bool DrawLine(int x1, int y1, int x2, int y2)
@@ -283,7 +295,6 @@ struct wxIDirectFBSurface : public wxDfbWrapper<IDirectFBSurface>
                                         source_rect, dest_rect));
     }
 
                                         source_rect, dest_rect));
     }
 
-
     /// Returns bit depth used by the surface or -1 on error
     int GetDepth();
 
     /// Returns bit depth used by the surface or -1 on error
     int GetDepth();
 
@@ -313,6 +324,36 @@ struct wxIDirectFBSurface : public wxDfbWrapper<IDirectFBSurface>
     wxIDirectFBSurfacePtr CreateCompatible(const wxSize& size = wxDefaultSize,
                                            int flags = 0);
 
     wxIDirectFBSurfacePtr CreateCompatible(const wxSize& size = wxDefaultSize,
                                            int flags = 0);
 
+    bool Lock(DFBSurfaceLockFlags flags, void **ret_ptr, int *ret_pitch)
+        { return Check(m_ptr->Lock(m_ptr, flags, ret_ptr, ret_pitch)); }
+
+    bool Unlock()
+        { return Check(m_ptr->Unlock(m_ptr)); }
+
+    /// Helper struct for safe locking & unlocking of surfaces
+    struct Locked
+    {
+        Locked(const wxIDirectFBSurfacePtr& surface, DFBSurfaceLockFlags flags)
+            : m_surface(surface)
+        {
+            if ( !surface->Lock(flags, &ptr, &pitch) )
+                ptr = NULL;
+        }
+
+        ~Locked()
+        {
+            if ( ptr )
+                m_surface->Unlock();
+        }
+
+        void *ptr;
+        int pitch;
+
+    private:
+        wxIDirectFBSurfacePtr m_surface;
+    };
+
+
 private:
     // this is private because we want user code to use FlipToFront()
     bool Flip(const DFBRegion *region, int flags);
 private:
     // this is private because we want user code to use FlipToFront()
     bool Flip(const DFBRegion *region, int flags);
@@ -387,12 +428,18 @@ struct wxIDirectFBWindow : public wxDfbWrapper<IDirectFBWindow>
     bool Resize(int w, int h)
         { return Check(m_ptr->Resize(m_ptr, w, h)); }
 
     bool Resize(int w, int h)
         { return Check(m_ptr->Resize(m_ptr, w, h)); }
 
-    bool SetOpacity(__u8 opacity)
+    bool SetOpacity(u8 opacity)
         { return Check(m_ptr->SetOpacity(m_ptr, opacity)); }
 
     bool SetStackingClass(DFBWindowStackingClass klass)
         { return Check(m_ptr->SetStackingClass(m_ptr, klass)); }
 
         { return Check(m_ptr->SetOpacity(m_ptr, opacity)); }
 
     bool SetStackingClass(DFBWindowStackingClass klass)
         { return Check(m_ptr->SetStackingClass(m_ptr, klass)); }
 
+    bool RaiseToTop()
+        { return Check(m_ptr->RaiseToTop(m_ptr)); }
+
+    bool LowerToBottom()
+        { return Check(m_ptr->LowerToBottom(m_ptr)); }
+
     wxIDirectFBSurfacePtr GetSurface()
     {
         IDirectFBSurface *s;
     wxIDirectFBSurfacePtr GetSurface()
     {
         IDirectFBSurface *s;
@@ -407,6 +454,9 @@ struct wxIDirectFBWindow : public wxDfbWrapper<IDirectFBWindow>
 
     bool RequestFocus()
         { return Check(m_ptr->RequestFocus(m_ptr)); }
 
     bool RequestFocus()
         { return Check(m_ptr->RequestFocus(m_ptr)); }
+
+    bool Destroy()
+        { return Check(m_ptr->Destroy(m_ptr)); }
 };
 
 
 };