git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			555 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			555 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/dfb/wrapdfb.h
 | 
						|
// Purpose:     wx wrappers for DirectFB interfaces
 | 
						|
// Author:      Vaclav Slavik
 | 
						|
// Created:     2006-08-23
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Copyright:   (c) 2006 REA Elektronik GmbH
 | 
						|
// Licence:     wxWindows licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_DFB_WRAPDFB_H_
 | 
						|
#define _WX_DFB_WRAPDFB_H_
 | 
						|
 | 
						|
#include "wx/dfb/dfbptr.h"
 | 
						|
#include "wx/gdicmn.h"
 | 
						|
#include "wx/vidmode.h"
 | 
						|
 | 
						|
#include <directfb.h>
 | 
						|
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFB);
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFBDisplayLayer);
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFBFont);
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFBWindow);
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFBSurface);
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFBPalette);
 | 
						|
wxDFB_DECLARE_INTERFACE(IDirectFBEventBuffer);
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Checks the @a code of a DirectFB call and returns true if it was
 | 
						|
    successful and false if it failed, logging the errors as appropriate
 | 
						|
    (asserts for programming errors, wxLogError for runtime failures).
 | 
						|
 */
 | 
						|
bool wxDfbCheckReturn(DFBResult code);
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxDfbEvent
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
/**
 | 
						|
    The struct defined by this macro is a thin wrapper around DFB*Event type.
 | 
						|
    It is needed because DFB*Event are typedefs and so we can't forward declare
 | 
						|
    them, but we need to pass them to methods declared in public headers where
 | 
						|
    <directfb.h> cannot be included. So this struct just holds the event value,
 | 
						|
    it's sole purpose is that it can be forward declared.
 | 
						|
 */
 | 
						|
#define WXDFB_DEFINE_EVENT_WRAPPER(T)                                       \
 | 
						|
    struct wx##T                                                            \
 | 
						|
    {                                                                       \
 | 
						|
        wx##T() {}                                                          \
 | 
						|
        wx##T(const T& event) : m_event(event) {}                           \
 | 
						|
                                                                            \
 | 
						|
        operator T&() { return m_event; }                                   \
 | 
						|
        operator const T&() const { return m_event; }                       \
 | 
						|
        T* operator&() { return &m_event; }                                 \
 | 
						|
                                                                            \
 | 
						|
        DFBEventClass GetClass() const { return m_event.clazz; }            \
 | 
						|
                                                                            \
 | 
						|
    private:                                                                \
 | 
						|
        T m_event;                                                          \
 | 
						|
    };
 | 
						|
 | 
						|
WXDFB_DEFINE_EVENT_WRAPPER(DFBEvent)
 | 
						|
WXDFB_DEFINE_EVENT_WRAPPER(DFBWindowEvent)
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxDfbWrapper<T>
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
/// Base class for wxDfbWrapper<T>
 | 
						|
class wxDfbWrapperBase
 | 
						|
{
 | 
						|
public:
 | 
						|
    /// Increases reference count of the object
 | 
						|
    void AddRef()
 | 
						|
    {
 | 
						|
        m_refCnt++;
 | 
						|
    }
 | 
						|
 | 
						|
    /// Decreases reference count and if it reaches zero, deletes the object
 | 
						|
    void Release()
 | 
						|
    {
 | 
						|
        if ( --m_refCnt == 0 )
 | 
						|
            delete this;
 | 
						|
    }
 | 
						|
 | 
						|
    /// Returns result code of the last call
 | 
						|
    DFBResult GetLastResult() const { return m_lastResult; }
 | 
						|
 | 
						|
protected:
 | 
						|
    wxDfbWrapperBase() : m_refCnt(1), m_lastResult(DFB_OK) {}
 | 
						|
 | 
						|
    /// Dtor may only be called from Release()
 | 
						|
    virtual ~wxDfbWrapperBase() {}
 | 
						|
 | 
						|
    /**
 | 
						|
        Checks the @a result of a DirectFB call and returns true if it was
 | 
						|
        successful and false if it failed. Also stores result of the call
 | 
						|
        so that it can be obtained by calling GetLastResult().
 | 
						|
     */
 | 
						|
    bool Check(DFBResult result)
 | 
						|
    {
 | 
						|
        m_lastResult = result;
 | 
						|
        return wxDfbCheckReturn(result);
 | 
						|
    }
 | 
						|
 | 
						|
protected:
 | 
						|
    /// Reference count
 | 
						|
    unsigned m_refCnt;
 | 
						|
 | 
						|
    /// Result of the last DirectFB call
 | 
						|
    DFBResult m_lastResult;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
    This template is base class for friendly C++ wrapper around DirectFB
 | 
						|
    interface T.
 | 
						|
 | 
						|
    The wrapper provides same API as DirectFB, with a few exceptions:
 | 
						|
     - methods return true/false instead of error code
 | 
						|
     - methods that return or create another interface return pointer to the
 | 
						|
       interface (or NULL on failure) instead of storing it in the last
 | 
						|
       argument
 | 
						|
     - interface arguments use wxFooPtr type instead of raw DirectFB pointer
 | 
						|
     - methods taking flags use int type instead of an enum when the flags
 | 
						|
       can be or-combination of enum elements (this is workaround for
 | 
						|
       C++-unfriendly DirectFB API)
 | 
						|
 */
 | 
						|
template<typename T>
 | 
						|
class wxDfbWrapper : public wxDfbWrapperBase
 | 
						|
{
 | 
						|
public:
 | 
						|
    /// "Raw" DirectFB interface type
 | 
						|
    typedef T DirectFBIface;
 | 
						|
 | 
						|
    /// Returns raw DirectFB pointer
 | 
						|
    T *GetRaw() const { return m_ptr; }
 | 
						|
 | 
						|
protected:
 | 
						|
    /// To be called from ctor. Takes ownership of raw object.
 | 
						|
    void Init(T *ptr) { m_ptr = ptr; }
 | 
						|
 | 
						|
    /// Dtor may only be used from Release
 | 
						|
    ~wxDfbWrapper()
 | 
						|
    {
 | 
						|
        if ( m_ptr )
 | 
						|
            m_ptr->Release(m_ptr);
 | 
						|
    }
 | 
						|
 | 
						|
protected:
 | 
						|
    // pointer to DirectFB object
 | 
						|
    T *m_ptr;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFBFont
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFBFont : public wxDfbWrapper<IDirectFBFont>
 | 
						|
{
 | 
						|
    wxIDirectFBFont(IDirectFBFont *s) { Init(s); }
 | 
						|
 | 
						|
    bool GetStringWidth(const char *text, int bytes, int *w)
 | 
						|
        { return Check(m_ptr->GetStringWidth(m_ptr, text, bytes, w)); }
 | 
						|
 | 
						|
    bool GetStringExtents(const char *text, int bytes,
 | 
						|
                          DFBRectangle *logicalRect, DFBRectangle *inkRect)
 | 
						|
    {
 | 
						|
        return Check(m_ptr->GetStringExtents(m_ptr, text, bytes,
 | 
						|
                                               logicalRect, inkRect));
 | 
						|
    }
 | 
						|
 | 
						|
    bool GetHeight(int *h)
 | 
						|
        { return Check(m_ptr->GetHeight(m_ptr, h)); }
 | 
						|
 | 
						|
    bool GetDescender(int *descender)
 | 
						|
        { return Check(m_ptr->GetDescender(m_ptr, descender)); }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFBPalette
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFBPalette : public wxDfbWrapper<IDirectFBPalette>
 | 
						|
{
 | 
						|
    wxIDirectFBPalette(IDirectFBPalette *s) { Init(s); }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFBSurface
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFBSurface : public wxDfbWrapper<IDirectFBSurface>
 | 
						|
{
 | 
						|
    wxIDirectFBSurface(IDirectFBSurface *s) { Init(s); }
 | 
						|
 | 
						|
    bool GetSize(int *w, int *h)
 | 
						|
        { return Check(m_ptr->GetSize(m_ptr, w, h)); }
 | 
						|
 | 
						|
    bool GetCapabilities(DFBSurfaceCapabilities *caps)
 | 
						|
        { return Check(m_ptr->GetCapabilities(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 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)
 | 
						|
        { 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->DrawLine(m_ptr, x1, y1, x2, y2)); }
 | 
						|
 | 
						|
    bool DrawRectangle(int x, int y, int w, int h)
 | 
						|
        { return Check(m_ptr->DrawRectangle(m_ptr, x, y, w, h)); }
 | 
						|
 | 
						|
    bool FillRectangle(int x, int y, int w, int h)
 | 
						|
        { return Check(m_ptr->FillRectangle(m_ptr, x, y, w, h)); }
 | 
						|
 | 
						|
    bool SetFont(const wxIDirectFBFontPtr& font)
 | 
						|
        { return Check(m_ptr->SetFont(m_ptr, font->GetRaw())); }
 | 
						|
 | 
						|
    bool DrawString(const char *text, int bytes, int x, int y, int flags)
 | 
						|
    {
 | 
						|
        return Check(m_ptr->DrawString(m_ptr, text, bytes, x, y,
 | 
						|
                                         (DFBSurfaceTextFlags)flags));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
        Updates the front buffer from the back buffer. If @a region is not
 | 
						|
        NULL, only given rectangle is updated.
 | 
						|
     */
 | 
						|
    bool FlipToFront(const DFBRegion *region = NULL);
 | 
						|
 | 
						|
    wxIDirectFBSurfacePtr GetSubSurface(const DFBRectangle *rect)
 | 
						|
    {
 | 
						|
        IDirectFBSurface *s;
 | 
						|
        if ( Check(m_ptr->GetSubSurface(m_ptr, rect, &s)) )
 | 
						|
            return new wxIDirectFBSurface(s);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    wxIDirectFBPalettePtr GetPalette()
 | 
						|
    {
 | 
						|
        IDirectFBPalette *s;
 | 
						|
        if ( Check(m_ptr->GetPalette(m_ptr, &s)) )
 | 
						|
            return new wxIDirectFBPalette(s);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    bool SetPalette(const wxIDirectFBPalettePtr& pal)
 | 
						|
        { return Check(m_ptr->SetPalette(m_ptr, pal->GetRaw())); }
 | 
						|
 | 
						|
    bool SetBlittingFlags(int flags)
 | 
						|
    {
 | 
						|
        return Check(
 | 
						|
            m_ptr->SetBlittingFlags(m_ptr, (DFBSurfaceBlittingFlags)flags));
 | 
						|
    }
 | 
						|
 | 
						|
    bool Blit(const wxIDirectFBSurfacePtr& source,
 | 
						|
              const DFBRectangle *source_rect,
 | 
						|
              int x, int y)
 | 
						|
        { return Blit(source->GetRaw(), source_rect, x, y); }
 | 
						|
 | 
						|
    bool Blit(IDirectFBSurface *source,
 | 
						|
              const DFBRectangle *source_rect,
 | 
						|
              int x, int y)
 | 
						|
        { return Check(m_ptr->Blit(m_ptr, source, source_rect, x, y)); }
 | 
						|
 | 
						|
    bool StretchBlit(const wxIDirectFBSurfacePtr& source,
 | 
						|
              const DFBRectangle *source_rect,
 | 
						|
              const DFBRectangle *dest_rect)
 | 
						|
    {
 | 
						|
        return Check(m_ptr->StretchBlit(m_ptr, source->GetRaw(),
 | 
						|
                                        source_rect, dest_rect));
 | 
						|
    }
 | 
						|
 | 
						|
    /// 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);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFBEventBuffer
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFBEventBuffer : public wxDfbWrapper<IDirectFBEventBuffer>
 | 
						|
{
 | 
						|
    wxIDirectFBEventBuffer(IDirectFBEventBuffer *s) { Init(s); }
 | 
						|
 | 
						|
    bool WakeUp()
 | 
						|
    {
 | 
						|
        return Check(m_ptr->WakeUp(m_ptr));
 | 
						|
    }
 | 
						|
 | 
						|
    bool HasEvent()
 | 
						|
    {
 | 
						|
        // returns DFB_OK if there is >=1 event, DFB_BUFFEREMPTY otherwise
 | 
						|
        DFBResult r = m_ptr->HasEvent(m_ptr);
 | 
						|
 | 
						|
        // NB: Check() also returns true for DFB_BUFFEREMPTY, so we can't just
 | 
						|
        //     return it's return value:
 | 
						|
        Check(r);
 | 
						|
        return (r == DFB_OK);
 | 
						|
    }
 | 
						|
 | 
						|
    bool WaitForEventWithTimeout(unsigned secs, unsigned millisecs)
 | 
						|
    {
 | 
						|
        DFBResult r = m_ptr->WaitForEventWithTimeout(m_ptr, secs, millisecs);
 | 
						|
 | 
						|
        // DFB_TIMEOUT is not an error in this function:
 | 
						|
        if ( r == DFB_TIMEOUT )
 | 
						|
        {
 | 
						|
            m_lastResult = DFB_TIMEOUT;
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        return Check(r);
 | 
						|
    }
 | 
						|
 | 
						|
    bool GetEvent(wxDFBEvent& event)
 | 
						|
    {
 | 
						|
        return Check(m_ptr->GetEvent(m_ptr, &event));
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFBWindow
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFBWindow : public wxDfbWrapper<IDirectFBWindow>
 | 
						|
{
 | 
						|
    wxIDirectFBWindow(IDirectFBWindow *s) { Init(s); }
 | 
						|
 | 
						|
    bool GetID(DFBWindowID *id)
 | 
						|
        { return Check(m_ptr->GetID(m_ptr, id)); }
 | 
						|
 | 
						|
    bool GetPosition(int *x, int *y)
 | 
						|
        { return Check(m_ptr->GetPosition(m_ptr, x, y)); }
 | 
						|
 | 
						|
    bool GetSize(int *w, int *h)
 | 
						|
        { return Check(m_ptr->GetSize(m_ptr, w, h)); }
 | 
						|
 | 
						|
    bool MoveTo(int x, int y)
 | 
						|
        { return Check(m_ptr->MoveTo(m_ptr, x, y)); }
 | 
						|
 | 
						|
    bool Resize(int w, int h)
 | 
						|
        { return Check(m_ptr->Resize(m_ptr, w, h)); }
 | 
						|
 | 
						|
    bool SetOpacity(__u8 opacity)
 | 
						|
        { return Check(m_ptr->SetOpacity(m_ptr, opacity)); }
 | 
						|
 | 
						|
    bool SetStackingClass(DFBWindowStackingClass klass)
 | 
						|
        { return Check(m_ptr->SetStackingClass(m_ptr, klass)); }
 | 
						|
 | 
						|
    wxIDirectFBSurfacePtr GetSurface()
 | 
						|
    {
 | 
						|
        IDirectFBSurface *s;
 | 
						|
        if ( Check(m_ptr->GetSurface(m_ptr, &s)) )
 | 
						|
            return new wxIDirectFBSurface(s);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    bool AttachEventBuffer(const wxIDirectFBEventBufferPtr& buffer)
 | 
						|
        { return Check(m_ptr->AttachEventBuffer(m_ptr, buffer->GetRaw())); }
 | 
						|
 | 
						|
    bool RequestFocus()
 | 
						|
        { return Check(m_ptr->RequestFocus(m_ptr)); }
 | 
						|
 | 
						|
    bool Destroy()
 | 
						|
        { return Check(m_ptr->Destroy(m_ptr)); }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFBDisplayLayer
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFBDisplayLayer : public wxDfbWrapper<IDirectFBDisplayLayer>
 | 
						|
{
 | 
						|
    wxIDirectFBDisplayLayer(IDirectFBDisplayLayer *s) { Init(s); }
 | 
						|
 | 
						|
    wxIDirectFBWindowPtr CreateWindow(const DFBWindowDescription *desc)
 | 
						|
    {
 | 
						|
        IDirectFBWindow *w;
 | 
						|
        if ( Check(m_ptr->CreateWindow(m_ptr, desc, &w)) )
 | 
						|
            return new wxIDirectFBWindow(w);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    bool GetConfiguration(DFBDisplayLayerConfig *config)
 | 
						|
        { return Check(m_ptr->GetConfiguration(m_ptr, config)); }
 | 
						|
 | 
						|
    wxVideoMode GetVideoMode();
 | 
						|
 | 
						|
    bool GetCursorPosition(int *x, int *y)
 | 
						|
        { return Check(m_ptr->GetCursorPosition(m_ptr, x, y)); }
 | 
						|
 | 
						|
    bool WarpCursor(int x, int y)
 | 
						|
        { return Check(m_ptr->WarpCursor(m_ptr, x, y)); }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// wxIDirectFB
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
 | 
						|
struct wxIDirectFB : public wxDfbWrapper<IDirectFB>
 | 
						|
{
 | 
						|
    /**
 | 
						|
        Returns pointer to DirectFB singleton object, it never returns NULL
 | 
						|
        after wxApp was initialized. The object is cached, so calling this
 | 
						|
        method is cheap.
 | 
						|
     */
 | 
						|
    static wxIDirectFBPtr Get()
 | 
						|
    {
 | 
						|
        if ( !ms_ptr ) CreateDirectFB();
 | 
						|
        return ms_ptr;
 | 
						|
    }
 | 
						|
 | 
						|
    bool SetVideoMode(int w, int h, int bpp)
 | 
						|
        { return Check(m_ptr->SetVideoMode(m_ptr, w, h, bpp)); }
 | 
						|
 | 
						|
    wxIDirectFBSurfacePtr CreateSurface(const DFBSurfaceDescription *desc)
 | 
						|
    {
 | 
						|
        IDirectFBSurface *s;
 | 
						|
        if ( Check(m_ptr->CreateSurface(m_ptr, desc, &s)) )
 | 
						|
            return new wxIDirectFBSurface(s);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    wxIDirectFBEventBufferPtr CreateEventBuffer()
 | 
						|
    {
 | 
						|
        IDirectFBEventBuffer *b;
 | 
						|
        if ( Check(m_ptr->CreateEventBuffer(m_ptr, &b)) )
 | 
						|
            return new wxIDirectFBEventBuffer(b);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    wxIDirectFBFontPtr CreateFont(const char *filename,
 | 
						|
                                  const DFBFontDescription *desc)
 | 
						|
    {
 | 
						|
        IDirectFBFont *f;
 | 
						|
        if ( Check(m_ptr->CreateFont(m_ptr, filename, desc, &f)) )
 | 
						|
            return new wxIDirectFBFont(f);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    wxIDirectFBDisplayLayerPtr
 | 
						|
    GetDisplayLayer(DFBDisplayLayerID id = DLID_PRIMARY)
 | 
						|
    {
 | 
						|
        IDirectFBDisplayLayer *l;
 | 
						|
        if ( Check(m_ptr->GetDisplayLayer(m_ptr, id, &l)) )
 | 
						|
            return new wxIDirectFBDisplayLayer(l);
 | 
						|
        else
 | 
						|
            return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    /// Returns primary surface
 | 
						|
    wxIDirectFBSurfacePtr GetPrimarySurface();
 | 
						|
 | 
						|
private:
 | 
						|
    wxIDirectFB(IDirectFB *ptr) { Init(ptr); }
 | 
						|
 | 
						|
    // creates ms_ptr instance
 | 
						|
    static void CreateDirectFB();
 | 
						|
 | 
						|
    static void CleanUp();
 | 
						|
    friend class wxApp; // calls CleanUp
 | 
						|
 | 
						|
    // pointer to the singleton IDirectFB object
 | 
						|
    static wxIDirectFBPtr ms_ptr;
 | 
						|
};
 | 
						|
 | 
						|
#endif // _WX_DFB_WRAPDFB_H_
 |