+
+ /// Returns bit depth used by the surface or -1 on error
+ int GetDepth();
+
+ /**
+ Creates a new surface by cloning this one. New surface will have same
+ capabilities, pixel format and pixel data as the existing one.
+
+ @see CreateCompatible
+ */
+ wxIDirectFBSurfacePtr Clone();
+
+ /// Flags for CreateCompatible()
+ enum CreateCompatibleFlags
+ {
+ /// Don't create double-buffered surface
+ CreateCompatible_NoBackBuffer = 1
+ };
+
+ /**
+ Creates a surface compatible with this one, i.e. surface with the same
+ capabilities and pixel format, but with different and size.
+
+ @param size Size of the surface to create. If wxDefaultSize, use the
+ size of this surface.
+ @param flags Or-combination of CreateCompatibleFlags values
+ */
+ 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);