#define _WX_DFB_WRAPDFB_H_
#include "wx/dfb/dfbptr.h"
+#include "wx/gdicmn.h"
+#include "wx/vidmode.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);
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 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)); }
- 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)
source_rect, dest_rect));
}
-
/// Returns bit depth used by the surface or -1 on error
int GetDepth();
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);
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)