summaryrefslogtreecommitdiff
path: root/Source/DirectFB/include/directfb.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/DirectFB/include/directfb.h')
-rwxr-xr-xSource/DirectFB/include/directfb.h6642
1 files changed, 6642 insertions, 0 deletions
diff --git a/Source/DirectFB/include/directfb.h b/Source/DirectFB/include/directfb.h
new file mode 100755
index 0000000..6f494d9
--- /dev/null
+++ b/Source/DirectFB/include/directfb.h
@@ -0,0 +1,6642 @@
+/*
+ (c) Copyright 2001-2009 The world wide DirectFB Open Source Community (directfb.org)
+ (c) Copyright 2000-2004 Convergence (integrated media) GmbH
+
+ All rights reserved.
+
+ Written by Denis Oliver Kropp <dok@directfb.org>,
+ Andreas Hundt <andi@fischlustig.de>,
+ Sven Neumann <neo@directfb.org>,
+ Ville Syrjälä <syrjala@sci.fi> and
+ Claudio Ciccani <klan@users.sf.net>.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __DIRECTFB_H__
+#define __DIRECTFB_H__
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <dfb_types.h>
+#include <sys/time.h> /* struct timeval */
+
+#include <directfb_keyboard.h>
+
+#include <direct/interface.h>
+
+/*
+ * Version handling.
+ */
+extern const unsigned int directfb_major_version;
+extern const unsigned int directfb_minor_version;
+extern const unsigned int directfb_micro_version;
+extern const unsigned int directfb_binary_age;
+extern const unsigned int directfb_interface_age;
+
+/*
+ * Check for a certain DirectFB version.
+ * In case of an error a message is returned describing the mismatch.
+ */
+const char * DirectFBCheckVersion( unsigned int required_major,
+ unsigned int required_minor,
+ unsigned int required_micro );
+
+
+/*
+ * Main interface of DirectFB, created by DirectFBCreate().
+ */
+DECLARE_INTERFACE( IDirectFB )
+
+/*
+ * Interface to a surface object, being a graphics context for rendering and state control,
+ * buffer operations, palette access and sub area translate'n'clip logic.
+ */
+DECLARE_INTERFACE( IDirectFBSurface )
+
+/*
+ * Interface for read/write access to the colors of a palette object and for cloning it.
+ */
+DECLARE_INTERFACE( IDirectFBPalette )
+
+/*
+ * Input device interface for keymap access, event buffers and state queries.
+ */
+DECLARE_INTERFACE( IDirectFBInputDevice )
+
+/*
+ * Layer interface for configuration, window stack usage or direct surface access, with shared/exclusive context.
+ */
+DECLARE_INTERFACE( IDirectFBDisplayLayer )
+
+/*
+ * Interface to a window object, controlling appearance and focus, positioning and stacking,
+ * event buffers and surface access.
+ */
+DECLARE_INTERFACE( IDirectFBWindow )
+
+/*
+ * Interface to a local event buffer to send/receive events, wait for events, abort waiting or reset buffer.
+ */
+DECLARE_INTERFACE( IDirectFBEventBuffer )
+
+/*
+ * Font interface for getting metrics, measuring strings or single characters, query/choose encodings.
+ */
+DECLARE_INTERFACE( IDirectFBFont )
+
+/*
+ * Interface to an image provider, retrieving information about the image and rendering it to a surface.
+ */
+DECLARE_INTERFACE( IDirectFBImageProvider )
+
+/*
+ * Interface to a video provider for playback with advanced control and basic stream information.
+ */
+DECLARE_INTERFACE( IDirectFBVideoProvider )
+
+/*
+ * Data buffer interface, providing unified access to different kinds of data storage and live feed.
+ */
+DECLARE_INTERFACE( IDirectFBDataBuffer )
+
+/*
+ * Interface to different display outputs, encoders, connector settings, power management and synchronization.
+ */
+DECLARE_INTERFACE( IDirectFBScreen )
+
+/*
+ * OpenGL context of a surface.
+ */
+DECLARE_INTERFACE( IDirectFBGL )
+
+
+/*
+ * Return code of all interface methods and most functions
+ *
+ * Whenever a method has to return any information, it is done via output parameters. These are pointers to
+ * primitive types such as <i>int *ret_num</i>, enumerated types like <i>DFBBoolean *ret_enabled</i>, structures
+ * as in <i>DFBDisplayLayerConfig *ret_config</i>, just <i>void **ret_data</i> or other types...
+ */
+typedef enum {
+ /*
+ * Aliases for backward compatibility and uniform look in DirectFB code
+ */
+ DFB_OK = DR_OK, /* No error occured. */
+ DFB_FAILURE = DR_FAILURE, /* A general or unknown error occured. */
+ DFB_INIT = DR_INIT, /* A general initialization error occured. */
+ DFB_BUG = DR_BUG, /* Internal bug or inconsistency has been detected. */
+ DFB_DEAD = DR_DEAD, /* Interface has a zero reference counter (available in debug mode). */
+ DFB_UNSUPPORTED = DR_UNSUPPORTED, /* The requested operation or an argument is (currently) not supported. */
+ DFB_UNIMPLEMENTED = DR_UNIMPLEMENTED, /* The requested operation is not implemented, yet. */
+ DFB_ACCESSDENIED = DR_ACCESSDENIED, /* Access to the resource is denied. */
+ DFB_INVAREA = DR_INVAREA, /* An invalid area has been specified or detected. */
+ DFB_INVARG = DR_INVARG, /* An invalid argument has been specified. */
+ DFB_NOSYSTEMMEMORY = DR_NOLOCALMEMORY, /* There's not enough system memory. */
+ DFB_NOSHAREDMEMORY = DR_NOSHAREDMEMORY, /* There's not enough shared memory. */
+ DFB_LOCKED = DR_LOCKED, /* The resource is (already) locked. */
+ DFB_BUFFEREMPTY = DR_BUFFEREMPTY, /* The buffer is empty. */
+ DFB_FILENOTFOUND = DR_FILENOTFOUND, /* The specified file has not been found. */
+ DFB_IO = DR_IO, /* A general I/O error occured. */
+ DFB_BUSY = DR_BUSY, /* The resource or device is busy. */
+ DFB_NOIMPL = DR_NOIMPL, /* No implementation for this interface or content type has been found. */
+ DFB_TIMEOUT = DR_TIMEOUT, /* The operation timed out. */
+ DFB_THIZNULL = DR_THIZNULL, /* 'thiz' pointer is NULL. */
+ DFB_IDNOTFOUND = DR_IDNOTFOUND, /* No resource has been found by the specified id. */
+ DFB_DESTROYED = DR_DESTROYED, /* The underlying object (e.g. a window or surface) has been destroyed. */
+ DFB_FUSION = DR_FUSION, /* Internal fusion error detected, most likely related to IPC resources. */
+ DFB_BUFFERTOOLARGE = DR_BUFFERTOOLARGE, /* Buffer is too large. */
+ DFB_INTERRUPTED = DR_INTERRUPTED, /* The operation has been interrupted. */
+ DFB_NOCONTEXT = DR_NOCONTEXT, /* No context available. */
+ DFB_TEMPUNAVAIL = DR_TEMPUNAVAIL, /* Temporarily unavailable. */
+ DFB_LIMITEXCEEDED = DR_LIMITEXCEEDED, /* Attempted to exceed limit, i.e. any kind of maximum size, count etc. */
+ DFB_NOSUCHMETHOD = DR_NOSUCHMETHOD, /* Requested method is not known, e.g. to remote site. */
+ DFB_NOSUCHINSTANCE = DR_NOSUCHINSTANCE, /* Requested instance is not known, e.g. to remote site. */
+ DFB_ITEMNOTFOUND = DR_ITEMNOTFOUND, /* No such item found. */
+ DFB_VERSIONMISMATCH = DR_VERSIONMISMATCH, /* Some versions didn't match. */
+ DFB_EOF = DR_EOF, /* Reached end of file. */
+ DFB_SUSPENDED = DR_SUSPENDED, /* The requested object is suspended. */
+ DFB_INCOMPLETE = DR_INCOMPLETE, /* The operation has been executed, but not completely. */
+ DFB_NOCORE = DR_NOCORE, /* Core part not available. */
+
+ /*
+ * DirectFB specific result codes starting at (after) this offset
+ */
+ DFB__RESULT_OFFSET = D_RESULT_TYPE_BASE( 'D','F','B' ),
+
+ DFB_NOVIDEOMEMORY, /* There's not enough video memory. */
+ DFB_MISSINGFONT, /* No font has been set. */
+ DFB_MISSINGIMAGE, /* No image has been set. */
+} DFBResult;
+
+/*
+ * A boolean.
+ */
+typedef enum {
+ DFB_FALSE = 0,
+ DFB_TRUE = !DFB_FALSE
+} DFBBoolean;
+
+/*
+ * A point specified by x/y coordinates.
+ */
+typedef struct {
+ int x; /* X coordinate of it */
+ int y; /* Y coordinate of it */
+} DFBPoint;
+
+/*
+ * A horizontal line specified by x and width.
+ */
+typedef struct {
+ int x; /* X coordinate */
+ int w; /* width of span */
+} DFBSpan;
+
+/*
+ * A dimension specified by width and height.
+ */
+typedef struct {
+ int w; /* width of it */
+ int h; /* height of it */
+} DFBDimension;
+
+/*
+ * A rectangle specified by a point and a dimension.
+ */
+typedef struct {
+ int x; /* X coordinate of its top-left point */
+ int y; /* Y coordinate of its top-left point */
+ int w; /* width of it */
+ int h; /* height of it */
+} DFBRectangle;
+
+/*
+ * A rectangle specified by normalized coordinates.
+ *
+ * E.g. using 0.0, 0.0, 1.0, 1.0 would specify the whole screen.
+ */
+typedef struct {
+ float x; /* normalized X coordinate */
+ float y; /* normalized Y coordinate */
+ float w; /* normalized width */
+ float h; /* normalized height */
+} DFBLocation;
+
+/*
+ * A region specified by two points.
+ *
+ * The defined region includes both endpoints.
+ */
+typedef struct {
+ int x1; /* X coordinate of top-left point */
+ int y1; /* Y coordinate of top-left point */
+ int x2; /* X coordinate of lower-right point */
+ int y2; /* Y coordinate of lower-right point */
+} DFBRegion;
+
+/*
+ * Insets specify a distance from each edge of a rectangle.
+ *
+ * Positive values always mean 'outside'.
+ */
+typedef struct {
+ int l; /* distance from left edge */
+ int t; /* distance from top edge */
+ int r; /* distance from right edge */
+ int b; /* distance from bottom edge */
+} DFBInsets;
+
+/*
+ * A triangle specified by three points.
+ */
+typedef struct {
+ int x1; /* X coordinate of first edge */
+ int y1; /* Y coordinate of first edge */
+ int x2; /* X coordinate of second edge */
+ int y2; /* Y coordinate of second edge */
+ int x3; /* X coordinate of third edge */
+ int y3; /* Y coordinate of third edge */
+} DFBTriangle;
+
+/*
+ * A color defined by channels with 8bit each.
+ */
+typedef struct {
+ u8 a; /* alpha channel */
+ u8 r; /* red channel */
+ u8 g; /* green channel */
+ u8 b; /* blue channel */
+} DFBColor;
+
+/*
+ * A color key defined by R,G,B and eventually a color index.
+ */
+typedef struct {
+ u8 index; /* color index */
+ u8 r; /* red channel */
+ u8 g; /* green channel */
+ u8 b; /* blue channel */
+} DFBColorKey;
+
+/*
+ * A color defined by channels with 8bit each.
+ */
+typedef struct {
+ u8 a; /* alpha channel */
+ u8 y; /* luma channel */
+ u8 u; /* chroma channel */
+ u8 v; /* chroma channel */
+} DFBColorYUV;
+
+/*
+ * Macro to compare two points.
+ */
+#define DFB_POINT_EQUAL(a,b) ((a).x == (b).x && \
+ (a).y == (b).y)
+
+/*
+ * Macro to compare two rectangles.
+ */
+#define DFB_RECTANGLE_EQUAL(a,b) ((a).x == (b).x && \
+ (a).y == (b).y && \
+ (a).w == (b).w && \
+ (a).h == (b).h)
+
+/*
+ * Macro to compare two locations.
+ */
+#define DFB_LOCATION_EQUAL(a,b) ((a).x == (b).x && \
+ (a).y == (b).y && \
+ (a).w == (b).w && \
+ (a).h == (b).h)
+
+/*
+ * Macro to compare two regions.
+ */
+#define DFB_REGION_EQUAL(a,b) ((a).x1 == (b).x1 && \
+ (a).y1 == (b).y1 && \
+ (a).x2 == (b).x2 && \
+ (a).y2 == (b).y2)
+
+/*
+ * Macro to compare two colors.
+ */
+#define DFB_COLOR_EQUAL(x,y) ((x).a == (y).a && \
+ (x).r == (y).r && \
+ (x).g == (y).g && \
+ (x).b == (y).b)
+
+/*
+ * Macro to compare two color keys.
+ */
+#define DFB_COLORKEY_EQUAL(x,y) ((x).index == (y).index && \
+ (x).r == (y).r && \
+ (x).g == (y).g && \
+ (x).b == (y).b)
+
+/*
+ * Print a description of the result code along with an
+ * optional message that is put in front with a colon.
+ */
+DFBResult DirectFBError(
+ const char *msg, /* optional message */
+ DFBResult result /* result code to interpret */
+ );
+
+/*
+ * Behaves like DirectFBError, but shuts down the calling application.
+ */
+DFBResult DirectFBErrorFatal(
+ const char *msg, /* optional message */
+ DFBResult result /* result code to interpret */
+ );
+
+/*
+ * Returns a string describing 'result'.
+ */
+const char *DirectFBErrorString(
+ DFBResult result
+ );
+
+/*
+ * Retrieves information about supported command-line flags in the
+ * form of a user-readable string formatted suitable to be printed
+ * as usage information.
+ */
+const char *DirectFBUsageString( void );
+
+/*
+ * Parses the command-line and initializes some variables. You
+ * absolutely need to call this before doing anything else.
+ * Removes all options used by DirectFB from argv.
+ */
+DFBResult DirectFBInit(
+ int *argc, /* pointer to main()'s argc */
+ char *(*argv[]) /* pointer to main()'s argv */
+ );
+
+/*
+ * Sets configuration parameters supported on command line and in
+ * config file. Can only be called before DirectFBCreate but after
+ * DirectFBInit.
+ */
+DFBResult DirectFBSetOption(
+ const char *name,
+ const char *value
+ );
+
+/*
+ * Creates the super interface.
+ */
+DFBResult DirectFBCreate(
+ IDirectFB **interface /* pointer to the
+ created interface */
+ );
+
+
+typedef unsigned int DFBScreenID;
+typedef unsigned int DFBDisplayLayerID;
+typedef unsigned int DFBDisplayLayerSourceID;
+typedef unsigned int DFBWindowID;
+typedef unsigned int DFBInputDeviceID;
+typedef unsigned int DFBTextEncodingID;
+
+typedef u32 DFBDisplayLayerIDs;
+
+
+typedef unsigned int DFBColorID;
+
+/*
+ * Predefined color IDs.
+ */
+#define DCID_PRIMARY 0
+#define DCID_OUTLINE 1
+
+/*
+ * Maximum number of color ids.
+ */
+#define DFB_COLOR_IDS_MAX 8
+
+
+/*
+ * Maximum number of layer ids.
+ */
+#define DFB_DISPLAYLAYER_IDS_MAX 32
+
+/*
+ * Adds the id to the bitmask of layer ids.
+ */
+#define DFB_DISPLAYLAYER_IDS_ADD(ids,id) (ids) |= (1 << (id))
+
+/*
+ * Removes the id from the bitmask of layer ids.
+ */
+#define DFB_DISPLAYLAYER_IDS_REMOVE(ids,id) (ids) &= ~(1 << (id))
+
+/*
+ * Checks if the bitmask of layer ids contains the id.
+ */
+#define DFB_DISPLAYLAYER_IDS_HAVE(ids,id) ((ids) & (1 << (id)))
+
+/*
+ * Empties (clears) the bitmask of layer ids.
+ */
+#define DFB_DISPLAYLAYER_IDS_EMPTY(ids) (ids) = 0
+
+/*
+ * Predefined text encoding IDs.
+ */
+#define DTEID_UTF8 0
+#define DTEID_OTHER 1
+
+/*
+ * The cooperative level controls the super interface's behaviour
+ * in functions like SetVideoMode or CreateSurface for the primary.
+ */
+typedef enum {
+ DFSCL_NORMAL = 0x00000000, /* Normal shared access, primary
+ surface will be the buffer of an
+ implicitly created window at the
+ resolution given by SetVideoMode().
+ */
+ DFSCL_FULLSCREEN, /* Application grabs the primary layer,
+ SetVideoMode automates layer
+ control. Primary surface is the
+ primary layer surface. */
+ DFSCL_EXCLUSIVE /* All but the primary layer will be
+ disabled, the application has full
+ control over layers if desired,
+ other applications have no
+ input/output/control. Primary
+ surface is the primary layer
+ surface. */
+} DFBCooperativeLevel;
+
+/*
+ * Capabilities of a display layer.
+ */
+typedef enum {
+ DLCAPS_NONE = 0x00000000,
+
+ DLCAPS_SURFACE = 0x00000001, /* The layer has a surface that can be drawn to. This
+ may not be provided by layers that display realtime
+ data, e.g. from an MPEG decoder chip. Playback
+ control may be provided by an external API. */
+ DLCAPS_OPACITY = 0x00000002, /* The layer supports blending with layer(s) below
+ based on a global alpha factor. */
+ DLCAPS_ALPHACHANNEL = 0x00000004, /* The layer supports blending with layer(s) below
+ based on each pixel's alpha value. */
+ DLCAPS_SCREEN_LOCATION = 0x00000008, /* The layer location on the screen can be changed,
+ this includes position and size as normalized
+ values. The default is 0.0f, 0.0f, 1.0f, 1.0f.
+ Supports IDirectFBDisplayLayer::SetScreenLocation()
+ and IDirectFBDisplayLayer::SetScreenRectangle().
+ This implies DLCAPS_SCREEN_POSITION and _SIZE. */
+ DLCAPS_FLICKER_FILTERING = 0x00000010, /* Flicker filtering can be enabled for smooth output
+ on interlaced display devices. */
+ DLCAPS_DEINTERLACING = 0x00000020, /* The layer provides optional deinterlacing for
+ displaying interlaced video data on progressive
+ display devices. */
+ DLCAPS_SRC_COLORKEY = 0x00000040, /* A specific color can be declared as transparent. */
+ DLCAPS_DST_COLORKEY = 0x00000080, /* A specific color of layers below can be specified
+ as the color of the only locations where the layer
+ is visible. */
+ DLCAPS_BRIGHTNESS = 0x00000100, /* Adjustment of brightness is supported. */
+ DLCAPS_CONTRAST = 0x00000200, /* Adjustment of contrast is supported. */
+ DLCAPS_HUE = 0x00000400, /* Adjustment of hue is supported. */
+ DLCAPS_SATURATION = 0x00000800, /* Adjustment of saturation is supported. */
+ DLCAPS_LEVELS = 0x00001000, /* Adjustment of the layer's level
+ (z position) is supported. */
+ DLCAPS_FIELD_PARITY = 0x00002000, /* Field parity can be selected */
+ DLCAPS_WINDOWS = 0x00004000, /* Hardware window support. */
+ DLCAPS_SOURCES = 0x00008000, /* Sources can be selected. */
+ DLCAPS_ALPHA_RAMP = 0x00010000, /* Alpha values for formats with one or two alpha bits
+ can be chosen, i.e. using ARGB1555 or ARGB2554 the
+ user can define the meaning of the two or four
+ possibilities. In short, this feature provides a
+ lookup table for the alpha bits of these formats.
+ See also IDirectFBSurface::SetAlphaRamp(). */
+ DLCAPS_PREMULTIPLIED = 0x00020000, /* Surfaces with premultiplied alpha are supported. */
+
+ DLCAPS_SCREEN_POSITION = 0x00100000, /* The layer position on the screen can be changed.
+ Supports IDirectFBDisplayLayer::SetScreenPosition(). */
+ DLCAPS_SCREEN_SIZE = 0x00200000, /* The layer size (defined by its source rectangle)
+ can be scaled to a different size on the screen
+ (defined by its screen/destination rectangle or
+ its normalized size) and does not have to be 1:1
+ with it. */
+
+ DLCAPS_CLIP_REGIONS = 0x00400000, /* Supports IDirectFBDisplayLayer::SetClipRegions(). */
+
+ DLCAPS_ALL = 0x0073FFFF
+} DFBDisplayLayerCapabilities;
+
+/*
+ * Capabilities of a screen.
+ */
+typedef enum {
+ DSCCAPS_NONE = 0x00000000,
+
+ DSCCAPS_VSYNC = 0x00000001, /* Synchronization with the
+ vertical retrace supported. */
+ DSCCAPS_POWER_MANAGEMENT = 0x00000002, /* Power management supported. */
+
+ DSCCAPS_MIXERS = 0x00000010, /* Has mixers. */
+ DSCCAPS_ENCODERS = 0x00000020, /* Has encoders. */
+ DSCCAPS_OUTPUTS = 0x00000040, /* Has outputs. */
+
+ DSCCAPS_ALL = 0x00000073
+} DFBScreenCapabilities;
+
+/*
+ * Used to enable some capabilities like flicker filtering or colorkeying.
+ */
+typedef enum {
+ DLOP_NONE = 0x00000000, /* None of these. */
+ DLOP_ALPHACHANNEL = 0x00000001, /* Make usage of alpha channel
+ for blending on a pixel per
+ pixel basis. */
+ DLOP_FLICKER_FILTERING = 0x00000002, /* Enable flicker filtering. */
+ DLOP_DEINTERLACING = 0x00000004, /* Enable deinterlacing of an
+ interlaced (video) source. */
+ DLOP_SRC_COLORKEY = 0x00000008, /* Enable source color key. */
+ DLOP_DST_COLORKEY = 0x00000010, /* Enable dest. color key. */
+ DLOP_OPACITY = 0x00000020, /* Make usage of the global alpha
+ factor set by SetOpacity. */
+ DLOP_FIELD_PARITY = 0x00000040 /* Set field parity */
+} DFBDisplayLayerOptions;
+
+/*
+ * Layer Buffer Mode.
+ */
+typedef enum {
+ DLBM_UNKNOWN = 0x00000000,
+
+ DLBM_FRONTONLY = 0x00000001, /* no backbuffer */
+ DLBM_BACKVIDEO = 0x00000002, /* backbuffer in video memory */
+ DLBM_BACKSYSTEM = 0x00000004, /* backbuffer in system memory */
+ DLBM_TRIPLE = 0x00000008, /* triple buffering */
+ DLBM_WINDOWS = 0x00000010 /* no layer buffers at all,
+ using buffer of each window */
+} DFBDisplayLayerBufferMode;
+
+/*
+ * Flags defining which fields of a DFBSurfaceDescription are valid.
+ */
+typedef enum {
+ DSDESC_NONE = 0x00000000, /* none of these */
+
+ DSDESC_CAPS = 0x00000001, /* caps field is valid */
+ DSDESC_WIDTH = 0x00000002, /* width field is valid */
+ DSDESC_HEIGHT = 0x00000004, /* height field is valid */
+ DSDESC_PIXELFORMAT = 0x00000008, /* pixelformat field is valid */
+ DSDESC_PREALLOCATED = 0x00000010, /* Surface uses data that has been
+ preallocated by the application.
+ The field array 'preallocated'
+ has to be set using the first
+ element for the front buffer
+ and eventually the second one
+ for the back buffer. */
+ DSDESC_PALETTE = 0x00000020, /* Initialize the surfaces palette
+ with the entries specified in the
+ description. */
+
+ DSDESC_RESOURCE_ID = 0x00000100, /* user defined resource id for general purpose
+ surfaces is specified, or resource id of window,
+ layer, user is returned */
+
+ DSDESC_HINTS = 0x00000200, /* Flags for optimized allocation and pixel format selection are set.
+ See also DFBSurfaceHintFlags. */
+
+ DSDESC_ALL = 0x0000033F /* all of these */
+} DFBSurfaceDescriptionFlags;
+
+/*
+ * Flags defining which fields of a DFBPaletteDescription are valid.
+ */
+typedef enum {
+ DPDESC_CAPS = 0x00000001, /* Specify palette capabilities. */
+ DPDESC_SIZE = 0x00000002, /* Specify number of entries. */
+ DPDESC_ENTRIES = 0x00000004 /* Initialize the palette with the
+ entries specified in the
+ description. */
+} DFBPaletteDescriptionFlags;
+
+/*
+ * The surface capabilities.
+ */
+typedef enum {
+ DSCAPS_NONE = 0x00000000, /* None of these. */
+
+ DSCAPS_PRIMARY = 0x00000001, /* It's the primary surface. */
+ DSCAPS_SYSTEMONLY = 0x00000002, /* Surface data is permanently stored in system memory.<br>
+ There's no video memory allocation/storage. */
+ DSCAPS_VIDEOONLY = 0x00000004, /* Surface data is permanently stored in video memory.<br>
+ There's no system memory allocation/storage. */
+ DSCAPS_DOUBLE = 0x00000010, /* Surface is double buffered */
+ DSCAPS_SUBSURFACE = 0x00000020, /* Surface is just a sub area of another
+ one sharing the surface data. */
+ DSCAPS_INTERLACED = 0x00000040, /* Each buffer contains interlaced video (or graphics)
+ data consisting of two fields.<br>
+ Their lines are stored interleaved. One field's height
+ is a half of the surface's height. */
+ DSCAPS_SEPARATED = 0x00000080, /* For usage with DSCAPS_INTERLACED.<br>
+ DSCAPS_SEPARATED specifies that the fields are NOT
+ interleaved line by line in the buffer.<br>
+ The first field is followed by the second one. */
+ DSCAPS_STATIC_ALLOC = 0x00000100, /* The amount of video or system memory allocated for the
+ surface is never less than its initial value. This way
+ a surface can be resized (smaller and bigger up to the
+ initial size) without reallocation of the buffers. It's
+ useful for surfaces that need a guaranteed space in
+ video memory after resizing. */
+ DSCAPS_TRIPLE = 0x00000200, /* Surface is triple buffered. */
+
+ DSCAPS_PREMULTIPLIED = 0x00001000, /* Surface stores data with premultiplied alpha. */
+
+ DSCAPS_DEPTH = 0x00010000, /* A depth buffer is allocated. */
+
+ DSCAPS_SHARED = 0x00100000, /* The surface will be accessible among processes. */
+
+ DSCAPS_ROTATED = 0x01000000, /* The back buffers are allocated with swapped width/height (unimplemented!). */
+
+ DSCAPS_ALL = 0x011113F7, /* All of these. */
+
+
+ DSCAPS_FLIPPING = DSCAPS_DOUBLE | DSCAPS_TRIPLE /* Surface needs Flip() calls to make
+ updates/changes visible/usable. */
+} DFBSurfaceCapabilities;
+
+/*
+ * The palette capabilities.
+ */
+typedef enum {
+ DPCAPS_NONE = 0x00000000 /* None of these. */
+} DFBPaletteCapabilities;
+
+/*
+ * Flags controlling drawing commands.
+ */
+typedef enum {
+ DSDRAW_NOFX = 0x00000000, /* uses none of the effects */
+ DSDRAW_BLEND = 0x00000001, /* uses alpha from color */
+ DSDRAW_DST_COLORKEY = 0x00000002, /* write to destination only if the destination pixel
+ matches the destination color key */
+ DSDRAW_SRC_PREMULTIPLY = 0x00000004, /* multiplies the color's rgb channels by the alpha
+ channel before drawing */
+ DSDRAW_DST_PREMULTIPLY = 0x00000008, /* modulates the dest. color with the dest. alpha */
+ DSDRAW_DEMULTIPLY = 0x00000010, /* divides the color by the alpha before writing the
+ data to the destination */
+ DSDRAW_XOR = 0x00000020 /* bitwise xor the destination pixels with the
+ specified color after premultiplication */
+} DFBSurfaceDrawingFlags;
+
+/*
+ * Flags controlling blitting commands.
+ */
+typedef enum {
+ DSBLIT_NOFX = 0x00000000, /* uses none of the effects */
+ DSBLIT_BLEND_ALPHACHANNEL = 0x00000001, /* enables blending and uses
+ alphachannel from source */
+ DSBLIT_BLEND_COLORALPHA = 0x00000002, /* enables blending and uses
+ alpha value from color */
+ DSBLIT_COLORIZE = 0x00000004, /* modulates source color with
+ the color's r/g/b values */
+ DSBLIT_SRC_COLORKEY = 0x00000008, /* don't blit pixels matching the source color key */
+ DSBLIT_DST_COLORKEY = 0x00000010, /* write to destination only if the destination pixel
+ matches the destination color key */
+ DSBLIT_SRC_PREMULTIPLY = 0x00000020, /* modulates the source color with the (modulated)
+ source alpha */
+ DSBLIT_DST_PREMULTIPLY = 0x00000040, /* modulates the dest. color with the dest. alpha */
+ DSBLIT_DEMULTIPLY = 0x00000080, /* divides the color by the alpha before writing the
+ data to the destination */
+ DSBLIT_DEINTERLACE = 0x00000100, /* deinterlaces the source during blitting by reading
+ only one field (every second line of full
+ image) scaling it vertically by factor two */
+ DSBLIT_SRC_PREMULTCOLOR = 0x00000200, /* modulates the source color with the color alpha */
+ DSBLIT_XOR = 0x00000400, /* bitwise xor the destination pixels with the
+ source pixels after premultiplication */
+ DSBLIT_INDEX_TRANSLATION = 0x00000800, /* do fast indexed to indexed translation,
+ this flag is mutual exclusive with all others */
+ DSBLIT_ROTATE90 = 0x00002000, /* rotate the image by 90 degree */
+ DSBLIT_ROTATE180 = 0x00001000, /* rotate the image by 180 degree */
+ DSBLIT_ROTATE270 = 0x00004000, /* rotate the image by 270 degree */
+ DSBLIT_COLORKEY_PROTECT = 0x00010000, /* make sure written pixels don't match color key (internal only ATM) */
+ DSBLIT_SRC_MASK_ALPHA = 0x00100000, /* modulate source alpha channel with alpha channel from source mask,
+ see also IDirectFBSurface::SetSourceMask() */
+ DSBLIT_SRC_MASK_COLOR = 0x00200000, /* modulate source color channels with color channels from source mask,
+ see also IDirectFBSurface::SetSourceMask() */
+} DFBSurfaceBlittingFlags;
+
+/*
+ * Options for drawing and blitting operations. Not mandatory for acceleration.
+ */
+typedef enum {
+ DSRO_NONE = 0x00000000, /* None of these. */
+
+ DSRO_SMOOTH_UPSCALE = 0x00000001, /* Use interpolation for upscale StretchBlit(). */
+ DSRO_SMOOTH_DOWNSCALE = 0x00000002, /* Use interpolation for downscale StretchBlit(). */
+ DSRO_MATRIX = 0x00000004, /* Use the transformation matrix set via IDirectFBSurface::SetMatrix(). */
+ DSRO_ANTIALIAS = 0x00000008, /* Enable anti-aliasing for edges (alphablend must be enabled). */
+
+ DSRO_ALL = 0x0000000F /* All of these. */
+} DFBSurfaceRenderOptions;
+
+/*
+ * Mask of accelerated functions.
+ */
+typedef enum {
+ DFXL_NONE = 0x00000000, /* None of these. */
+
+ DFXL_FILLRECTANGLE = 0x00000001, /* FillRectangle() is accelerated. */
+ DFXL_DRAWRECTANGLE = 0x00000002, /* DrawRectangle() is accelerated. */
+ DFXL_DRAWLINE = 0x00000004, /* DrawLine() is accelerated. */
+ DFXL_FILLTRIANGLE = 0x00000008, /* FillTriangle() is accelerated. */
+
+ DFXL_BLIT = 0x00010000, /* Blit() and TileBlit() are accelerated. */
+ DFXL_STRETCHBLIT = 0x00020000, /* StretchBlit() is accelerated. */
+ DFXL_TEXTRIANGLES = 0x00040000, /* TextureTriangles() is accelerated. */
+
+ DFXL_DRAWSTRING = 0x01000000, /* DrawString() and DrawGlyph() are accelerated. */
+
+
+ DFXL_ALL = 0x0107000F, /* All drawing/blitting functions. */
+ DFXL_ALL_DRAW = 0x0000000F, /* All drawing functions. */
+ DFXL_ALL_BLIT = 0x01070000, /* All blitting functions. */
+} DFBAccelerationMask;
+
+
+/*
+ * @internal
+ */
+#define DFB_DRAWING_FUNCTION(a) ((a) & 0x0000FFFF)
+
+/*
+ * @internal
+ */
+#define DFB_BLITTING_FUNCTION(a) ((a) & 0xFFFF0000)
+
+/*
+ * Type of display layer for basic classification.
+ * Values may be or'ed together.
+ */
+typedef enum {
+ DLTF_NONE = 0x00000000, /* Unclassified, no specific type. */
+
+ DLTF_GRAPHICS = 0x00000001, /* Can be used for graphics output. */
+ DLTF_VIDEO = 0x00000002, /* Can be used for live video output.*/
+ DLTF_STILL_PICTURE = 0x00000004, /* Can be used for single frames. */
+ DLTF_BACKGROUND = 0x00000008, /* Can be used as a background layer.*/
+
+ DLTF_ALL = 0x0000000F /* All type flags set. */
+} DFBDisplayLayerTypeFlags;
+
+/*
+ * Type of input device for basic classification.
+ * Values may be or'ed together.
+ */
+typedef enum {
+ DIDTF_NONE = 0x00000000, /* Unclassified, no specific type. */
+
+ DIDTF_KEYBOARD = 0x00000001, /* Can act as a keyboard. */
+ DIDTF_MOUSE = 0x00000002, /* Can be used as a mouse. */
+ DIDTF_JOYSTICK = 0x00000004, /* Can be used as a joystick. */
+ DIDTF_REMOTE = 0x00000008, /* Is a remote control. */
+ DIDTF_VIRTUAL = 0x00000010, /* Is a virtual input device. */
+
+ DIDTF_ALL = 0x0000001F /* All type flags set. */
+} DFBInputDeviceTypeFlags;
+
+/*
+ * Basic input device features.
+ */
+typedef enum {
+ DICAPS_KEYS = 0x00000001, /* device supports key events */
+ DICAPS_AXES = 0x00000002, /* device supports axis events */
+ DICAPS_BUTTONS = 0x00000004, /* device supports button events */
+
+ DICAPS_ALL = 0x00000007 /* all capabilities */
+} DFBInputDeviceCapabilities;
+
+/*
+ * Identifier (index) for e.g. mouse or joystick buttons.
+ */
+typedef enum {
+ DIBI_LEFT = 0x00000000, /* left mouse button */
+ DIBI_RIGHT = 0x00000001, /* right mouse button */
+ DIBI_MIDDLE = 0x00000002, /* middle mouse button */
+
+ DIBI_FIRST = DIBI_LEFT, /* other buttons:
+ DIBI_FIRST + zero based index */
+ DIBI_LAST = 0x0000001F /* 32 buttons maximum */
+} DFBInputDeviceButtonIdentifier;
+
+/*
+ * Axis identifier (index) for e.g. mouse or joystick.
+ *
+ * The X, Y and Z axis are predefined. To access other axes,
+ * use DIAI_FIRST plus a zero based index, e.g. the 4th axis
+ * would be (DIAI_FIRST + 3).
+ */
+typedef enum {
+ DIAI_X = 0x00000000, /* X axis */
+ DIAI_Y = 0x00000001, /* Y axis */
+ DIAI_Z = 0x00000002, /* Z axis */
+
+ DIAI_FIRST = DIAI_X, /* other axis:
+ DIAI_FIRST + zero based index */
+ DIAI_LAST = 0x0000001F /* 32 axes maximum */
+} DFBInputDeviceAxisIdentifier;
+
+/*
+ * Flags defining which fields of a DFBWindowDescription are valid.
+ */
+typedef enum {
+ DWDESC_CAPS = 0x00000001, /* caps field is valid */
+ DWDESC_WIDTH = 0x00000002, /* width field is valid */
+ DWDESC_HEIGHT = 0x00000004, /* height field is valid */
+ DWDESC_PIXELFORMAT = 0x00000008, /* pixelformat field is valid */
+ DWDESC_POSX = 0x00000010, /* posx field is valid */
+ DWDESC_POSY = 0x00000020, /* posy field is valid */
+ DWDESC_SURFACE_CAPS = 0x00000040, /* Create the window surface with
+ special capabilities. */
+ DWDESC_PARENT = 0x00000080, /* This window has a parent according to parent_id field. */
+ DWDESC_OPTIONS = 0x00000100, /* Initial window options have been set. */
+ DWDESC_STACKING = 0x00000200, /* Initial stacking class has been set. */
+
+ DWDESC_TOPLEVEL_ID = 0x00000400, /* The top level window is set in toplevel_id field. */
+
+ DWDESC_RESOURCE_ID = 0x00001000, /* Resource id for window surface creation has been set. */
+} DFBWindowDescriptionFlags;
+
+/*
+ * Flags defining which fields of a DFBDataBufferDescription are valid.
+ */
+typedef enum {
+ DBDESC_FILE = 0x00000001, /* Create a static buffer for the
+ specified filename. */
+ DBDESC_MEMORY = 0x00000002 /* Create a static buffer for the
+ specified memory area. */
+} DFBDataBufferDescriptionFlags;
+
+/*
+ * Capabilities a window can have.
+ */
+typedef enum {
+ DWCAPS_NONE = 0x00000000, /* None of these. */
+
+ DWCAPS_ALPHACHANNEL = 0x00000001, /* The window has an alphachannel
+ for pixel-per-pixel blending. */
+ DWCAPS_DOUBLEBUFFER = 0x00000002, /* The window's surface is double
+ buffered. This is very useful
+ to avoid visibility of content
+ that is still in preparation.
+ Normally a window's content can
+ get visible before an update if
+ there is another reason causing
+ a window stack repaint. */
+ DWCAPS_INPUTONLY = 0x00000004, /* The window has no surface.
+ You can not draw to it but it
+ receives events */
+ DWCAPS_NODECORATION = 0x00000008, /* The window won't be decorated. */
+
+ DWCAPS_SUBWINDOW = 0x00000010, /* Not a top level window. */
+
+ DWCAPS_COLOR = 0x00000020, /* The window has no buffer;
+ it consumes no backing store.
+ It is filled with a constant color
+ and it receives events */
+
+ DWCAPS_NOFOCUS = 0x00000100, /* Window will never get focus or receive key events, unless it grabs them. */
+
+
+ DWCAPS_ALL = 0x0000013F /* All of these. */
+} DFBWindowCapabilities;
+
+/*
+ * Flags controlling the appearance and behaviour of the window.
+ */
+typedef enum {
+ DWOP_NONE = 0x00000000, /* none of these */
+ DWOP_COLORKEYING = 0x00000001, /* enable color key */
+ DWOP_ALPHACHANNEL = 0x00000002, /* enable alpha blending using the
+ window's alpha channel */
+ DWOP_OPAQUE_REGION = 0x00000004, /* overrides DWOP_ALPHACHANNEL for the
+ region set by SetOpaqueRegion() */
+ DWOP_SHAPED = 0x00000008, /* window doesn't receive mouse events for
+ invisible regions, must be used with
+ DWOP_ALPHACHANNEL or DWOP_COLORKEYING */
+ DWOP_KEEP_POSITION = 0x00000010, /* window can't be moved
+ with the mouse */
+ DWOP_KEEP_SIZE = 0x00000020, /* window can't be resized
+ with the mouse */
+ DWOP_KEEP_STACKING = 0x00000040, /* window can't be raised
+ or lowered with the mouse */
+ DWOP_GHOST = 0x00001000, /* never get focus or input,
+ clicks will go through,
+ implies DWOP_KEEP... */
+ DWOP_INDESTRUCTIBLE = 0x00002000, /* window can't be destroyed
+ by internal shortcut */
+
+ DWOP_INPUTONLY = 0x00004000, /* The window will be input only.
+ It will receive events but is not shown.
+ Note that toggling this bit will not
+ free/assign the window surface. */
+
+ DWOP_SCALE = 0x00010000, /* Surface won't be changed if window size on screen changes. The surface
+ can be resized separately using IDirectFBWindow::ResizeSurface(). */
+
+ DWOP_KEEP_ABOVE = 0x00100000, /* Keep window above parent window. */
+ DWOP_KEEP_UNDER = 0x00200000, /* Keep window under parent window. */
+ DWOP_FOLLOW_BOUNDS = 0x00400000, /* Follow window bounds from parent. */
+
+ DWOP_ALL = 0x0071707F /* all possible options */
+} DFBWindowOptions;
+
+/*
+ * The stacking class restricts the stacking order of windows.
+ */
+typedef enum {
+ DWSC_MIDDLE = 0x00000000, /* This is the default stacking
+ class of new windows. */
+ DWSC_UPPER = 0x00000001, /* Window is always above windows
+ in the middle stacking class.
+ Only windows that are also in
+ the upper stacking class can
+ get above them. */
+ DWSC_LOWER = 0x00000002 /* Window is always below windows
+ in the middle stacking class.
+ Only windows that are also in
+ the lower stacking class can
+ get below them. */
+} DFBWindowStackingClass;
+
+
+/*
+ * Flags describing how to load a font.
+ *
+ * These flags describe how a font is loaded and affect how the
+ * glyphs are drawn. There is no way to change this after the font
+ * has been loaded. If you need to render a font with different
+ * attributes, you have to create multiple FontProviders of the
+ * same font file.
+ */
+typedef enum {
+ DFFA_NONE = 0x00000000, /* none of these flags */
+ DFFA_NOKERNING = 0x00000001, /* don't use kerning */
+ DFFA_NOHINTING = 0x00000002, /* don't use hinting */
+ DFFA_MONOCHROME = 0x00000004, /* don't use anti-aliasing */
+ DFFA_NOCHARMAP = 0x00000008, /* no char map, glyph indices are
+ specified directly */
+ DFFA_FIXEDCLIP = 0x00000010, /* width fixed advance, clip to it */
+ DFFA_NOBITMAP = 0x00000020, /* ignore bitmap strikes; for
+ bitmap-only fonts this flag is
+ ignored */
+ DFFA_OUTLINED = 0x00000040
+} DFBFontAttributes;
+
+/*
+ * Flags defining which fields of a DFBFontDescription are valid.
+ */
+typedef enum {
+ DFDESC_ATTRIBUTES = 0x00000001, /* attributes field is valid */
+ DFDESC_HEIGHT = 0x00000002, /* height is specified */
+ DFDESC_WIDTH = 0x00000004, /* width is specified */
+ DFDESC_INDEX = 0x00000008, /* index is specified */
+ DFDESC_FIXEDADVANCE = 0x00000010, /* specify a fixed advance overriding
+ any character advance of fixed or
+ proportional fonts */
+ DFDESC_FRACT_HEIGHT = 0x00000020, /* fractional height is set */
+ DFDESC_FRACT_WIDTH = 0x00000040, /* fractional width is set */
+ DFDESC_OUTLINE_WIDTH = 0x00000080, /* outline width is set */
+ DFDESC_OUTLINE_OPACITY = 0x00000100, /* outline opacity is set */
+ DFDESC_ROTATION = 0x00002000, /* rotation is set */
+} DFBFontDescriptionFlags;
+
+/*
+ * Description of how to load glyphs from a font file.
+ *
+ * The attributes control how the glyphs are rendered. Width and height can be used to specify the
+ * desired face size in pixels. If you are loading a non-scalable font, you shouldn't specify a
+ * font size.
+ *
+ * Please note that the height value in the DFBFontDescription doesn't correspond to the height
+ * returned by IDirectFBFont::GetHeight().
+ *
+ * The index field controls which face is loaded from a font file that provides a collection of
+ * faces. This is rarely needed.
+ *
+ * Fractional sizes (fract_height and fract_width) are 26.6 fixed point integers and override
+ * the pixel sizes if both are specified.
+ *
+ * Outline parameters are ignored if DFFA_OUTLINED is not used (see DFBFontAttributes). To change the
+ * default values of 1.0 each use DFDESC_OUTLINE_WIDTH and/or DFDESC_OUTLINE_OPACITY.
+ *
+ * The rotation value is a 0.24 fixed point number of rotations. Use the macros DFB_DEGREES
+ * and DFB_RADIANS to convert from those units.
+ */
+typedef struct {
+ DFBFontDescriptionFlags flags;
+
+ DFBFontAttributes attributes;
+ int height;
+ int width;
+ unsigned int index;
+ int fixed_advance;
+
+ int fract_height;
+ int fract_width;
+
+ int outline_width; /* Outline width as 16.16 fixed point integer */
+ int outline_opacity; /* Outline opacity as 16.16 fixed point integer */
+
+ int rotation;
+} DFBFontDescription;
+
+#define DFB_DEGREES(deg) ((int)((deg)/360.0*(1<<24)))
+#define DFB_RADIANS(rad) ((int)((rad)/(2.0*M_PI)*(1<<24)))
+
+/*
+ * @internal
+ *
+ * Encodes format constants in the following way (bit 31 - 0):
+ *
+ * lkjj:hhgg | gfff:eeed | cccc:bbbb | baaa:aaaa
+ *
+ * a) pixelformat index<br>
+ * b) effective color (or index) bits per pixel of format<br>
+ * c) effective alpha bits per pixel of format<br>
+ * d) alpha channel present<br>
+ * e) bytes per "pixel in a row" (1/8 fragment, i.e. bits)<br>
+ * f) bytes per "pixel in a row" (decimal part, i.e. bytes)<br>
+ * g) smallest number of pixels aligned to byte boundary (minus one)<br>
+ * h) multiplier for planes minus one (1/4 fragment)<br>
+ * j) multiplier for planes minus one (decimal part)<br>
+ * k) color and/or alpha lookup table present<br>
+ * l) alpha channel is inverted
+ */
+#define DFB_SURFACE_PIXELFORMAT( index, color_bits, alpha_bits, has_alpha, \
+ row_bits, row_bytes, align, mul_f, mul_d, \
+ has_lut, inv_alpha ) \
+ ( (((index ) & 0x7F) ) | \
+ (((color_bits) & 0x1F) << 7) | \
+ (((alpha_bits) & 0x0F) << 12) | \
+ (((has_alpha ) ? 1 :0) << 16) | \
+ (((row_bits ) & 0x07) << 17) | \
+ (((row_bytes ) & 0x07) << 20) | \
+ (((align ) & 0x07) << 23) | \
+ (((mul_f ) & 0x03) << 26) | \
+ (((mul_d ) & 0x03) << 28) | \
+ (((has_lut ) ? 1 :0) << 30) | \
+ (((inv_alpha ) ? 1 :0) << 31) )
+
+/*
+ * Pixel format of a surface.
+ */
+typedef enum {
+ DSPF_UNKNOWN = 0x00000000, /* unknown or unspecified format */
+
+ /* 16 bit ARGB (2 byte, alpha 1@15, red 5@10, green 5@5, blue 5@0) */
+ DSPF_ARGB1555 = DFB_SURFACE_PIXELFORMAT( 0, 15, 1, 1, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit RGB (2 byte, red 5@11, green 6@5, blue 5@0) */
+ DSPF_RGB16 = DFB_SURFACE_PIXELFORMAT( 1, 16, 0, 0, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 24 bit RGB (3 byte, red 8@16, green 8@8, blue 8@0) */
+ DSPF_RGB24 = DFB_SURFACE_PIXELFORMAT( 2, 24, 0, 0, 0, 3, 0, 0, 0, 0, 0 ),
+
+ /* 24 bit RGB (4 byte, nothing@24, red 8@16, green 8@8, blue 8@0) */
+ DSPF_RGB32 = DFB_SURFACE_PIXELFORMAT( 3, 24, 0, 0, 0, 4, 0, 0, 0, 0, 0 ),
+
+ /* 32 bit ARGB (4 byte, alpha 8@24, red 8@16, green 8@8, blue 8@0) */
+ DSPF_ARGB = DFB_SURFACE_PIXELFORMAT( 4, 24, 8, 1, 0, 4, 0, 0, 0, 0, 0 ),
+
+ /* 8 bit alpha (1 byte, alpha 8@0), e.g. anti-aliased glyphs */
+ DSPF_A8 = DFB_SURFACE_PIXELFORMAT( 5, 0, 8, 1, 0, 1, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit YUV (4 byte/ 2 pixel, macropixel contains CbYCrY [31:0]) */
+ DSPF_YUY2 = DFB_SURFACE_PIXELFORMAT( 6, 16, 0, 0, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 8 bit RGB (1 byte, red 3@5, green 3@2, blue 2@0) */
+ DSPF_RGB332 = DFB_SURFACE_PIXELFORMAT( 7, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit YUV (4 byte/ 2 pixel, macropixel contains YCbYCr [31:0]) */
+ DSPF_UYVY = DFB_SURFACE_PIXELFORMAT( 8, 16, 0, 0, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 12 bit YUV (8 bit Y plane followed by 8 bit quarter size U/V planes) */
+ DSPF_I420 = DFB_SURFACE_PIXELFORMAT( 9, 12, 0, 0, 0, 1, 0, 2, 0, 0, 0 ),
+
+ /* 12 bit YUV (8 bit Y plane followed by 8 bit quarter size V/U planes) */
+ DSPF_YV12 = DFB_SURFACE_PIXELFORMAT( 10, 12, 0, 0, 0, 1, 0, 2, 0, 0, 0 ),
+
+ /* 8 bit LUT (8 bit color and alpha lookup from palette) */
+ DSPF_LUT8 = DFB_SURFACE_PIXELFORMAT( 11, 8, 0, 1, 0, 1, 0, 0, 0, 1, 0 ),
+
+ /* 8 bit ALUT (1 byte, alpha 4@4, color lookup 4@0) */
+ DSPF_ALUT44 = DFB_SURFACE_PIXELFORMAT( 12, 4, 4, 1, 0, 1, 0, 0, 0, 1, 0 ),
+
+ /* 32 bit ARGB (4 byte, inv. alpha 8@24, red 8@16, green 8@8, blue 8@0) */
+ DSPF_AiRGB = DFB_SURFACE_PIXELFORMAT( 13, 24, 8, 1, 0, 4, 0, 0, 0, 0, 1 ),
+
+ /* 1 bit alpha (1 byte/ 8 pixel, most significant bit used first) */
+ DSPF_A1 = DFB_SURFACE_PIXELFORMAT( 14, 0, 1, 1, 1, 0, 7, 0, 0, 0, 0 ),
+
+ /* 12 bit YUV (8 bit Y plane followed by one 16 bit quarter size Cb|Cr [7:0|7:0] plane) */
+ DSPF_NV12 = DFB_SURFACE_PIXELFORMAT( 15, 12, 0, 0, 0, 1, 0, 2, 0, 0, 0 ),
+
+ /* 16 bit YUV (8 bit Y plane followed by one 16 bit half width Cb|Cr [7:0|7:0] plane) */
+ DSPF_NV16 = DFB_SURFACE_PIXELFORMAT( 16, 24, 0, 0, 0, 1, 0, 0, 1, 0, 0 ),
+
+ /* 16 bit ARGB (2 byte, alpha 2@14, red 5@9, green 5@4, blue 4@0) */
+ DSPF_ARGB2554 = DFB_SURFACE_PIXELFORMAT( 17, 14, 2, 1, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit ARGB (2 byte, alpha 4@12, red 4@8, green 4@4, blue 4@0) */
+ DSPF_ARGB4444 = DFB_SURFACE_PIXELFORMAT( 18, 12, 4, 1, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit RGBA (2 byte, red 4@12, green 4@8, blue 4@4, alpha 4@0) */
+ DSPF_RGBA4444 = DFB_SURFACE_PIXELFORMAT( 19, 12, 4, 1, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 12 bit YUV (8 bit Y plane followed by one 16 bit quarter size Cr|Cb [7:0|7:0] plane) */
+ DSPF_NV21 = DFB_SURFACE_PIXELFORMAT( 20, 12, 0, 0, 0, 1, 0, 2, 0, 0, 0 ),
+
+ /* 32 bit AYUV (4 byte, alpha 8@24, Y 8@16, Cb 8@8, Cr 8@0) */
+ DSPF_AYUV = DFB_SURFACE_PIXELFORMAT( 21, 24, 8, 1, 0, 4, 0, 0, 0, 0, 0 ),
+
+ /* 4 bit alpha (1 byte/ 2 pixel, more significant nibble used first) */
+ DSPF_A4 = DFB_SURFACE_PIXELFORMAT( 22, 0, 4, 1, 4, 0, 1, 0, 0, 0, 0 ),
+
+ /* 1 bit alpha (3 byte/ alpha 1@18, red 6@12, green 6@6, blue 6@0) */
+ DSPF_ARGB1666 = DFB_SURFACE_PIXELFORMAT( 23, 18, 1, 1, 0, 3, 0, 0, 0, 0, 0 ),
+
+ /* 6 bit alpha (3 byte/ alpha 6@18, red 6@12, green 6@6, blue 6@0) */
+ DSPF_ARGB6666 = DFB_SURFACE_PIXELFORMAT( 24, 18, 6, 1, 0, 3, 0, 0, 0, 0, 0 ),
+
+ /* 6 bit RGB (3 byte/ red 6@12, green 6@6, blue 6@0) */
+ DSPF_RGB18 = DFB_SURFACE_PIXELFORMAT( 25, 18, 0, 0, 0, 3, 0, 0, 0, 0, 0 ),
+
+ /* 2 bit LUT (1 byte/ 4 pixel, 2 bit color and alpha lookup from palette) */
+ DSPF_LUT2 = DFB_SURFACE_PIXELFORMAT( 26, 2, 0, 1, 2, 0, 3, 0, 0, 1, 0 ),
+
+ /* 16 bit RGB (2 byte, nothing @12, red 4@8, green 4@4, blue 4@0) */
+ DSPF_RGB444 = DFB_SURFACE_PIXELFORMAT( 27, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit RGB (2 byte, nothing @15, red 5@10, green 5@5, blue 5@0) */
+ DSPF_RGB555 = DFB_SURFACE_PIXELFORMAT( 28, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0 ),
+
+ /* 16 bit BGR (2 byte, nothing @15, blue 5@10, green 5@5, red 5@0) */
+ DSPF_BGR555 = DFB_SURFACE_PIXELFORMAT( 29, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0 )
+
+} DFBSurfacePixelFormat;
+
+/* Number of pixelformats defined */
+#define DFB_NUM_PIXELFORMATS 30
+
+/* These macros extract information about the pixel format. */
+#define DFB_PIXELFORMAT_INDEX(fmt) (((fmt) & 0x0000007F) )
+
+#define DFB_COLOR_BITS_PER_PIXEL(fmt) (((fmt) & 0x00000F80) >> 7)
+
+#define DFB_ALPHA_BITS_PER_PIXEL(fmt) (((fmt) & 0x0000F000) >> 12)
+
+#define DFB_PIXELFORMAT_HAS_ALPHA(fmt) (((fmt) & 0x00010000) != 0)
+
+#define DFB_BITS_PER_PIXEL(fmt) (((fmt) & 0x007E0000) >> 17)
+
+#define DFB_BYTES_PER_PIXEL(fmt) (((fmt) & 0x00700000) >> 20)
+
+#define DFB_BYTES_PER_LINE(fmt,width) (((((fmt) & 0x007E0000) >> 17) * (width) + 7) >> 3)
+
+#define DFB_PIXELFORMAT_ALIGNMENT(fmt) (((fmt) & 0x03800000) >> 23)
+
+#define DFB_PLANE_MULTIPLY(fmt,height) ((((((fmt) & 0x3C000000) >> 26) + 4) * (height)) >> 2)
+
+#define DFB_PIXELFORMAT_IS_INDEXED(fmt) (((fmt) & 0x40000000) != 0)
+
+#define DFB_PLANAR_PIXELFORMAT(fmt) (((fmt) & 0x3C000000) != 0)
+
+#define DFB_PIXELFORMAT_INV_ALPHA(fmt) (((fmt) & 0x80000000) != 0)
+
+/*
+ * Hint flags for optimized allocation, format selection etc.
+ */
+typedef enum {
+ DSHF_NONE = 0x00000000,
+
+ DSHF_LAYER = 0x00000001, /* Surface optimized for display layer usage */
+ DSHF_WINDOW = 0x00000002, /* Surface optimized for being a window buffer */
+ DSHF_CURSOR = 0x00000004, /* Surface optimized for usage as a cursor shape */
+ DSHF_FONT = 0x00000008, /* Surface optimized for text rendering */
+
+ DSHF_ALL = 0x0000000F
+} DFBSurfaceHintFlags;
+
+/*
+ * Description of the surface that is to be created.
+ */
+typedef struct {
+ DFBSurfaceDescriptionFlags flags; /* field validation */
+
+ DFBSurfaceCapabilities caps; /* capabilities */
+ int width; /* pixel width */
+ int height; /* pixel height */
+ DFBSurfacePixelFormat pixelformat; /* pixel format */
+
+ struct {
+ void *data; /* data pointer of existing buffer */
+ int pitch; /* pitch of buffer */
+ } preallocated[2];
+
+ struct {
+ const DFBColor *entries;
+ unsigned int size;
+ } palette; /* initial palette */
+
+ unsigned long resource_id; /* universal resource id, either user specified for general
+ purpose surfaces or id of layer or window */
+
+ DFBSurfaceHintFlags hints; /* usage hints for optimized allocation, format selection etc. */
+} DFBSurfaceDescription;
+
+/*
+ * Description of the palette that is to be created.
+ */
+typedef struct {
+ DFBPaletteDescriptionFlags flags; /* Validation of fields. */
+
+ DFBPaletteCapabilities caps; /* Palette capabilities. */
+ unsigned int size; /* Number of entries. */
+ const DFBColor *entries; /* Preset palette
+ entries. */
+} DFBPaletteDescription;
+
+
+#define DFB_DISPLAY_LAYER_DESC_NAME_LENGTH 32
+
+/*
+ * Description of the display layer capabilities.
+ */
+typedef struct {
+ DFBDisplayLayerTypeFlags type; /* Classification of the display layer. */
+ DFBDisplayLayerCapabilities caps; /* Capability flags of the display layer. */
+
+ char name[DFB_DISPLAY_LAYER_DESC_NAME_LENGTH]; /* Display layer name. */
+
+ int level; /* Default level. */
+ int regions; /* Number of concurrent regions supported.<br>
+ -1 = unlimited,
+ 0 = unknown/one,
+ >0 = actual number */
+ int sources; /* Number of selectable sources. */
+ int clip_regions; /* Number of clipping regions. */
+} DFBDisplayLayerDescription;
+
+/*
+ * Capabilities of a display layer source.
+ */
+typedef enum {
+ DDLSCAPS_NONE = 0x00000000, /* none of these */
+
+ DDLSCAPS_SURFACE = 0x00000001, /* source has an accessable surface */
+
+ DDLSCAPS_ALL = 0x00000001 /* all of these */
+} DFBDisplayLayerSourceCaps;
+
+#define DFB_DISPLAY_LAYER_SOURCE_DESC_NAME_LENGTH 24
+
+/*
+ * Description of a display layer source.
+ */
+typedef struct {
+ DFBDisplayLayerSourceID source_id; /* ID of the source. */
+
+ char name[DFB_DISPLAY_LAYER_SOURCE_DESC_NAME_LENGTH]; /* Name of the source. */
+
+ DFBDisplayLayerSourceCaps caps; /* Capabilites of the source. */
+} DFBDisplayLayerSourceDescription;
+
+
+#define DFB_SCREEN_DESC_NAME_LENGTH 32
+
+/*
+ * Description of the display encoder capabilities.
+ */
+typedef struct {
+ DFBScreenCapabilities caps; /* Capability flags of
+ the screen. */
+
+ char name[DFB_SCREEN_DESC_NAME_LENGTH]; /* Rough description. */
+
+ int mixers; /* Number of mixers
+ available. */
+ int encoders; /* Number of display
+ encoders available. */
+ int outputs; /* Number of output
+ connectors available. */
+} DFBScreenDescription;
+
+
+#define DFB_INPUT_DEVICE_DESC_NAME_LENGTH 32
+#define DFB_INPUT_DEVICE_DESC_VENDOR_LENGTH 40
+
+/*
+ * Description of the input device capabilities.
+ */
+typedef struct {
+ DFBInputDeviceTypeFlags type; /* classification of
+ input device */
+ DFBInputDeviceCapabilities caps; /* capabilities,
+ validates the
+ following fields */
+
+ int min_keycode; /* minimum hardware
+ keycode or -1 if
+ no differentiation
+ between hardware
+ keys is made */
+ int max_keycode; /* maximum hardware
+ keycode or -1 if
+ no differentiation
+ between hardware
+ keys is made */
+ DFBInputDeviceAxisIdentifier max_axis; /* highest axis
+ identifier */
+ DFBInputDeviceButtonIdentifier max_button; /* highest button
+ identifier */
+
+ char name[DFB_INPUT_DEVICE_DESC_NAME_LENGTH]; /* Device name */
+
+ char vendor[DFB_INPUT_DEVICE_DESC_VENDOR_LENGTH]; /* Device vendor */
+
+ int vendor_id; /* Vendor ID */
+ int product_id; /* Product ID */
+} DFBInputDeviceDescription;
+
+/*
+ * Input device state flags
+ */
+typedef enum {
+ DISTATE_NONE = 0x00000000, /* none of these */
+
+ DISTATE_DISCONNECTED = 0x00000001, /* The device is currently not connected,
+ but may be connected again (hotplug). */
+
+ DISTATE_ALL = 0x00000001, /* all of these */
+} DFBInputDeviceStateFlags;
+
+/*
+ * State of an input device.
+ */
+typedef struct {
+ DFBInputDeviceStateFlags flags; /* State flags */
+} DFBInputDeviceState;
+
+typedef enum {
+ DIAIF_NONE = 0x00000000,
+
+ DIAIF_ABS_MIN = 0x00000001,
+ DIAIF_ABS_MAX = 0x00000002,
+
+ DIAIF_ALL = 0x00000003
+} DFBInputDeviceAxisInfoFlags;
+
+typedef struct {
+ DFBInputDeviceAxisInfoFlags flags;
+ int abs_min;
+ int abs_max;
+} DFBInputDeviceAxisInfo;
+
+#define DFB_GRAPHICS_DRIVER_INFO_NAME_LENGTH 40
+#define DFB_GRAPHICS_DRIVER_INFO_VENDOR_LENGTH 60
+
+typedef struct {
+ int major; /* Major version */
+ int minor; /* Minor version */
+
+ char name[DFB_GRAPHICS_DRIVER_INFO_NAME_LENGTH]; /* Driver name */
+ char vendor[DFB_GRAPHICS_DRIVER_INFO_VENDOR_LENGTH]; /* Driver vendor */
+} DFBGraphicsDriverInfo;
+
+#define DFB_GRAPHICS_DEVICE_DESC_NAME_LENGTH 48
+#define DFB_GRAPHICS_DEVICE_DESC_VENDOR_LENGTH 64
+
+/*
+ * Description of the graphics device capabilities.
+ */
+typedef struct {
+ DFBAccelerationMask acceleration_mask; /* Accelerated functions */
+
+ DFBSurfaceBlittingFlags blitting_flags; /* Supported blitting flags */
+ DFBSurfaceDrawingFlags drawing_flags; /* Supported drawing flags */
+
+ unsigned int video_memory; /* Amount of video memory in bytes */
+
+ char name[DFB_GRAPHICS_DEVICE_DESC_NAME_LENGTH]; /* Device/Chipset name */
+ char vendor[DFB_GRAPHICS_DEVICE_DESC_VENDOR_LENGTH]; /* Device vendor */
+
+ DFBGraphicsDriverInfo driver;
+} DFBGraphicsDeviceDescription;
+
+/*
+ * Description of the window that is to be created.
+ */
+typedef struct {
+ DFBWindowDescriptionFlags flags; /* field validation */
+
+ DFBWindowCapabilities caps; /* capabilities */
+ int width; /* pixel width */
+ int height; /* pixel height */
+ DFBSurfacePixelFormat pixelformat; /* pixel format */
+ int posx; /* distance from left layer border */
+ int posy; /* distance from upper layer border */
+ DFBSurfaceCapabilities surface_caps; /* pixel format */
+ DFBWindowID parent_id; /* window id of parent window */
+ DFBWindowOptions options; /* initial window options */
+ DFBWindowStackingClass stacking; /* initial stacking class */
+
+ unsigned long resource_id; /* resource id used to create the window surface */
+
+ DFBWindowID toplevel_id; /* top level window, if != 0 window will be a sub window */
+} DFBWindowDescription;
+
+/*
+ * Description of a data buffer that is to be created.
+ */
+typedef struct {
+ DFBDataBufferDescriptionFlags flags; /* field validation */
+
+ const char *file; /* for file based data buffers */
+
+ struct {
+ const void *data; /* static data pointer */
+ unsigned int length; /* length of buffer */
+ } memory; /* memory based buffers */
+} DFBDataBufferDescription;
+
+/*
+ * Return value of callback function of enumerations.
+ */
+typedef enum {
+ DFENUM_OK = 0x00000000, /* Proceed with enumeration */
+ DFENUM_CANCEL = 0x00000001 /* Cancel enumeration */
+} DFBEnumerationResult;
+
+/*
+ * Called for each supported video mode.
+ */
+typedef DFBEnumerationResult (*DFBVideoModeCallback) (
+ int width,
+ int height,
+ int bpp,
+ void *callbackdata
+);
+
+/*
+ * Called for each existing screen.
+ * "screen_id" can be used to get an interface to the screen.
+ */
+typedef DFBEnumerationResult (*DFBScreenCallback) (
+ DFBScreenID screen_id,
+ DFBScreenDescription desc,
+ void *callbackdata
+);
+
+/*
+ * Called for each existing display layer.
+ * "layer_id" can be used to get an interface to the layer.
+ */
+typedef DFBEnumerationResult (*DFBDisplayLayerCallback) (
+ DFBDisplayLayerID layer_id,
+ DFBDisplayLayerDescription desc,
+ void *callbackdata
+);
+
+/*
+ * Called for each existing input device.
+ * "device_id" can be used to get an interface to the device.
+ */
+typedef DFBEnumerationResult (*DFBInputDeviceCallback) (
+ DFBInputDeviceID device_id,
+ DFBInputDeviceDescription desc,
+ void *callbackdata
+);
+
+/*
+ * Called for each block of continous data requested, e.g. by a
+ * Video Provider. Write as many data as you can but not more
+ * than specified by length. Return the number of bytes written
+ * or 'EOF' if no data is available anymore.
+ */
+typedef int (*DFBGetDataCallback) (
+ void *buffer,
+ unsigned int length,
+ void *callbackdata
+);
+
+/*
+ * Information about an IDirectFBVideoProvider.
+ */
+typedef enum {
+ DVCAPS_BASIC = 0x00000000, /* basic ops (PlayTo, Stop) */
+ DVCAPS_SEEK = 0x00000001, /* supports SeekTo */
+ DVCAPS_SCALE = 0x00000002, /* can scale the video */
+ DVCAPS_INTERLACED = 0x00000004, /* supports interlaced surfaces */
+ DVCAPS_SPEED = 0x00000008, /* supports changing playback speed */
+ DVCAPS_BRIGHTNESS = 0x00000010, /* supports Brightness adjustment */
+ DVCAPS_CONTRAST = 0x00000020, /* supports Contrast adjustment */
+ DVCAPS_HUE = 0x00000040, /* supports Hue adjustment */
+ DVCAPS_SATURATION = 0x00000080, /* supports Saturation adjustment */
+ DVCAPS_INTERACTIVE = 0x00000100, /* supports SendEvent */
+ DVCAPS_VOLUME = 0x00000200, /* supports Volume adjustment */
+ DVCAPS_EVENT = 0x00000400, /* supports the sending of events as video/audio data changes.*/
+ DVCAPS_ATTRIBUTES = 0x00000800, /* supports dynamic changing of atrributes.*/
+ DVCAPS_AUDIO_SEL = 0x00001000, /* Supportes chosing audio outputs.*/
+} DFBVideoProviderCapabilities;
+
+/*
+ * Information about the status of an IDirectFBVideoProvider.
+ */
+typedef enum {
+ DVSTATE_UNKNOWN = 0x00000000, /* unknown status */
+ DVSTATE_PLAY = 0x00000001, /* video provider is playing */
+ DVSTATE_STOP = 0x00000002, /* playback was stopped */
+ DVSTATE_FINISHED = 0x00000003, /* playback is finished */
+ DVSTATE_BUFFERING = 0x00000004 /* video provider is buffering,
+ playback is running */
+} DFBVideoProviderStatus;
+
+/*
+ * Flags controlling playback mode of a IDirectFBVideoProvider.
+ */
+typedef enum {
+ DVPLAY_NOFX = 0x00000000, /* normal playback */
+ DVPLAY_REWIND = 0x00000001, /* reverse playback */
+ DVPLAY_LOOPING = 0x00000002 /* automatically restart
+ playback when end-of-stream
+ is reached (gapless). */
+} DFBVideoProviderPlaybackFlags;
+
+/*
+ * Flags to allow Audio Unit selection.
+ */
+typedef enum {
+ DVAUDIOUNIT_NONE = 0x00000000, /* No Audio Unit */
+ DVAUDIOUNIT_ONE = 0x00000001, /* Audio Unit One */
+ DVAUDIOUNIT_TWO = 0x00000002, /* Audio Unit Two */
+ DVAUDIOUNIT_THREE = 0x00000004, /* Audio Unit Three */
+ DVAUDIOUNIT_FOUR = 0x00000008, /* Audio Unit Four */
+ DVAUDIOUNIT_ALL = 0x0000000F, /* Audio Unit One */
+} DFBVideoProviderAudioUnits;
+
+
+/*
+ * Flags defining which fields of a DFBColorAdjustment are valid.
+ */
+typedef enum {
+ DCAF_NONE = 0x00000000, /* none of these */
+ DCAF_BRIGHTNESS = 0x00000001, /* brightness field is valid */
+ DCAF_CONTRAST = 0x00000002, /* contrast field is valid */
+ DCAF_HUE = 0x00000004, /* hue field is valid */
+ DCAF_SATURATION = 0x00000008, /* saturation field is valid */
+ DCAF_ALL = 0x0000000F /* all of these */
+} DFBColorAdjustmentFlags;
+
+/*
+ * Color Adjustment used to adjust video colors.
+ *
+ * All fields are in the range 0x0 to 0xFFFF with
+ * 0x8000 as the default value (no adjustment).
+ */
+typedef struct {
+ DFBColorAdjustmentFlags flags;
+
+ u16 brightness;
+ u16 contrast;
+ u16 hue;
+ u16 saturation;
+} DFBColorAdjustment;
+
+
+/*
+ * <i><b>IDirectFB</b></i> is the main interface. It can be
+ * retrieved by a call to <i>DirectFBCreate</i>. It's the only
+ * interface with a global creation facility. Other interfaces
+ * are created by this interface or interfaces created by it.
+ *
+ * <b>Hardware capabilities</b> such as the amount of video
+ * memory or a list of supported drawing/blitting functions and
+ * flags can be retrieved. It also provides enumeration of all
+ * supported video modes.
+ *
+ * <b>Input devices</b> and <b>display layers</b> that are
+ * present can be enumerated via a callback mechanism. The
+ * callback is given the capabilities and the device or layer
+ * ID. An interface to specific input devices or display layers
+ * can be retrieved by passing the device or layer ID to the
+ * corresponding method.
+ *
+ * <b>Surfaces</b> for general purpose use can be created via
+ * <i>CreateSurface</i>. These surfaces are so called "offscreen
+ * surfaces" and could be used for sprites or icons.
+ *
+ * The <b>primary surface</b> is an abstraction and API shortcut
+ * for getting a surface for visual output. Fullscreen games for
+ * example have the whole screen as their primary
+ * surface. Alternatively fullscreen applications can be forced
+ * to run in a window. The primary surface is also created via
+ * <i>CreateSurface</i> but with the special capability
+ * DSCAPS_PRIMARY.
+ *
+ * The <b>cooperative level</b> selects the type of the primary
+ * surface. With a call to <i>SetCooperativeLevel</i> the
+ * application can choose between the surface of an implicitly
+ * created window and the surface of the primary layer
+ * (deactivating the window stack). The application doesn't need
+ * to have any extra functionality to run in a window. If the
+ * application is forced to run in a window the call to
+ * <i>SetCooperativeLevel</i> fails with DFB_ACCESSDENIED.
+ * Applications that want to be "window aware" shouldn't exit on
+ * this error.
+ *
+ * The <b>video mode</b> can be changed via <i>SetVideoMode</i>
+ * and is the size and depth of the primary surface, i.e. the
+ * screen when in exclusive cooperative level. Without exclusive
+ * access <i>SetVideoMode</i> sets the size of the implicitly
+ * created window.
+ *
+ * <b>Event buffers</b> can be created with an option to
+ * automatically attach input devices matching the specified
+ * capabilities. If DICAPS_NONE is passed an event buffer with
+ * nothing attached to is created. An event buffer can be
+ * attached to input devices and windows.
+ *
+ * <b>Fonts, images and videos</b> are created by this
+ * interface. There are different implementations for different
+ * content types. On creation a suitable implementation is
+ * automatically chosen.
+ */
+DEFINE_INTERFACE( IDirectFB,
+
+ /** Cooperative level, video mode **/
+
+ /*
+ * Puts the interface into the specified cooperative level.
+ *
+ * Function fails with DFB_LOCKED if another instance already
+ * is in a cooperative level other than DFSCL_NORMAL.
+ */
+ DFBResult (*SetCooperativeLevel) (
+ IDirectFB *thiz,
+ DFBCooperativeLevel level
+ );
+
+ /*
+ * Switch the current video mode (primary layer).
+ *
+ * If in shared cooperative level this function sets the
+ * resolution of the window that is created implicitly for
+ * the primary surface.
+ */
+ DFBResult (*SetVideoMode) (
+ IDirectFB *thiz,
+ int width,
+ int height,
+ int bpp
+ );
+
+
+ /** Hardware capabilities **/
+
+ /*
+ * Get a description of the graphics device.
+ *
+ * For more detailed information use
+ * IDirectFBSurface::GetAccelerationMask().
+ */
+ DFBResult (*GetDeviceDescription) (
+ IDirectFB *thiz,
+ DFBGraphicsDeviceDescription *ret_desc
+ );
+
+ /*
+ * Enumerate supported video modes.
+ *
+ * Calls the given callback for all available video modes.
+ * Useful to select a certain mode to be used with
+ * IDirectFB::SetVideoMode().
+ */
+ DFBResult (*EnumVideoModes) (
+ IDirectFB *thiz,
+ DFBVideoModeCallback callback,
+ void *callbackdata
+ );
+
+
+ /** Surfaces & Palettes **/
+
+ /*
+ * Create a surface matching the specified description.
+ */
+ DFBResult (*CreateSurface) (
+ IDirectFB *thiz,
+ const DFBSurfaceDescription *desc,
+ IDirectFBSurface **ret_interface
+ );
+
+ /*
+ * Create a palette matching the specified description.
+ *
+ * Passing a NULL description creates a default palette with
+ * 256 entries filled with colors matching the RGB332 format.
+ */
+ DFBResult (*CreatePalette) (
+ IDirectFB *thiz,
+ const DFBPaletteDescription *desc,
+ IDirectFBPalette **ret_interface
+ );
+
+
+ /** Screens **/
+
+ /*
+ * Enumerate all existing screen.
+ *
+ * Calls the given callback for each available screen.
+ * The callback is passed the screen id that can be
+ * used to retrieve an interface to a specific screen using
+ * IDirectFB::GetScreen().
+ */
+ DFBResult (*EnumScreens) (
+ IDirectFB *thiz,
+ DFBScreenCallback callback,
+ void *callbackdata
+ );
+
+ /*
+ * Retrieve an interface to a specific screen.
+ */
+ DFBResult (*GetScreen) (
+ IDirectFB *thiz,
+ DFBScreenID screen_id,
+ IDirectFBScreen **ret_interface
+ );
+
+
+ /** Display Layers **/
+
+ /*
+ * Enumerate all existing display layers.
+ *
+ * Calls the given callback for each available display
+ * layer. The callback is passed the layer id that can be
+ * used to retrieve an interface to a specific layer using
+ * IDirectFB::GetDisplayLayer().
+ */
+ DFBResult (*EnumDisplayLayers) (
+ IDirectFB *thiz,
+ DFBDisplayLayerCallback callback,
+ void *callbackdata
+ );
+
+ /*
+ * Retrieve an interface to a specific display layer.
+ *
+ * The default <i>layer_id</i> is DLID_PRIMARY.
+ * Others can be obtained using IDirectFB::EnumDisplayLayers().
+ */
+ DFBResult (*GetDisplayLayer) (
+ IDirectFB *thiz,
+ DFBDisplayLayerID layer_id,
+ IDirectFBDisplayLayer **ret_interface
+ );
+
+
+ /** Input Devices **/
+
+ /*
+ * Enumerate all existing input devices.
+ *
+ * Calls the given callback for all available input devices.
+ * The callback is passed the device id that can be used to
+ * retrieve an interface on a specific device using
+ * IDirectFB::GetInputDevice().
+ */
+ DFBResult (*EnumInputDevices) (
+ IDirectFB *thiz,
+ DFBInputDeviceCallback callback,
+ void *callbackdata
+ );
+
+ /*
+ * Retrieve an interface to a specific input device.
+ */
+ DFBResult (*GetInputDevice) (
+ IDirectFB *thiz,
+ DFBInputDeviceID device_id,
+ IDirectFBInputDevice **ret_interface
+ );
+
+ /*
+ * Create a buffer for events.
+ *
+ * Creates an empty event buffer without event sources connected to it.
+ */
+ DFBResult (*CreateEventBuffer) (
+ IDirectFB *thiz,
+ IDirectFBEventBuffer **ret_buffer
+ );
+
+ /*
+ * Create a buffer for events with input devices connected.
+ *
+ * Creates an event buffer and attaches all input devices
+ * with matching capabilities. If no input devices match,
+ * e.g. by specifying DICAPS_NONE, a buffer will be returned
+ * that has no event sources connected to it.
+ *
+ * If global is DFB_FALSE events will only be delivered if this
+ * instance of IDirectFB has a focused primary (either running fullscreen
+ * or running in windowed mode with the window being focused).
+ *
+ * If global is DFB_TRUE no event will be discarded.
+ */
+ DFBResult (*CreateInputEventBuffer) (
+ IDirectFB *thiz,
+ DFBInputDeviceCapabilities caps,
+ DFBBoolean global,
+ IDirectFBEventBuffer **ret_buffer
+ );
+
+
+
+ /** Media **/
+
+ /*
+ * Create an image provider for the specified file.
+ */
+ DFBResult (*CreateImageProvider) (
+ IDirectFB *thiz,
+ const char *filename,
+ IDirectFBImageProvider **ret_interface
+ );
+
+ /*
+ * Create a video provider.
+ */
+ DFBResult (*CreateVideoProvider) (
+ IDirectFB *thiz,
+ const char *filename,
+ IDirectFBVideoProvider **ret_interface
+ );
+
+ /*
+ * Load a font from the specified file given a description
+ * of how to load the glyphs.
+ */
+ DFBResult (*CreateFont) (
+ IDirectFB *thiz,
+ const char *filename,
+ const DFBFontDescription *desc,
+ IDirectFBFont **ret_interface
+ );
+
+ /*
+ * Create a data buffer.
+ *
+ * If no description is specified (NULL) a streamed data buffer
+ * is created.
+ */
+ DFBResult (*CreateDataBuffer) (
+ IDirectFB *thiz,
+ const DFBDataBufferDescription *desc,
+ IDirectFBDataBuffer **ret_interface
+ );
+
+
+ /** Clipboard **/
+
+ /*
+ * Set clipboard content.
+ *
+ * This is an experimental and intermediate API call that is
+ * supposed to change soon.
+ *
+ * If timestamp is non null DirectFB returns the time stamp
+ * that it associated with the new data.
+ */
+ DFBResult (*SetClipboardData) (
+ IDirectFB *thiz,
+ const char *mime_type,
+ const void *data,
+ unsigned int size,
+ struct timeval *ret_timestamp
+ );
+
+ /*
+ * Get clipboard content.
+ *
+ * Memory returned in *ret_mimetype and *ret_data has to be freed.
+ *
+ * This is an experimental and intermediate API call that is
+ * supposed to change soon.
+ */
+ DFBResult (*GetClipboardData) (
+ IDirectFB *thiz,
+ char **ret_mimetype,
+ void **ret_data,
+ unsigned int *ret_size
+ );
+
+ /*
+ * Get time stamp of last SetClipboardData call.
+ *
+ * This is an experimental and intermediate API call that is
+ * supposed to change soon.
+ */
+ DFBResult (*GetClipboardTimeStamp) (
+ IDirectFB *thiz,
+ struct timeval *ret_timestamp
+ );
+
+
+ /** Misc **/
+
+ /*
+ * Suspend DirectFB, no other calls to DirectFB are allowed
+ * until Resume has been called.
+ */
+ DFBResult (*Suspend) (
+ IDirectFB *thiz
+ );
+
+ /*
+ * Resume DirectFB, only to be called after Suspend.
+ */
+ DFBResult (*Resume) (
+ IDirectFB *thiz
+ );
+
+ /*
+ * Wait until graphics card is idle,
+ * i.e. finish all drawing/blitting functions.
+ */
+ DFBResult (*WaitIdle) (
+ IDirectFB *thiz
+ );
+
+ /*
+ * Wait for next vertical retrace.
+ */
+ DFBResult (*WaitForSync) (
+ IDirectFB *thiz
+ );
+
+
+ /** Extensions **/
+
+ /*
+ * Load an implementation of a specific interface type.
+ *
+ * This methods loads an interface implementation of the specified
+ * <b>type</b> of interface, e.g. "IFusionSound".
+ *
+ * A specific implementation can be forced with the optional
+ * <b>implementation</b> argument.
+ *
+ * Implementations are passed <b>arg</b> during probing and construction.
+ *
+ * If an implementation has been successfully probed and the interface
+ * has been constructed, the resulting interface pointer is stored in
+ * <b>interface</b>.
+ */
+ DFBResult (*GetInterface) (
+ IDirectFB *thiz,
+ const char *type,
+ const char *implementation,
+ void *arg,
+ void **ret_interface
+ );
+
+
+ /** Input Devices */
+
+ DFBResult (*RescanInputDevices) (
+ IDirectFB *thiz
+ );
+)
+
+/* predefined layer ids */
+#define DLID_PRIMARY 0x0000
+
+/* predefined layer source ids */
+#define DLSID_SURFACE 0x0000
+
+/* predefined screen ids */
+#define DSCID_PRIMARY 0x0000
+
+/* predefined input device ids */
+#define DIDID_KEYBOARD 0x0000 /* primary keyboard */
+#define DIDID_MOUSE 0x0001 /* primary mouse */
+#define DIDID_JOYSTICK 0x0002 /* primary joystick */
+#define DIDID_REMOTE 0x0003 /* primary remote control */
+#define DIDID_ANY 0x0010 /* no primary device */
+
+
+/*
+ * Cooperative level handling the access permissions.
+ */
+typedef enum {
+ DLSCL_SHARED = 0, /* shared access */
+ DLSCL_EXCLUSIVE, /* exclusive access,
+ fullscreen/mode switching */
+ DLSCL_ADMINISTRATIVE /* administrative access,
+ enumerate windows, control them */
+} DFBDisplayLayerCooperativeLevel;
+
+/*
+ * Background mode defining how to erase/initialize the area
+ * for a windowstack repaint
+ */
+typedef enum {
+ DLBM_DONTCARE = 0, /* do not clear the layer before
+ repainting the windowstack */
+ DLBM_COLOR, /* fill with solid color
+ (SetBackgroundColor) */
+ DLBM_IMAGE, /* use an image (SetBackgroundImage) */
+ DLBM_TILE /* use a tiled image (SetBackgroundImage) */
+} DFBDisplayLayerBackgroundMode;
+
+/*
+ * Layer configuration flags
+ */
+typedef enum {
+ DLCONF_NONE = 0x00000000,
+
+ DLCONF_WIDTH = 0x00000001,
+ DLCONF_HEIGHT = 0x00000002,
+ DLCONF_PIXELFORMAT = 0x00000004,
+ DLCONF_BUFFERMODE = 0x00000008,
+ DLCONF_OPTIONS = 0x00000010,
+ DLCONF_SOURCE = 0x00000020,
+ DLCONF_SURFACE_CAPS = 0x00000040,
+
+ DLCONF_ALL = 0x0000007F
+} DFBDisplayLayerConfigFlags;
+
+/*
+ * Layer configuration
+ */
+typedef struct {
+ DFBDisplayLayerConfigFlags flags; /* Which fields of the configuration are set */
+
+ int width; /* Pixel width */
+ int height; /* Pixel height */
+ DFBSurfacePixelFormat pixelformat; /* Pixel format */
+ DFBDisplayLayerBufferMode buffermode; /* Buffer mode */
+ DFBDisplayLayerOptions options; /* Enable capabilities */
+ DFBDisplayLayerSourceID source; /* Selected layer source */
+
+ DFBSurfaceCapabilities surface_caps; /* Choose surface capabilities, available:
+ INTERLACED, SEPARATED, PREMULTIPLIED. */
+} DFBDisplayLayerConfig;
+
+/*
+ * Screen Power Mode.
+ */
+typedef enum {
+ DSPM_ON = 0,
+ DSPM_STANDBY,
+ DSPM_SUSPEND,
+ DSPM_OFF
+} DFBScreenPowerMode;
+
+
+/*
+ * Capabilities of a mixer.
+ */
+typedef enum {
+ DSMCAPS_NONE = 0x00000000, /* None of these. */
+
+ DSMCAPS_FULL = 0x00000001, /* Can mix full tree as specified in the description. */
+ DSMCAPS_SUB_LEVEL = 0x00000002, /* Can set a maximum layer level, e.g. to exclude an OSD from VCR output. */
+ DSMCAPS_SUB_LAYERS = 0x00000004, /* Can select a number of layers individually as specified in the description. */
+ DSMCAPS_BACKGROUND = 0x00000008 /* Background color is configurable. */
+} DFBScreenMixerCapabilities;
+
+
+#define DFB_SCREEN_MIXER_DESC_NAME_LENGTH 24
+
+/*
+ * Description of a mixer.
+ */
+typedef struct {
+ DFBScreenMixerCapabilities caps;
+
+ DFBDisplayLayerIDs layers; /* Visible layers if the
+ full tree is selected. */
+
+ int sub_num; /* Number of layers that can
+ be selected in sub mode. */
+ DFBDisplayLayerIDs sub_layers; /* Layers available for sub mode
+ with layer selection. */
+
+ char name[DFB_SCREEN_MIXER_DESC_NAME_LENGTH]; /* Mixer name */
+} DFBScreenMixerDescription;
+
+/*
+ * Flags for mixer configuration.
+ */
+typedef enum {
+ DSMCONF_NONE = 0x00000000, /* None of these. */
+
+ DSMCONF_TREE = 0x00000001, /* (Sub) tree is selected. */
+ DSMCONF_LEVEL = 0x00000002, /* Level is specified. */
+ DSMCONF_LAYERS = 0x00000004, /* Layer selection is set. */
+
+ DSMCONF_BACKGROUND = 0x00000010, /* Background color is set. */
+
+ DSMCONF_ALL = 0x00000017
+} DFBScreenMixerConfigFlags;
+
+/*
+ * (Sub) tree selection.
+ */
+typedef enum {
+ DSMT_UNKNOWN = 0x00000000, /* Unknown mode */
+
+ DSMT_FULL = 0x00000001, /* Full tree. */
+ DSMT_SUB_LEVEL = 0x00000002, /* Sub tree via maximum level. */
+ DSMT_SUB_LAYERS = 0x00000003 /* Sub tree via layer selection. */
+} DFBScreenMixerTree;
+
+/*
+ * Configuration of a mixer.
+ */
+typedef struct {
+ DFBScreenMixerConfigFlags flags; /* Validates struct members. */
+
+ DFBScreenMixerTree tree; /* Selected (sub) tree. */
+
+ int level; /* Max. level of sub level mode. */
+ DFBDisplayLayerIDs layers; /* Layers for sub layers mode. */
+
+ DFBColor background; /* Background color. */
+} DFBScreenMixerConfig;
+
+
+/*
+ * Capabilities of an output.
+ */
+typedef enum {
+ DSOCAPS_NONE = 0x00000000, /* None of these. */
+
+ DSOCAPS_CONNECTORS = 0x00000001, /* Output connectors are available. */
+
+ DSOCAPS_ENCODER_SEL = 0x00000010, /* Encoder can be selected. */
+ DSOCAPS_SIGNAL_SEL = 0x00000020, /* Signal(s) can be selected. */
+ DSOCAPS_CONNECTOR_SEL = 0x00000040, /* Connector(s) can be selected. */
+ DSOCAPS_SLOW_BLANKING = 0x00000080, /* Slow Blanking on outputs is supported. */
+ DSOCAPS_RESOLUTION = 0x00000100, /* Output Resolution can be changed. (global screen size)*/
+ DSOCAPS_ALL = 0x000001F1
+} DFBScreenOutputCapabilities;
+
+/*
+ * Type of output connector.
+ */
+typedef enum {
+ DSOC_UNKNOWN = 0x00000000, /* Unknown type */
+
+ DSOC_VGA = 0x00000001, /* VGA connector */
+ DSOC_SCART = 0x00000002, /* SCART connector */
+ DSOC_YC = 0x00000004, /* Y/C connector */
+ DSOC_CVBS = 0x00000008, /* CVBS connector */
+ DSOC_SCART2 = 0x00000010, /* 2nd SCART connector */
+ DSOC_COMPONENT = 0x00000020, /* Component video connector */
+ DSOC_HDMI = 0x00000040 /* HDMI connector */
+} DFBScreenOutputConnectors;
+
+/*
+ * Type of output signal.
+ */
+typedef enum {
+ DSOS_NONE = 0x00000000, /* No signal */
+
+ DSOS_VGA = 0x00000001, /* VGA signal */
+ DSOS_YC = 0x00000002, /* Y/C signal */
+ DSOS_CVBS = 0x00000004, /* CVBS signal */
+ DSOS_RGB = 0x00000008, /* R/G/B signal */
+ DSOS_YCBCR = 0x00000010, /* Y/Cb/Cr signal */
+ DSOS_HDMI = 0x00000020, /* HDMI signal */
+ DSOS_656 = 0x00000040 /* 656 Digital output signal */
+} DFBScreenOutputSignals;
+
+
+/*
+ * Type of slow blanking signalling.
+ */
+typedef enum {
+ DSOSB_OFF = 0x00000000, /* No signal */
+ DSOSB_16x9 = 0x00000001, /* 16*9 Widescreen signalling */
+ DSOSB_4x3 = 0x00000002, /* 4*3 widescreen signalling */
+ DSOSB_FOLLOW = 0x00000004, /* Follow signalling */
+ DSOSB_MONITOR = 0x00000008 /* Monitor */
+} DFBScreenOutputSlowBlankingSignals;
+
+/**
+ * Resolutions. TV Standards implies too many things:
+ * resolution / encoding / frequency.
+ */
+typedef enum {
+ DSOR_UNKNOWN = 0x00000000, /* Unknown Resolution */
+ DSOR_640_480 = 0x00000001, /* 640x480 Resolution */
+ DSOR_720_480 = 0x00000002, /* 720x480 Resolution */
+ DSOR_720_576 = 0x00000004, /* 720x576 Resolution */
+ DSOR_800_600 = 0x00000008, /* 800x600 Resolution */
+ DSOR_1024_768 = 0x00000010, /* 1024x768 Resolution */
+ DSOR_1152_864 = 0x00000020, /* 1152x864 Resolution */
+ DSOR_1280_720 = 0x00000040, /* 1280x720 Resolution */
+ DSOR_1280_768 = 0x00000080, /* 1280x768 Resolution */
+ DSOR_1280_960 = 0x00000100, /* 1280x960 Resolution */
+ DSOR_1280_1024 = 0x00000200, /* 1280x1024 Resolution */
+ DSOR_1400_1050 = 0x00000400, /* 1400x1050 Resolution */
+ DSOR_1600_1200 = 0x00000800, /* 1600x1200 Resolution */
+ DSOR_1920_1080 = 0x00001000, /* 1920x1080 Resolution */
+ DSOR_ALL = 0x00001FFF /* All Resolution */
+} DFBScreenOutputResolution;
+
+
+#define DFB_SCREEN_OUTPUT_DESC_NAME_LENGTH 24
+
+/*
+ * Description of a screen output.
+ */
+typedef struct {
+ DFBScreenOutputCapabilities caps; /* Screen capabilities. */
+
+ DFBScreenOutputConnectors all_connectors; /* Output connectors. */
+ DFBScreenOutputSignals all_signals; /* Output signals. */
+ DFBScreenOutputResolution all_resolutions; /* Output Resolutions */
+
+ char name[DFB_SCREEN_OUTPUT_DESC_NAME_LENGTH]; /* Output name */
+} DFBScreenOutputDescription;
+
+/*
+ * Flags for screen output configuration.
+ */
+typedef enum {
+ DSOCONF_NONE = 0x00000000, /* None of these. */
+
+ DSOCONF_ENCODER = 0x00000001, /* Set encoder the signal(s) comes from. */
+ DSOCONF_SIGNALS = 0x00000002, /* Select signal(s) from encoder. */
+ DSOCONF_CONNECTORS = 0x00000004, /* Select output connector(s). */
+ DSOCONF_SLOW_BLANKING= 0x00000008, /* Can select slow blanking support. */
+ DSOCONF_RESOLUTION = 0x00000010, /* Can change output resolution */
+
+ DSOCONF_ALL = 0x0000001F
+} DFBScreenOutputConfigFlags;
+
+/*
+ * Configuration of an output.
+ */
+typedef struct {
+ DFBScreenOutputConfigFlags flags; /* Validates struct members. */
+
+ int encoder; /* Chosen encoder. */
+ DFBScreenOutputSignals out_signals; /* Selected encoder signal(s). */
+ DFBScreenOutputConnectors out_connectors; /* Selected output connector(s). */
+ DFBScreenOutputSlowBlankingSignals slow_blanking;/* Slow Blanking signals. */
+ DFBScreenOutputResolution resolution; /* Output Resolution */
+} DFBScreenOutputConfig;
+
+
+/*
+ * Capabilities of a display encoder.
+ */
+typedef enum {
+ DSECAPS_NONE = 0x00000000, /* None of these. */
+
+ DSECAPS_TV_STANDARDS = 0x00000001, /* TV standards can be selected. */
+ DSECAPS_TEST_PICTURE = 0x00000002, /* Test picture generation supported. */
+ DSECAPS_MIXER_SEL = 0x00000004, /* Mixer can be selected. */
+ DSECAPS_OUT_SIGNALS = 0x00000008, /* Different output signals are supported. */
+ DSECAPS_SCANMODE = 0x00000010, /* Can switch between interlaced and progressive output. */
+ DSECAPS_FREQUENCY = 0x00000020, /* Can switch between different frequencies. */
+
+ DSECAPS_BRIGHTNESS = 0x00000100, /* Adjustment of brightness is supported. */
+ DSECAPS_CONTRAST = 0x00000200, /* Adjustment of contrast is supported. */
+ DSECAPS_HUE = 0x00000400, /* Adjustment of hue is supported. */
+ DSECAPS_SATURATION = 0x00000800, /* Adjustment of saturation is supported. */
+
+ DSECAPS_CONNECTORS = 0x00001000, /* Select output connector(s). */
+ DSECAPS_SLOW_BLANKING = 0x00002000, /* Slow Blanking on outputs is supported. */
+ DSECAPS_RESOLUTION = 0x00004000, /* Different encoder resolutions supported */
+
+ DSECAPS_ALL = 0x00007f3f
+} DFBScreenEncoderCapabilities;
+
+/*
+ * Type of display encoder.
+ */
+typedef enum {
+ DSET_UNKNOWN = 0x00000000, /* Unknown type */
+
+ DSET_CRTC = 0x00000001, /* Encoder is a CRTC. */
+ DSET_TV = 0x00000002, /* TV output encoder. */
+ DSET_DIGITAL = 0x00000004 /* Support signals other than SD TV standards. */
+} DFBScreenEncoderType;
+
+/*
+ * TV standards.
+ */
+typedef enum {
+ DSETV_UNKNOWN = 0x00000000, /* Unknown standard */
+
+ DSETV_PAL = 0x00000001, /* PAL */
+ DSETV_NTSC = 0x00000002, /* NTSC */
+ DSETV_SECAM = 0x00000004, /* SECAM */
+ DSETV_PAL_60 = 0x00000008, /* PAL-60 */
+ DSETV_PAL_BG = 0x00000010, /* PAL BG support (specific) */
+ DSETV_PAL_I = 0x00000020, /* PAL I support (specific) */
+ DSETV_PAL_M = 0x00000040, /* PAL M support (specific) */
+ DSETV_PAL_N = 0x00000080, /* PAL N support (specific) */
+ DSETV_PAL_NC = 0x00000100, /* PAL NC support (specific) */
+ DSETV_NTSC_M_JPN = 0x00000200, /* NTSC_JPN support */
+ DSETV_NTSC_443 = 0x00000800, /* NTSC with 4.43MHz colour carrier */
+ DSETV_DIGITAL = 0x00000400, /* TV standards from the digital domain. specify resolution, scantype, frequency.*/
+ DSETV_ALL = 0x00000FFF /* All TV Standards*/
+} DFBScreenEncoderTVStandards;
+
+/*
+ * Scan modes.
+ */
+typedef enum {
+ DSESM_UNKNOWN = 0x00000000, /* Unknown mode */
+
+ DSESM_INTERLACED = 0x00000001, /* Interlaced scan mode */
+ DSESM_PROGRESSIVE = 0x00000002 /* Progressive scan mode */
+} DFBScreenEncoderScanMode;
+
+/*
+ * Frequency of output signal.
+ */
+typedef enum {
+ DSEF_UNKNOWN = 0x00000000, /* Unknown Frequency */
+
+ DSEF_25HZ = 0x00000001, /* 25 Hz Output. */
+ DSEF_29_97HZ = 0x00000002, /* 29.97 Hz Output. */
+ DSEF_50HZ = 0x00000004, /* 50 Hz Output. */
+ DSEF_59_94HZ = 0x00000008, /* 59.94 Hz Output. */
+ DSEF_60HZ = 0x00000010, /* 60 Hz Output. */
+ DSEF_75HZ = 0x00000020, /* 75 Hz Output. */
+ DSEF_30HZ = 0x00000040, /* 30 Hz Output. */
+ DSEF_24HZ = 0x00000080, /* 24 Hz Output. */
+ DSEF_23_976HZ = 0x00000100, /* 23.976 Hz Output. */
+} DFBScreenEncoderFrequency;
+
+#define DFB_SCREEN_ENCODER_DESC_NAME_LENGTH 24
+
+/*
+ * Description of a display encoder.
+ */
+typedef struct {
+ DFBScreenEncoderCapabilities caps; /* Encoder capabilities. */
+ DFBScreenEncoderType type; /* Type of encoder. */
+
+ DFBScreenEncoderTVStandards tv_standards; /* Supported TV standards. */
+ DFBScreenOutputSignals out_signals; /* Supported output signals. */
+ DFBScreenOutputConnectors all_connectors; /* Supported output connectors */
+ DFBScreenOutputResolution all_resolutions; /* Supported Resolutions*/
+
+ char name[DFB_SCREEN_ENCODER_DESC_NAME_LENGTH]; /* Encoder name */
+} DFBScreenEncoderDescription;
+
+/*
+ * Flags for display encoder configuration.
+ */
+typedef enum {
+ DSECONF_NONE = 0x00000000, /* None of these. */
+
+ DSECONF_TV_STANDARD = 0x00000001, /* Set TV standard. */
+ DSECONF_TEST_PICTURE = 0x00000002, /* Set test picture mode. */
+ DSECONF_MIXER = 0x00000004, /* Select mixer. */
+ DSECONF_OUT_SIGNALS = 0x00000008, /* Select generated output signal(s). */
+ DSECONF_SCANMODE = 0x00000010, /* Select interlaced or progressive output. */
+ DSECONF_TEST_COLOR = 0x00000020, /* Set color for DSETP_SINGLE. */
+ DSECONF_ADJUSTMENT = 0x00000040, /* Set color adjustment. */
+ DSECONF_FREQUENCY = 0x00000080, /* Set Output Frequency*/
+
+ DSECONF_CONNECTORS = 0x00000100, /* Select output connector(s). */
+ DSECONF_SLOW_BLANKING = 0x00000200, /* Can select slow blanking support. */
+ DSECONF_RESOLUTION = 0x00000400, /* Can change resolution of the encoder.*/
+
+ DSECONF_ALL = 0x000007FF
+} DFBScreenEncoderConfigFlags;
+
+/*
+ * Test picture mode.
+ */
+typedef enum {
+ DSETP_OFF = 0x00000000, /* Disable test picture. */
+
+ DSETP_MULTI = 0x00000001, /* Show color bars. */
+ DSETP_SINGLE = 0x00000002, /* Whole screen as defined in configuration. */
+
+ DSETP_WHITE = 0x00000010, /* Whole screen (ff, ff, ff). */
+ DSETP_YELLOW = 0x00000020, /* Whole screen (ff, ff, 00). */
+ DSETP_CYAN = 0x00000030, /* Whole screen (00, ff, ff). */
+ DSETP_GREEN = 0x00000040, /* Whole screen (00, ff, 00). */
+ DSETP_MAGENTA = 0x00000050, /* Whole screen (ff, 00, ff). */
+ DSETP_RED = 0x00000060, /* Whole screen (ff, 00, 00). */
+ DSETP_BLUE = 0x00000070, /* Whole screen (00, 00, ff). */
+ DSETP_BLACK = 0x00000080 /* Whole screen (00, 00, 00). */
+} DFBScreenEncoderTestPicture;
+
+/*
+ * Configuration of a display encoder.
+ */
+typedef struct {
+ DFBScreenEncoderConfigFlags flags; /* Validates struct members. */
+
+ DFBScreenEncoderTVStandards tv_standard; /* TV standard. */
+ DFBScreenEncoderTestPicture test_picture; /* Test picture mode. */
+ int mixer; /* Selected mixer. */
+ DFBScreenOutputSignals out_signals; /* Generated output signals. */
+ DFBScreenOutputConnectors out_connectors; /* Selected output connector(s). */
+ DFBScreenOutputSlowBlankingSignals slow_blanking;/* Slow Blanking signals. */
+
+ DFBScreenEncoderScanMode scanmode; /* Interlaced or progressive output. */
+
+ DFBColor test_color; /* Color for DSETP_SINGLE. */
+
+ DFBColorAdjustment adjustment; /* Color adjustment. */
+
+ DFBScreenEncoderFrequency frequency; /* Selected Output Frequency*/
+ DFBScreenOutputResolution resolution; /* Selected Output resolution*/
+} DFBScreenEncoderConfig;
+
+
+/*******************
+ * IDirectFBScreen *
+ *******************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBScreen,
+
+ /** Retrieving information **/
+
+ /*
+ * Get the unique screen ID.
+ */
+ DFBResult (*GetID) (
+ IDirectFBScreen *thiz,
+ DFBScreenID *ret_screen_id
+ );
+
+ /*
+ * Get a description of this screen, i.e. the capabilities.
+ */
+ DFBResult (*GetDescription) (
+ IDirectFBScreen *thiz,
+ DFBScreenDescription *ret_desc
+ );
+
+ /*
+ * Get the screen's width and height in pixels.
+ */
+ DFBResult (*GetSize) (
+ IDirectFBScreen *thiz,
+ int *ret_width,
+ int *ret_height
+ );
+
+
+ /** Display Layers **/
+
+ /*
+ * Enumerate all existing display layers for this screen.
+ *
+ * Calls the given callback for each available display
+ * layer. The callback is passed the layer id that can be
+ * used to retrieve an interface to a specific layer using
+ * IDirectFB::GetDisplayLayer().
+ */
+ DFBResult (*EnumDisplayLayers) (
+ IDirectFBScreen *thiz,
+ DFBDisplayLayerCallback callback,
+ void *callbackdata
+ );
+
+
+ /** Power management **/
+
+ /*
+ * Set screen power mode.
+ */
+ DFBResult (*SetPowerMode) (
+ IDirectFBScreen *thiz,
+ DFBScreenPowerMode mode
+ );
+
+
+ /** Synchronization **/
+
+ /*
+ * Wait for next vertical retrace.
+ */
+ DFBResult (*WaitForSync) (
+ IDirectFBScreen *thiz
+ );
+
+
+ /** Mixers **/
+
+ /*
+ * Get a description of available mixers.
+ *
+ * All descriptions are written to the array pointed to by
+ * <b>ret_descriptions</b>. The number of mixers is returned by
+ * IDirectFBScreen::GetDescription().
+ */
+ DFBResult (*GetMixerDescriptions) (
+ IDirectFBScreen *thiz,
+ DFBScreenMixerDescription *ret_descriptions
+ );
+
+ /*
+ * Get current mixer configuration.
+ */
+ DFBResult (*GetMixerConfiguration) (
+ IDirectFBScreen *thiz,
+ int mixer,
+ DFBScreenMixerConfig *ret_config
+ );
+
+ /*
+ * Test mixer configuration.
+ *
+ * If configuration fails and 'ret_failed' is not NULL it will
+ * indicate which fields of the configuration caused the error.
+ */
+ DFBResult (*TestMixerConfiguration) (
+ IDirectFBScreen *thiz,
+ int mixer,
+ const DFBScreenMixerConfig *config,
+ DFBScreenMixerConfigFlags *ret_failed
+ );
+
+ /*
+ * Set mixer configuration.
+ */
+ DFBResult (*SetMixerConfiguration) (
+ IDirectFBScreen *thiz,
+ int mixer,
+ const DFBScreenMixerConfig *config
+ );
+
+
+ /** Encoders **/
+
+ /*
+ * Get a description of available display encoders.
+ *
+ * All descriptions are written to the array pointed to by
+ * <b>ret_descriptions</b>. The number of encoders is returned by
+ * IDirectFBScreen::GetDescription().
+ */
+ DFBResult (*GetEncoderDescriptions) (
+ IDirectFBScreen *thiz,
+ DFBScreenEncoderDescription *ret_descriptions
+ );
+
+ /*
+ * Get current encoder configuration.
+ */
+ DFBResult (*GetEncoderConfiguration) (
+ IDirectFBScreen *thiz,
+ int encoder,
+ DFBScreenEncoderConfig *ret_config
+ );
+
+ /*
+ * Test encoder configuration.
+ *
+ * If configuration fails and 'ret_failed' is not NULL it will
+ * indicate which fields of the configuration caused the
+ * error.
+ */
+ DFBResult (*TestEncoderConfiguration) (
+ IDirectFBScreen *thiz,
+ int encoder,
+ const DFBScreenEncoderConfig *config,
+ DFBScreenEncoderConfigFlags *ret_failed
+ );
+
+ /*
+ * Set encoder configuration.
+ */
+ DFBResult (*SetEncoderConfiguration) (
+ IDirectFBScreen *thiz,
+ int encoder,
+ const DFBScreenEncoderConfig *config
+ );
+
+
+ /** Outputs **/
+
+ /*
+ * Get a description of available outputs.
+ *
+ * All descriptions are written to the array pointed to by
+ * <b>ret_descriptions</b>. The number of outputs is returned by
+ * IDirectFBScreen::GetDescription().
+ */
+ DFBResult (*GetOutputDescriptions) (
+ IDirectFBScreen *thiz,
+ DFBScreenOutputDescription *ret_descriptions
+ );
+
+ /*
+ * Get current output configuration.
+ */
+ DFBResult (*GetOutputConfiguration) (
+ IDirectFBScreen *thiz,
+ int output,
+ DFBScreenOutputConfig *ret_config
+ );
+
+ /*
+ * Test output configuration.
+ *
+ * If configuration fails and 'ret_failed' is not NULL it will
+ * indicate which fields of the configuration caused the error.
+ */
+ DFBResult (*TestOutputConfiguration) (
+ IDirectFBScreen *thiz,
+ int output,
+ const DFBScreenOutputConfig *config,
+ DFBScreenOutputConfigFlags *ret_failed
+ );
+
+ /*
+ * Set output configuration.
+ */
+ DFBResult (*SetOutputConfiguration) (
+ IDirectFBScreen *thiz,
+ int output,
+ const DFBScreenOutputConfig *config
+ );
+)
+
+
+/*************************
+ * IDirectFBDisplayLayer *
+ *************************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBDisplayLayer,
+
+ /** Information **/
+
+ /*
+ * Get the unique layer ID.
+ */
+ DFBResult (*GetID) (
+ IDirectFBDisplayLayer *thiz,
+ DFBDisplayLayerID *ret_layer_id
+ );
+
+ /*
+ * Get a description of this display layer, i.e. the capabilities.
+ */
+ DFBResult (*GetDescription) (
+ IDirectFBDisplayLayer *thiz,
+ DFBDisplayLayerDescription *ret_desc
+ );
+
+ /*
+ * Get a description of available sources.
+ *
+ * All descriptions are written to the array pointed to by
+ * <b>ret_descriptions</b>. The number of sources is returned by
+ * IDirectFBDisplayLayer::GetDescription().
+ */
+ DFBResult (*GetSourceDescriptions) (
+ IDirectFBDisplayLayer *thiz,
+ DFBDisplayLayerSourceDescription *ret_descriptions
+ );
+
+ /*
+ * For an interlaced display, this returns the currently inactive
+ * field: 0 for the top field, and 1 for the bottom field.
+ *
+ * The inactive field is the one you should draw to next to avoid
+ * tearing, the active field is the one currently being displayed.
+ *
+ * For a progressive output, this should always return 0. We should
+ * also have some other call to indicate whether the display layer
+ * is interlaced or progressive, but this is a start.
+ */
+ DFBResult (*GetCurrentOutputField) (
+ IDirectFBDisplayLayer *thiz,
+ int *ret_field
+ );
+
+
+ /** Interfaces **/
+
+ /*
+ * Get an interface to layer's surface.
+ *
+ * Only available in exclusive mode.
+ */
+ DFBResult (*GetSurface) (
+ IDirectFBDisplayLayer *thiz,
+ IDirectFBSurface **ret_interface
+ );
+
+ /*
+ * Get an interface to the screen to which the layer belongs.
+ */
+ DFBResult (*GetScreen) (
+ IDirectFBDisplayLayer *thiz,
+ IDirectFBScreen **ret_interface
+ );
+
+
+ /** Configuration **/
+
+ /*
+ * Set cooperative level to get control over the layer
+ * or the windows within this layer.
+ */
+ DFBResult (*SetCooperativeLevel) (
+ IDirectFBDisplayLayer *thiz,
+ DFBDisplayLayerCooperativeLevel level
+ );
+
+ /*
+ * Get current layer configuration.
+ */
+ DFBResult (*GetConfiguration) (
+ IDirectFBDisplayLayer *thiz,
+ DFBDisplayLayerConfig *ret_config
+ );
+
+ /*
+ * Test layer configuration.
+ *
+ * If configuration fails and 'failed' is not NULL it will
+ * indicate which fields of the configuration caused the
+ * error.
+ */
+ DFBResult (*TestConfiguration) (
+ IDirectFBDisplayLayer *thiz,
+ const DFBDisplayLayerConfig *config,
+ DFBDisplayLayerConfigFlags *ret_failed
+ );
+
+ /*
+ * Set layer configuration.
+ *
+ * Only available in exclusive or administrative mode.
+ */
+ DFBResult (*SetConfiguration) (
+ IDirectFBDisplayLayer *thiz,
+ const DFBDisplayLayerConfig *config
+ );
+
+
+ /** Layout **/
+
+ /*
+ * Set location on screen as normalized values.
+ *
+ * So the whole screen is 0.0, 0.0, 1.0, 1.0.
+ */
+ DFBResult (*SetScreenLocation) (
+ IDirectFBDisplayLayer *thiz,
+ float x,
+ float y,
+ float width,
+ float height
+ );
+
+ /*
+ * Set location on screen in pixels.
+ */
+ DFBResult (*SetScreenPosition) (
+ IDirectFBDisplayLayer *thiz,
+ int x,
+ int y
+ );
+
+ /*
+ * Set location on screen in pixels.
+ */
+ DFBResult (*SetScreenRectangle) (
+ IDirectFBDisplayLayer *thiz,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+
+ /** Misc Settings **/
+
+ /*
+ * Set global alpha factor for blending with layer(s) below.
+ */
+ DFBResult (*SetOpacity) (
+ IDirectFBDisplayLayer *thiz,
+ u8 opacity
+ );
+
+ /*
+ * Set the source rectangle.
+ *
+ * Only this part of the layer will be displayed.
+ */
+ DFBResult (*SetSourceRectangle) (
+ IDirectFBDisplayLayer *thiz,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ /*
+ * For an interlaced display, this sets the field parity.
+ *
+ * field: 0 for top field first, and 1 for bottom field first.
+ */
+ DFBResult (*SetFieldParity) (
+ IDirectFBDisplayLayer *thiz,
+ int field
+ );
+
+ /*
+ * Set the clipping region(s).
+ *
+ * If supported, this method sets the clipping <b>regions</b> that are used to
+ * to enable or disable visibility of parts of the layer. The <b>num_regions</b>
+ * must not exceed the limit as stated in the display layer description.
+ *
+ * If <b>positive</b> is DFB_TRUE the layer will be shown only in these regions,
+ * otherwise it's shown as usual except in these regions.
+ *
+ * Also see IDirectFBDisplayLayer::GetDescription().
+ */
+ DFBResult (*SetClipRegions) (
+ IDirectFBDisplayLayer *thiz,
+ const DFBRegion *regions,
+ int num_regions,
+ DFBBoolean positive
+ );
+
+
+ /** Color keys **/
+
+ /*
+ * Set the source color key.
+ *
+ * If a pixel of the layer matches this color the underlying
+ * pixel is visible at this point.
+ */
+ DFBResult (*SetSrcColorKey) (
+ IDirectFBDisplayLayer *thiz,
+ u8 r,
+ u8 g,
+ u8 b
+ );
+
+ /*
+ * Set the destination color key.
+ *
+ * The layer is only visible at points where the underlying
+ * pixel matches this color.
+ */
+ DFBResult (*SetDstColorKey) (
+ IDirectFBDisplayLayer *thiz,
+ u8 r,
+ u8 g,
+ u8 b
+ );
+
+
+ /** Z Order **/
+
+ /*
+ * Get the current display layer level.
+ *
+ * The level describes the z axis position of a layer. The
+ * primary layer is always on level zero unless a special
+ * driver adds support for level adjustment on the primary
+ * layer. Layers above have a positive level, e.g. video
+ * overlays. Layers below have a negative level, e.g. video
+ * underlays or background layers.
+ */
+ DFBResult (*GetLevel) (
+ IDirectFBDisplayLayer *thiz,
+ int *ret_level
+ );
+
+ /*
+ * Set the display layer level.
+ *
+ * Moves the layer to the specified level. The order of all
+ * other layers won't be changed. Note that only a few
+ * layers support level adjustment which is reflected by
+ * their capabilities.
+ */
+ DFBResult (*SetLevel) (
+ IDirectFBDisplayLayer *thiz,
+ int level
+ );
+
+
+ /** Background handling **/
+
+ /*
+ * Set the erase behaviour for windowstack repaints.
+ *
+ * Only available in exclusive or administrative mode.
+ */
+ DFBResult (*SetBackgroundMode) (
+ IDirectFBDisplayLayer *thiz,
+ DFBDisplayLayerBackgroundMode mode
+ );
+
+ /*
+ * Set the background image for the imaged background mode.
+ *
+ * Only available in exclusive or administrative mode.
+ */
+ DFBResult (*SetBackgroundImage) (
+ IDirectFBDisplayLayer *thiz,
+ IDirectFBSurface *surface
+ );
+
+ /*
+ * Set the color for a solid colored background.
+ *
+ * Only available in exclusive or administrative mode.
+ */
+ DFBResult (*SetBackgroundColor) (
+ IDirectFBDisplayLayer *thiz,
+ u8 r,
+ u8 g,
+ u8 b,
+ u8 a
+ );
+
+ /** Color adjustment **/
+
+ /*
+ * Get the layers color adjustment.
+ */
+ DFBResult (*GetColorAdjustment) (
+ IDirectFBDisplayLayer *thiz,
+ DFBColorAdjustment *ret_adj
+ );
+
+ /*
+ * Set the layers color adjustment.
+ *
+ * Only available in exclusive or administrative mode.
+ *
+ * This function only has an effect if the underlying
+ * hardware supports this operation. Check the layers
+ * capabilities to find out if this is the case.
+ */
+ DFBResult (*SetColorAdjustment) (
+ IDirectFBDisplayLayer *thiz,
+ const DFBColorAdjustment *adj
+ );
+
+
+ /** Windows **/
+
+ /*
+ * Create a window within this layer given a
+ * description of the window that is to be created.
+ */
+ DFBResult (*CreateWindow) (
+ IDirectFBDisplayLayer *thiz,
+ const DFBWindowDescription *desc,
+ IDirectFBWindow **ret_interface
+ );
+
+ /*
+ * Retrieve an interface to an existing window.
+ *
+ * The window is identified by its window id.
+ */
+ DFBResult (*GetWindow) (
+ IDirectFBDisplayLayer *thiz,
+ DFBWindowID window_id,
+ IDirectFBWindow **ret_interface
+ );
+
+
+ /** Cursor handling **/
+
+ /*
+ * Enable/disable the mouse cursor for this layer.
+ *
+ * Windows on a layer will only receive motion events if
+ * the cursor is enabled. This function is only available
+ * in exclusive/administrative mode.
+ */
+ DFBResult (*EnableCursor) (
+ IDirectFBDisplayLayer *thiz,
+ int enable
+ );
+
+ /*
+ * Returns the x/y coordinates of the layer's mouse cursor.
+ */
+ DFBResult (*GetCursorPosition) (
+ IDirectFBDisplayLayer *thiz,
+ int *ret_x,
+ int *ret_y
+ );
+
+ /*
+ * Move cursor to specified position.
+ *
+ * Handles movement like a real one, i.e. generates events.
+ */
+ DFBResult (*WarpCursor) (
+ IDirectFBDisplayLayer *thiz,
+ int x,
+ int y
+ );
+
+ /*
+ * Set cursor acceleration.
+ *
+ * Sets the acceleration of cursor movements. The amount
+ * beyond the 'threshold' will be multiplied with the
+ * acceleration factor. The acceleration factor is
+ * 'numerator/denominator'.
+ */
+ DFBResult (*SetCursorAcceleration) (
+ IDirectFBDisplayLayer *thiz,
+ int numerator,
+ int denominator,
+ int threshold
+ );
+
+ /*
+ * Set the cursor shape and the hotspot.
+ */
+ DFBResult (*SetCursorShape) (
+ IDirectFBDisplayLayer *thiz,
+ IDirectFBSurface *shape,
+ int hot_x,
+ int hot_y
+ );
+
+ /*
+ * Set the cursor opacity.
+ *
+ * This function is especially useful if you want
+ * to hide the cursor but still want windows on this
+ * display layer to receive motion events. In this
+ * case, simply set the cursor opacity to zero.
+ */
+ DFBResult (*SetCursorOpacity) (
+ IDirectFBDisplayLayer *thiz,
+ u8 opacity
+ );
+
+
+ /** Synchronization **/
+
+ /*
+ * Wait for next vertical retrace.
+ */
+ DFBResult (*WaitForSync) (
+ IDirectFBDisplayLayer *thiz
+ );
+
+
+ /** Contexts **/
+
+ /*
+ * Switch the layer context.
+ *
+ * Switches to the shared context unless <b>exclusive</b> is DFB_TRUE
+ * and the cooperative level of this interface is DLSCL_EXCLUSIVE.
+ */
+ DFBResult (*SwitchContext) (
+ IDirectFBDisplayLayer *thiz,
+ DFBBoolean exclusive
+ );
+
+
+ /** Rotation **/
+
+ /*
+ * Set the rotation of data within the layer.
+ *
+ * Only available in exclusive or administrative mode.
+ *
+ * Any <b>rotation</b> other than 0, 90, 180 or 270 is not supported.
+ *
+ * No layer hardware feature usage, only rotated blitting is used.
+ */
+ DFBResult (*SetRotation) (
+ IDirectFBDisplayLayer *thiz,
+ int rotation
+ );
+
+ /*
+ * Get the rotation of data within the layer.
+ */
+ DFBResult (*GetRotation) (
+ IDirectFBDisplayLayer *thiz,
+ int *ret_rotation
+ );
+
+
+ /** Windows **/
+
+ /*
+ * Retrieve an interface to an existing window.
+ *
+ * The window is identified by its surface' resource id.
+ */
+ DFBResult (*GetWindowByResourceID) (
+ IDirectFBDisplayLayer *thiz,
+ unsigned long resource_id,
+ IDirectFBWindow **ret_interface
+ );
+)
+
+
+/*
+ * Flipping flags controlling the behaviour of IDirectFBSurface::Flip().
+ */
+typedef enum {
+ DSFLIP_NONE = 0x00000000, /* None of these. */
+
+ DSFLIP_WAIT = 0x00000001, /* Flip() returns upon vertical sync. Flipping is still done
+ immediately unless DSFLIP_ONSYNC is specified, too. */
+ DSFLIP_BLIT = 0x00000002, /* Copy from back buffer to front buffer rather than
+ just swapping these buffers. This behaviour is enforced
+ if the region passed to Flip() is not NULL or if the
+ surface being flipped is a sub surface. */
+ DSFLIP_ONSYNC = 0x00000004, /* Do the actual flipping upon the next vertical sync.
+ The Flip() method will still return immediately unless
+ DSFLIP_WAIT is specified, too. */
+
+ DSFLIP_PIPELINE = 0x00000008,
+
+ DSFLIP_ONCE = 0x00000010,
+
+ DSFLIP_WAITFORSYNC = DSFLIP_WAIT | DSFLIP_ONSYNC
+} DFBSurfaceFlipFlags;
+
+/*
+ * Flags controlling the text layout.
+ */
+typedef enum {
+ DSTF_LEFT = 0x00000000, /* left aligned */
+ DSTF_CENTER = 0x00000001, /* horizontally centered */
+ DSTF_RIGHT = 0x00000002, /* right aligned */
+
+ DSTF_TOP = 0x00000004, /* y specifies the top
+ instead of the baseline */
+ DSTF_BOTTOM = 0x00000008, /* y specifies the bottom
+ instead of the baseline */
+
+ DSTF_OUTLINE = 0x00000010, /* enables outline rendering if loaded font supports it */
+
+ DSTF_TOPLEFT = DSTF_TOP | DSTF_LEFT,
+ DSTF_TOPCENTER = DSTF_TOP | DSTF_CENTER,
+ DSTF_TOPRIGHT = DSTF_TOP | DSTF_RIGHT,
+
+ DSTF_BOTTOMLEFT = DSTF_BOTTOM | DSTF_LEFT,
+ DSTF_BOTTOMCENTER = DSTF_BOTTOM | DSTF_CENTER,
+ DSTF_BOTTOMRIGHT = DSTF_BOTTOM | DSTF_RIGHT
+} DFBSurfaceTextFlags;
+
+/*
+ * Flags defining the type of data access.
+ * These are important for surface swapping management.
+ */
+typedef enum {
+ DSLF_READ = 0x00000001, /* request read access while
+ surface is locked */
+ DSLF_WRITE = 0x00000002 /* Request write access. If
+ specified and surface has
+ a back buffer, it will be
+ used. Otherwise, the front
+ buffer is used. */
+} DFBSurfaceLockFlags;
+
+/*
+ * Available Porter/Duff rules.
+ */
+typedef enum {
+ /* pixel = (source * fs + destination * fd),
+ sa = source alpha,
+ da = destination alpha */
+ DSPD_NONE = 0, /* fs: sa fd: 1.0-sa (defaults) */
+ DSPD_CLEAR = 1, /* fs: 0.0 fd: 0.0 */
+ DSPD_SRC = 2, /* fs: 1.0 fd: 0.0 */
+ DSPD_SRC_OVER = 3, /* fs: 1.0 fd: 1.0-sa */
+ DSPD_DST_OVER = 4, /* fs: 1.0-da fd: 1.0 */
+ DSPD_SRC_IN = 5, /* fs: da fd: 0.0 */
+ DSPD_DST_IN = 6, /* fs: 0.0 fd: sa */
+ DSPD_SRC_OUT = 7, /* fs: 1.0-da fd: 0.0 */
+ DSPD_DST_OUT = 8, /* fs: 0.0 fd: 1.0-sa */
+ DSPD_SRC_ATOP = 9, /* fs: da fd: 1.0-sa */
+ DSPD_DST_ATOP = 10, /* fs: 1.0-da fd: sa */
+ DSPD_ADD = 11, /* fs: 1.0 fd: 1.0 */
+ DSPD_XOR = 12, /* fs: 1.0-da fd: 1.0-sa */
+} DFBSurfacePorterDuffRule;
+
+/*
+ * Blend functions to use for source and destination blending
+ */
+typedef enum {
+ /*
+ * pixel color = sc * cf[sf] + dc * cf[df]
+ * pixel alpha = sa * af[sf] + da * af[df]
+ * sc = source color
+ * sa = source alpha
+ * dc = destination color
+ * da = destination alpha
+ * sf = source blend function
+ * df = destination blend function
+ * cf[x] = color factor for blend function x
+ * af[x] = alpha factor for blend function x
+ */
+ DSBF_UNKNOWN = 0, /* */
+ DSBF_ZERO = 1, /* cf: 0 af: 0 */
+ DSBF_ONE = 2, /* cf: 1 af: 1 */
+ DSBF_SRCCOLOR = 3, /* cf: sc af: sa */
+ DSBF_INVSRCCOLOR = 4, /* cf: 1-sc af: 1-sa */
+ DSBF_SRCALPHA = 5, /* cf: sa af: sa */
+ DSBF_INVSRCALPHA = 6, /* cf: 1-sa af: 1-sa */
+ DSBF_DESTALPHA = 7, /* cf: da af: da */
+ DSBF_INVDESTALPHA = 8, /* cf: 1-da af: 1-da */
+ DSBF_DESTCOLOR = 9, /* cf: dc af: da */
+ DSBF_INVDESTCOLOR = 10, /* cf: 1-dc af: 1-da */
+ DSBF_SRCALPHASAT = 11, /* cf: min(sa, 1-da) af: 1 */
+} DFBSurfaceBlendFunction;
+
+/*
+ * Transformed vertex of a textured triangle.
+ */
+typedef struct {
+ float x; /* Destination X coordinate (in pixels) */
+ float y; /* Destination Y coordinate (in pixels) */
+ float z; /* Z coordinate */
+ float w; /* W coordinate */
+
+ float s; /* Texture S coordinate */
+ float t; /* Texture T coordinate */
+} DFBVertex;
+
+/*
+ * Way of building triangles from the list of vertices.
+ */
+typedef enum {
+ DTTF_LIST, /* 0/1/2 3/4/5 6/7/8 ... */
+ DTTF_STRIP, /* 0/1/2 1/2/3 2/3/4 ... */
+ DTTF_FAN /* 0/1/2 0/2/3 0/3/4 ... */
+} DFBTriangleFormation;
+
+/*
+ * Flags controlling surface masks set via IDirectFBSurface::SetSourceMask().
+ */
+typedef enum {
+ DSMF_NONE = 0x00000000, /* None of these. */
+
+ DSMF_STENCIL = 0x00000001, /* Take <b>x</b> and <b>y</b> as fixed start coordinates in the mask. */
+
+ DSMF_ALL = 0x00000001, /* All of these. */
+} DFBSurfaceMaskFlags;
+
+/********************
+ * IDirectFBSurface *
+ ********************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBSurface,
+
+ /** Retrieving information **/
+
+ /*
+ * Return the capabilities of this surface.
+ */
+ DFBResult (*GetCapabilities) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceCapabilities *ret_caps
+ );
+
+ /*
+ * Get the surface's position in pixels.
+ */
+ DFBResult (*GetPosition) (
+ IDirectFBSurface *thiz,
+ int *ret_x,
+ int *ret_y
+ );
+
+ /*
+ * Get the surface's width and height in pixels.
+ */
+ DFBResult (*GetSize) (
+ IDirectFBSurface *thiz,
+ int *ret_width,
+ int *ret_height
+ );
+
+ /*
+ * Created sub surfaces might be clipped by their parents,
+ * this function returns the resulting rectangle relative
+ * to this surface.
+ *
+ * For non sub surfaces this function returns
+ * { 0, 0, width, height }.
+ */
+ DFBResult (*GetVisibleRectangle) (
+ IDirectFBSurface *thiz,
+ DFBRectangle *ret_rect
+ );
+
+ /*
+ * Get the current pixel format.
+ */
+ DFBResult (*GetPixelFormat) (
+ IDirectFBSurface *thiz,
+ DFBSurfacePixelFormat *ret_format
+ );
+
+ /*
+ * Get a mask of drawing functions that are hardware
+ * accelerated with the current settings.
+ *
+ * If a source surface is specified the mask will also
+ * contain accelerated blitting functions. Note that there
+ * is no guarantee that these will actually be accelerated
+ * since the surface storage (video/system) is examined only
+ * when something actually gets drawn or blitted.
+ */
+ DFBResult (*GetAccelerationMask) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ DFBAccelerationMask *ret_mask
+ );
+
+
+ /** Palette & Alpha Ramp **/
+
+ /*
+ * Get access to the surface's palette.
+ *
+ * Returns an interface that can be used to gain
+ * read and/or write access to the surface's palette.
+ */
+ DFBResult (*GetPalette) (
+ IDirectFBSurface *thiz,
+ IDirectFBPalette **ret_interface
+ );
+
+ /*
+ * Change the surface's palette.
+ */
+ DFBResult (*SetPalette) (
+ IDirectFBSurface *thiz,
+ IDirectFBPalette *palette
+ );
+
+ /*
+ * Set the alpha ramp for formats with one or two alpha bits.
+ *
+ * Either all four values or the first and the
+ * last one are used, depending on the format.
+ * Default values are: 0x00, 0x55, 0xaa, 0xff.
+ */
+ DFBResult (*SetAlphaRamp) (
+ IDirectFBSurface *thiz,
+ u8 a0,
+ u8 a1,
+ u8 a2,
+ u8 a3
+ );
+
+
+ /** Buffer operations **/
+
+ /*
+ * Lock the surface for the access type specified.
+ *
+ * Returns a data pointer and the line pitch of it.<br>
+ * <br>
+ * <b>Note:</b> If the surface is double/triple buffered and
+ * the DSLF_WRITE flag is specified, the pointer is to the back
+ * buffer. In all other cases, the pointer is to the front
+ * buffer.
+ */
+ DFBResult (*Lock) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceLockFlags flags,
+ void **ret_ptr,
+ int *ret_pitch
+ );
+
+ /*
+ * Returns the framebuffer offset of a locked surface.
+ *
+ * The surface must exist in video memory.
+ */
+ DFBResult (*GetFramebufferOffset) (
+ IDirectFBSurface *thiz,
+ int *offset
+ );
+
+ /*
+ * Unlock the surface after direct access.
+ */
+ DFBResult (*Unlock) (
+ IDirectFBSurface *thiz
+ );
+
+ /*
+ * Flip/Update surface buffers.
+ *
+ * If no region is specified the whole surface is flipped,
+ * otherwise blitting is used to update the region.
+ * If surface capabilities don't include DSCAPS_FLIPPING,
+ * this method has the effect to make visible changes
+ * made to the surface contents.
+ */
+ DFBResult (*Flip) (
+ IDirectFBSurface *thiz,
+ const DFBRegion *region,
+ DFBSurfaceFlipFlags flags
+ );
+
+ /*
+ * Set the active field.
+ *
+ * Interlaced surfaces consist of two fields. Software driven
+ * deinterlacing uses this method to manually switch the field
+ * that is displayed, e.g. scaled up vertically by two.
+ */
+ DFBResult (*SetField) (
+ IDirectFBSurface *thiz,
+ int field
+ );
+
+ /*
+ * Clear the surface and its depth buffer if existent.
+ *
+ * Fills the whole (sub) surface with the specified color while ignoring
+ * drawing flags and color of the current state, but limited to the current clip.
+ *
+ * As with all drawing and blitting functions the backbuffer is written to.
+ * If you are initializing a double buffered surface you may want to clear both
+ * buffers by doing a Clear-Flip-Clear sequence.
+ */
+ DFBResult (*Clear) (
+ IDirectFBSurface *thiz,
+ u8 r,
+ u8 g,
+ u8 b,
+ u8 a
+ );
+
+
+ /** Drawing/blitting control **/
+
+ /*
+ * Set the clipping region used to limit the area for
+ * drawing, blitting and text functions.
+ *
+ * If no region is specified (NULL passed) the clip is set
+ * to the surface extents (initial clip).
+ */
+ DFBResult (*SetClip) (
+ IDirectFBSurface *thiz,
+ const DFBRegion *clip
+ );
+
+ /*
+ * Get the clipping region used to limit the area for
+ * drawing, blitting and text functions.
+ */
+ DFBResult (*GetClip) (
+ IDirectFBSurface *thiz,
+ DFBRegion *ret_clip
+ );
+
+ /*
+ * Set the color used for drawing/text functions or
+ * alpha/color modulation (blitting functions).
+ *
+ * If you are not using the alpha value it should be set to
+ * 0xff to ensure visibility when the code is ported to or
+ * used for surfaces with an alpha channel.
+ *
+ * This method should be avoided for surfaces with an indexed
+ * pixelformat, e.g. DSPF_LUT8, otherwise an expensive search
+ * in the color/alpha lookup table occurs.
+ */
+ DFBResult (*SetColor) (
+ IDirectFBSurface *thiz,
+ u8 r,
+ u8 g,
+ u8 b,
+ u8 a
+ );
+
+ /*
+ * Set the color like with SetColor() but using
+ * an index to the color/alpha lookup table.
+ *
+ * This method is only supported by surfaces with an
+ * indexed pixelformat, e.g. DSPF_LUT8. For these formats
+ * this method should be used instead of SetColor().
+ */
+ DFBResult (*SetColorIndex) (
+ IDirectFBSurface *thiz,
+ unsigned int index
+ );
+
+ /*
+ * Set the blend function that applies to the source.
+ */
+ DFBResult (*SetSrcBlendFunction) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceBlendFunction function
+ );
+
+ /*
+ * Set the blend function that applies to the destination.
+ */
+ DFBResult (*SetDstBlendFunction) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceBlendFunction function
+ );
+
+ /*
+ * Set the source and destination blend function by
+ * specifying a Porter/Duff rule.
+ */
+ DFBResult (*SetPorterDuff) (
+ IDirectFBSurface *thiz,
+ DFBSurfacePorterDuffRule rule
+ );
+
+ /*
+ * Set the source color key, i.e. the color that is excluded
+ * when blitting FROM this surface TO another that has
+ * source color keying enabled.
+ */
+ DFBResult (*SetSrcColorKey) (
+ IDirectFBSurface *thiz,
+ u8 r,
+ u8 g,
+ u8 b
+ );
+
+ /*
+ * Set the source color key like with SetSrcColorKey() but using
+ * an index to the color/alpha lookup table.
+ *
+ * This method is only supported by surfaces with an
+ * indexed pixelformat, e.g. DSPF_LUT8. For these formats
+ * this method should be used instead of SetSrcColorKey().
+ */
+ DFBResult (*SetSrcColorKeyIndex) (
+ IDirectFBSurface *thiz,
+ unsigned int index
+ );
+
+ /*
+ * Set the destination color key, i.e. the only color that
+ * gets overwritten by drawing and blitting to this surface
+ * when destination color keying is enabled.
+ */
+ DFBResult (*SetDstColorKey) (
+ IDirectFBSurface *thiz,
+ u8 r,
+ u8 g,
+ u8 b
+ );
+
+ /*
+ * Set the destination color key like with SetDstColorKey() but using
+ * an index to the color/alpha lookup table.
+ *
+ * This method is only supported by surfaces with an
+ * indexed pixelformat, e.g. DSPF_LUT8. For these formats
+ * this method should be used instead of SetDstColorKey().
+ */
+ DFBResult (*SetDstColorKeyIndex) (
+ IDirectFBSurface *thiz,
+ unsigned int index
+ );
+
+
+
+ /** Blitting functions **/
+
+ /*
+ * Set the flags for all subsequent blitting commands.
+ */
+ DFBResult (*SetBlittingFlags) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceBlittingFlags flags
+ );
+
+ /*
+ * Blit an area from the source to this surface.
+ *
+ * Pass a NULL rectangle to use the whole source surface.
+ * Source may be the same surface.
+ */
+ DFBResult (*Blit) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rect,
+ int x,
+ int y
+ );
+
+ /*
+ * Blit an area from the source tiled to this surface.
+ *
+ * Pass a NULL rectangle to use the whole source surface.
+ * Source may be the same surface.
+ */
+ DFBResult (*TileBlit) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rect,
+ int x,
+ int y
+ );
+
+ /*
+ * Blit a bunch of areas at once.
+ *
+ * Source may be the same surface.
+ */
+ DFBResult (*BatchBlit) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rects,
+ const DFBPoint *dest_points,
+ int num
+ );
+
+ /*
+ * Blit an area scaled from the source to the destination
+ * rectangle.
+ *
+ * Pass a NULL rectangle to use the whole source surface.
+ */
+ DFBResult (*StretchBlit) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rect,
+ const DFBRectangle *destination_rect
+ );
+
+ /*
+ * Preliminary texture mapping support.
+ *
+ * Maps a <b>texture</b> onto triangles being built
+ * from <b>vertices</b> according to the chosen <b>formation</b>.
+ *
+ * Optional <b>indices</b> can be used to avoid rearrangement of vertex lists,
+ * otherwise the vertex list is processed consecutively, i.e. as if <b>indices</b>
+ * are ascending numbers starting at zero.
+ *
+ * Either the number of <b>indices</b> (if non NULL) or the number of <b>vertices</b> is
+ * specified by <b>num</b> and has to be three at least. If the chosen <b>formation</b>
+ * is DTTF_LIST it also has to be a multiple of three.
+ */
+ DFBResult (*TextureTriangles) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *texture,
+ const DFBVertex *vertices,
+ const int *indices,
+ int num,
+ DFBTriangleFormation formation
+ );
+
+
+ /** Drawing functions **/
+
+ /*
+ * Set the flags for all subsequent drawing commands.
+ */
+ DFBResult (*SetDrawingFlags) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceDrawingFlags flags
+ );
+
+ /*
+ * Fill the specified rectangle with the given color
+ * following the specified flags.
+ */
+ DFBResult (*FillRectangle) (
+ IDirectFBSurface *thiz,
+ int x,
+ int y,
+ int w,
+ int h
+ );
+
+ /*
+ * Draw an outline of the specified rectangle with the given
+ * color following the specified flags.
+ */
+ DFBResult (*DrawRectangle) (
+ IDirectFBSurface *thiz,
+ int x,
+ int y,
+ int w,
+ int h
+ );
+
+ /*
+ * Draw a line from one point to the other with the given color
+ * following the drawing flags.
+ */
+ DFBResult (*DrawLine) (
+ IDirectFBSurface *thiz,
+ int x1,
+ int y1,
+ int x2,
+ int y2
+ );
+
+ /*
+ * Draw 'num_lines' lines with the given color following the
+ * drawing flags. Each line specified by a DFBRegion.
+ */
+ DFBResult (*DrawLines) (
+ IDirectFBSurface *thiz,
+ const DFBRegion *lines,
+ unsigned int num_lines
+ );
+
+ /*
+ * Fill a non-textured triangle.
+ */
+ DFBResult (*FillTriangle) (
+ IDirectFBSurface *thiz,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int x3,
+ int y3
+ );
+
+ /*
+ * Fill a bunch of rectangles with a single call.
+ *
+ * Fill <b>num</b> rectangles with the current color following the
+ * drawing flags. Each rectangle specified by a DFBRectangle.
+ */
+ DFBResult (*FillRectangles) (
+ IDirectFBSurface *thiz,
+ const DFBRectangle *rects,
+ unsigned int num
+ );
+
+ /*
+ * Fill spans specified by x and width.
+ *
+ * Fill <b>num</b> spans with the given color following the
+ * drawing flags. Each span is specified by a DFBSpan.
+ */
+ DFBResult (*FillSpans) (
+ IDirectFBSurface *thiz,
+ int y,
+ const DFBSpan *spans,
+ unsigned int num
+ );
+
+ /*
+ * Fill a bunch of triangles with a single call.
+ *
+ * Fill <b>num</b> triangles with the current color following the
+ * drawing flags. Each triangle specified by a DFBTriangle.
+ */
+ DFBResult (*FillTriangles) (
+ IDirectFBSurface *thiz,
+ const DFBTriangle *tris,
+ unsigned int num
+ );
+
+
+ /** Text functions **/
+
+ /*
+ * Set the font used by DrawString() and DrawGlyph().
+ * You can pass NULL here to unset the font.
+ */
+ DFBResult (*SetFont) (
+ IDirectFBSurface *thiz,
+ IDirectFBFont *font
+ );
+
+ /*
+ * Get the font associated with a surface.
+ *
+ * This function increases the font's reference count.
+ */
+ DFBResult (*GetFont) (
+ IDirectFBSurface *thiz,
+ IDirectFBFont **ret_font
+ );
+
+ /*
+ * Draw a string at the specified position with the
+ * given color following the specified flags.
+ *
+ * Bytes specifies the number of bytes to take from the
+ * string or -1 for the complete NULL-terminated string. You
+ * need to set a font using the SetFont() method before
+ * calling this function.
+ */
+ DFBResult (*DrawString) (
+ IDirectFBSurface *thiz,
+ const char *text,
+ int bytes,
+ int x,
+ int y,
+ DFBSurfaceTextFlags flags
+ );
+
+ /*
+ * Draw a single glyph specified by its character code at the
+ * specified position with the given color following the
+ * specified flags.
+ *
+ * If font was loaded with the DFFA_NOCHARMAP flag, index specifies
+ * the raw glyph index in the font.
+ *
+ * You need to set a font using the SetFont() method before
+ * calling this function.
+ */
+ DFBResult (*DrawGlyph) (
+ IDirectFBSurface *thiz,
+ unsigned int character,
+ int x,
+ int y,
+ DFBSurfaceTextFlags flags
+ );
+
+ /*
+ * Change the encoding used for text rendering.
+ */
+ DFBResult (*SetEncoding) (
+ IDirectFBSurface *thiz,
+ DFBTextEncodingID encoding
+ );
+
+
+ /** Lightweight helpers **/
+
+ /*
+ * Get an interface to a sub area of this surface.
+ *
+ * No image data is duplicated, this is a clipped graphics
+ * within the original surface. This is very helpful for
+ * lightweight components in a GUI toolkit. The new
+ * surface's state (color, drawingflags, etc.) is
+ * independent from this one. So it's a handy graphics
+ * context. If no rectangle is specified, the whole surface
+ * (or a part if this surface is a subsurface itself) is
+ * represented by the new one.
+ */
+ DFBResult (*GetSubSurface) (
+ IDirectFBSurface *thiz,
+ const DFBRectangle *rect,
+ IDirectFBSurface **ret_interface
+ );
+
+
+ /** OpenGL **/
+
+ /*
+ * Get a unique OpenGL context for this surface.
+ */
+ DFBResult (*GetGL) (
+ IDirectFBSurface *thiz,
+ IDirectFBGL **ret_interface
+ );
+
+
+ /** Debug **/
+
+ /*
+ * Dump the contents of the surface to one or two files.
+ *
+ * Creates a PPM file containing the RGB data and a PGM file with
+ * the alpha data if present.
+ *
+ * The complete filenames will be
+ * <b>directory</b>/<b>prefix</b>_<i>####</i>.ppm for RGB and
+ * <b>directory</b>/<b>prefix</b>_<i>####</i>.pgm for the alpha channel
+ * if present. Example: "/directory/prefix_0000.ppm". No existing files
+ * will be overwritten.
+ */
+ DFBResult (*Dump) (
+ IDirectFBSurface *thiz,
+ const char *directory,
+ const char *prefix
+ );
+
+ /*
+ * Disable hardware acceleration.
+ *
+ * If any function in <b>mask</b> is set, acceleration will not be used for it.<br/>
+ * Default is DFXL_NONE.
+ */
+ DFBResult (*DisableAcceleration) (
+ IDirectFBSurface *thiz,
+ DFBAccelerationMask mask
+ );
+
+
+ /** Resources **/
+
+ /*
+ * Release possible reference to source surface.
+ *
+ * For performance reasons the last surface that has been used for Blit() and others stays
+ * attached to the state of the destination surface to save the overhead of reprogramming
+ * the same values each time.
+ *
+ * That leads to the last source being still around regardless of it being released
+ * via its own interface. The worst case is generation of thumbnails using StretchBlit()
+ * from a huge surface to a small one. The small thumbnail surface keeps the big one alive,
+ * because no other blitting will be done to the small surface afterwards.
+ *
+ * To solve this, here's the method applications should use in such a case.
+ */
+ DFBResult (*ReleaseSource) (
+ IDirectFBSurface *thiz
+ );
+
+
+ /** Blitting control **/
+
+ /*
+ * Set index translation table.
+ *
+ * Set the translation table used for fast indexed to indexed
+ * pixel format conversion.
+ *
+ * A negative index means that the pixel will not be written.
+ *
+ * Undefined indices will be treated like negative ones.
+ */
+ DFBResult (*SetIndexTranslation) (
+ IDirectFBSurface *thiz,
+ const int *indices,
+ int num_indices
+ );
+
+
+ /** Rendering **/
+
+ /*
+ * Set options affecting the output of drawing and blitting operations.
+ *
+ * None of these is mandatory and therefore unsupported flags will not
+ * cause a software fallback.
+ */
+ DFBResult (*SetRenderOptions) (
+ IDirectFBSurface *thiz,
+ DFBSurfaceRenderOptions options
+ );
+
+
+ /** Drawing/blitting control **/
+
+ /*
+ * Set the transformation matrix.
+ *
+ * Enable usage of this matrix by setting DSRO_MATRIX via IDirectFBSurface::SetRenderOptions().
+ *
+ * The matrix consists of 3x3 fixed point 16.16 values.
+ * The order in the array is from left to right and from top to bottom.
+ *
+ * All drawing and blitting will be transformed:
+ *
+ * <pre>
+ * X' = (X * v0 + Y * v1 + v2) / (X * v6 + Y * v7 + v8)
+ * Y' = (X * v3 + Y * v4 + v5) / (X * v6 + Y * v7 + v8)
+ * </pre>
+ */
+ DFBResult (*SetMatrix) (
+ IDirectFBSurface *thiz,
+ const s32 *matrix
+ );
+
+ /*
+ * Set the surface to be used as a mask for blitting.
+ *
+ * The <b>mask</b> applies when DSBLIT_SRC_MASK_ALPHA or DSBLIT_SRC_MASK_COLOR is used.
+ *
+ * Depending on the <b>flags</b> reading either starts at a fixed location in the mask with
+ * absolute <b>x</b> and <b>y</b>, or at the same location as in the source, with <b>x</b>
+ * and <b>y</b> used as an offset.
+ *
+ * <i>Example with DSMF_STENCIL:</i>
+ * <pre>
+ * Blit from <b>19, 6</b> in the source
+ * and <b> 0, 0</b> in the mask (<b>x = 0, y = 0</b>)
+ * or <b>-5, 17</b> (<b>x = -5, y = 17</b>)
+ * or <b>23, 42</b> (<b>x = 23, y = 42</b>)
+ * </pre>
+ *
+ * <i>Example without:</i>
+ * <pre>
+ * Blit from <b>19, 6</b> in the source
+ * and <b>19, 6</b> in the mask (<b>x = 0, y = 0</b>)
+ * or <b>14, 23</b> (<b>x = -5, y = 17</b>)
+ * or <b>42, 48</b> (<b>x = 23, y = 42</b>)
+ * </pre>
+ *
+ * See also IDirectFBSurface::SetBlittingFlags().
+ */
+ DFBResult (*SetSourceMask) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *mask,
+ int x,
+ int y,
+ DFBSurfaceMaskFlags flags
+ );
+
+
+ /** Lightweight helpers **/
+
+ /*
+ * Make this a sub surface or adjust the rectangle of this sub surface.
+ */
+ DFBResult (*MakeSubSurface) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *from,
+ const DFBRectangle *rect
+ );
+
+
+ /** Direct Write/Read **/
+
+ /*
+ * Write to the surface without the need for (Un)Lock.
+ *
+ * <b>rect</b> defines the area inside the surface.
+ * <br><b>ptr</b> and <b>pitch</b> specify the source.
+ * <br>The format of the surface and the source data must be the same.
+ */
+ DFBResult (*Write) (
+ IDirectFBSurface *thiz,
+ const DFBRectangle *rect,
+ const void *ptr,
+ int pitch
+ );
+
+ /*
+ * Read from the surface without the need for (Un)Lock.
+ *
+ * <b>rect</b> defines the area inside the surface to be read.
+ * <br><b>ptr</b> and <b>pitch</b> specify the destination.
+ * <br>The destination data will have the same format as the surface.
+ */
+ DFBResult (*Read) (
+ IDirectFBSurface *thiz,
+ const DFBRectangle *rect,
+ void *ptr,
+ int pitch
+ );
+
+
+ /** Drawing/blitting control **/
+
+ /*
+ * Sets color values used for drawing/text functions or
+ * alpha/color modulation (blitting functions).
+ */
+ DFBResult (*SetColors) (
+ IDirectFBSurface *thiz,
+ const DFBColorID *ids,
+ const DFBColor *colors,
+ unsigned int num
+ );
+)
+
+
+/********************
+ * IDirectFBPalette *
+ ********************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBPalette,
+
+ /** Retrieving information **/
+
+ /*
+ * Return the capabilities of this palette.
+ */
+ DFBResult (*GetCapabilities) (
+ IDirectFBPalette *thiz,
+ DFBPaletteCapabilities *ret_caps
+ );
+
+ /*
+ * Get the number of entries in the palette.
+ */
+ DFBResult (*GetSize) (
+ IDirectFBPalette *thiz,
+ unsigned int *ret_size
+ );
+
+
+ /** Palette entries **/
+
+ /*
+ * Write entries to the palette.
+ *
+ * Writes the specified number of entries to the palette at the
+ * specified offset.
+ */
+ DFBResult (*SetEntries) (
+ IDirectFBPalette *thiz,
+ const DFBColor *entries,
+ unsigned int num_entries,
+ unsigned int offset
+ );
+
+ /*
+ * Read entries from the palette.
+ *
+ * Reads the specified number of entries from the palette at the
+ * specified offset.
+ */
+ DFBResult (*GetEntries) (
+ IDirectFBPalette *thiz,
+ DFBColor *ret_entries,
+ unsigned int num_entries,
+ unsigned int offset
+ );
+
+ /*
+ * Find the best matching entry.
+ *
+ * Searches the map for an entry which best matches the specified color.
+ */
+ DFBResult (*FindBestMatch) (
+ IDirectFBPalette *thiz,
+ u8 r,
+ u8 g,
+ u8 b,
+ u8 a,
+ unsigned int *ret_index
+ );
+
+
+ /** Clone **/
+
+ /*
+ * Create a copy of the palette.
+ */
+ DFBResult (*CreateCopy) (
+ IDirectFBPalette *thiz,
+ IDirectFBPalette **ret_interface
+ );
+
+
+ /** YUV Palette **/
+
+ /*
+ * Write entries to the palette.
+ *
+ * Writes the specified number of entries to the palette at the
+ * specified offset.
+ */
+ DFBResult (*SetEntriesYUV) (
+ IDirectFBPalette *thiz,
+ const DFBColorYUV *entries,
+ unsigned int num_entries,
+ unsigned int offset
+ );
+
+ /*
+ * Read entries from the palette.
+ *
+ * Reads the specified number of entries from the palette at the
+ * specified offset.
+ */
+ DFBResult (*GetEntriesYUV) (
+ IDirectFBPalette *thiz,
+ DFBColorYUV *ret_entries,
+ unsigned int num_entries,
+ unsigned int offset
+ );
+
+ /*
+ * Find the best matching entry.
+ *
+ * Searches the map for an entry which best matches the specified color.
+ */
+ DFBResult (*FindBestMatchYUV) (
+ IDirectFBPalette *thiz,
+ u8 y,
+ u8 u,
+ u8 v,
+ u8 a,
+ unsigned int *ret_index
+ );
+)
+
+
+/*
+ * Specifies whether a key is currently down.
+ */
+typedef enum {
+ DIKS_UP = 0x00000000, /* key is not pressed */
+ DIKS_DOWN = 0x00000001 /* key is pressed */
+} DFBInputDeviceKeyState;
+
+/*
+ * Specifies whether a button is currently pressed.
+ */
+typedef enum {
+ DIBS_UP = 0x00000000, /* button is not pressed */
+ DIBS_DOWN = 0x00000001 /* button is pressed */
+} DFBInputDeviceButtonState;
+
+/*
+ * Flags specifying which buttons are currently down.
+ */
+typedef enum {
+ DIBM_LEFT = 0x00000001, /* left mouse button */
+ DIBM_RIGHT = 0x00000002, /* right mouse button */
+ DIBM_MIDDLE = 0x00000004 /* middle mouse button */
+} DFBInputDeviceButtonMask;
+
+/*
+ * Flags specifying which modifiers are currently pressed.
+ */
+typedef enum {
+ DIMM_SHIFT = (1 << DIMKI_SHIFT), /* Shift key is pressed */
+ DIMM_CONTROL = (1 << DIMKI_CONTROL), /* Control key is pressed */
+ DIMM_ALT = (1 << DIMKI_ALT), /* Alt key is pressed */
+ DIMM_ALTGR = (1 << DIMKI_ALTGR), /* AltGr key is pressed */
+ DIMM_META = (1 << DIMKI_META), /* Meta key is pressed */
+ DIMM_SUPER = (1 << DIMKI_SUPER), /* Super key is pressed */
+ DIMM_HYPER = (1 << DIMKI_HYPER) /* Hyper key is pressed */
+} DFBInputDeviceModifierMask;
+
+
+/************************
+ * IDirectFBInputDevice *
+ ************************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBInputDevice,
+
+ /** Retrieving information **/
+
+ /*
+ * Get the unique device ID.
+ */
+ DFBResult (*GetID) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceID *ret_device_id
+ );
+
+ /*
+ * Get a description of this device, i.e. the capabilities.
+ */
+ DFBResult (*GetDescription) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceDescription *ret_desc
+ );
+
+
+ /** Key mapping **/
+
+ /*
+ * Fetch one entry from the keymap for a specific hardware keycode.
+ */
+ DFBResult (*GetKeymapEntry) (
+ IDirectFBInputDevice *thiz,
+ int keycode,
+ DFBInputDeviceKeymapEntry *ret_entry
+ );
+
+ /*
+ * Set one entry of the keymap to the specified entry.
+ * Each entry has 4 modifier combinations for going from key to symbol.
+ */
+ DFBResult (*SetKeymapEntry) (
+ IDirectFBInputDevice *thiz,
+ int keycode,
+ DFBInputDeviceKeymapEntry *entry
+ );
+
+ /*
+ * Load a keymap from the specified file.
+ * All specified keys will overwrite the current keymap.
+ * On return of an error, the keymap is in an unspecified state.
+ * the file must be ASCII containing lines:
+ * keycode <hw code> = <key id> = <symbol> .... (up to 4 symbols)
+ * Modifier-key-sensitive keys can be framed between
+ * capslock: .... :capslock or numlock: ... :numlock.
+ */
+ DFBResult (*LoadKeymap) (
+ IDirectFBInputDevice *thiz,
+ char *filename
+ );
+
+ /** Event buffers **/
+
+ /*
+ * Create an event buffer for this device and attach it.
+ */
+ DFBResult (*CreateEventBuffer) (
+ IDirectFBInputDevice *thiz,
+ IDirectFBEventBuffer **ret_buffer
+ );
+
+ /*
+ * Attach an existing event buffer to this device.
+ *
+ * NOTE: Attaching multiple times generates multiple events.
+ *
+ */
+ DFBResult (*AttachEventBuffer) (
+ IDirectFBInputDevice *thiz,
+ IDirectFBEventBuffer *buffer
+ );
+
+ /*
+ * Detach an event buffer from this device.
+ */
+ DFBResult (*DetachEventBuffer) (
+ IDirectFBInputDevice *thiz,
+ IDirectFBEventBuffer *buffer
+ );
+
+
+ /** General state queries **/
+
+ /*
+ * Get the current state of one key.
+ */
+ DFBResult (*GetKeyState) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceKeyIdentifier key_id,
+ DFBInputDeviceKeyState *ret_state
+ );
+
+ /*
+ * Get the current modifier mask.
+ */
+ DFBResult (*GetModifiers) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceModifierMask *ret_modifiers
+ );
+
+ /*
+ * Get the current state of the key locks.
+ */
+ DFBResult (*GetLockState) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceLockState *ret_locks
+ );
+
+ /*
+ * Get a mask of currently pressed buttons.
+ *
+ * The first button corrensponds to the right most bit.
+ */
+ DFBResult (*GetButtons) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceButtonMask *ret_buttons
+ );
+
+ /*
+ * Get the state of a button.
+ */
+ DFBResult (*GetButtonState) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceButtonIdentifier button,
+ DFBInputDeviceButtonState *ret_state
+ );
+
+ /*
+ * Get the current value of the specified axis.
+ */
+ DFBResult (*GetAxis) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceAxisIdentifier axis,
+ int *ret_pos
+ );
+
+
+ /** Specialized queries **/
+
+ /*
+ * Utility function combining two calls to GetAxis().
+ *
+ * You may leave one of the x/y arguments NULL.
+ */
+ DFBResult (*GetXY) (
+ IDirectFBInputDevice *thiz,
+ int *ret_x,
+ int *ret_y
+ );
+
+
+ /** Configuration */
+
+ DFBResult (*SetSensitivity) (
+ IDirectFBInputDevice *thiz,
+ int sensitivity
+ );
+
+
+ /** State */
+
+ DFBResult (*GetState) (
+ IDirectFBInputDevice *thiz,
+ DFBInputDeviceState *state
+ );
+)
+
+
+/*
+ * Event class.
+ */
+typedef enum {
+ DFEC_NONE = 0x00, /* none of these */
+ DFEC_INPUT = 0x01, /* raw input event */
+ DFEC_WINDOW = 0x02, /* windowing event */
+ DFEC_USER = 0x03, /* custom event for the user of this library */
+ DFEC_UNIVERSAL = 0x04, /* universal event for custom usage with variable size */
+ DFEC_VIDEOPROVIDER = 0x05 /* video provider event */
+} DFBEventClass;
+
+/*
+ * The type of an input event.
+ */
+typedef enum {
+ DIET_UNKNOWN = 0, /* unknown event */
+ DIET_KEYPRESS, /* a key is been pressed */
+ DIET_KEYRELEASE, /* a key is been released */
+ DIET_BUTTONPRESS, /* a (mouse) button is been pressed */
+ DIET_BUTTONRELEASE, /* a (mouse) button is been released */
+ DIET_AXISMOTION /* mouse/joystick movement */
+} DFBInputEventType;
+
+/*
+ * Flags defining which additional (optional) event fields are valid.
+ */
+typedef enum {
+ DIEF_NONE = 0x0000, /* no additional fields */
+ DIEF_TIMESTAMP = 0x0001, /* timestamp is valid */
+ DIEF_AXISABS = 0x0002, /* axis and axisabs are valid */
+ DIEF_AXISREL = 0x0004, /* axis and axisrel are valid */
+
+ DIEF_KEYCODE = 0x0008, /* used internally by the input core,
+ always set at application level */
+ DIEF_KEYID = 0x0010, /* used internally by the input core,
+ always set at application level */
+ DIEF_KEYSYMBOL = 0x0020, /* used internally by the input core,
+ always set at application level */
+ DIEF_MODIFIERS = 0x0040, /* used internally by the input core,
+ always set at application level */
+ DIEF_LOCKS = 0x0080, /* used internally by the input core,
+ always set at application level */
+ DIEF_BUTTONS = 0x0100, /* used internally by the input core,
+ always set at application level */
+ DIEF_GLOBAL = 0x0200, /* Only for event buffers creates by
+ IDirectFB::CreateInputEventBuffer()
+ with global events enabled.
+ Indicates that the event would have been
+ filtered if the buffer hadn't been
+ global. */
+ DIEF_REPEAT = 0x0400, /* repeated event, e.g. key or button press */
+ DIEF_FOLLOW = 0x0800, /* another event will follow immediately, e.g. x/y axis */
+
+ DIEF_MIN = 0x1000, /* minimum value is set, e.g. for absolute axis motion */
+ DIEF_MAX = 0x2000, /* maximum value is set, e.g. for absolute axis motion */
+} DFBInputEventFlags;
+
+/*
+ * An input event, item of an input buffer.
+ */
+typedef struct {
+ DFBEventClass clazz; /* clazz of event */
+
+ DFBInputEventType type; /* type of event */
+ DFBInputDeviceID device_id; /* source of event */
+ DFBInputEventFlags flags; /* which optional fields
+ are valid? */
+
+ /* additionally (check flags) */
+ struct timeval timestamp; /* time of event creation */
+
+/* DIET_KEYPRESS, DIET_KEYRELEASE */
+ int key_code; /* hardware keycode, no
+ mapping, -1 if device
+ doesn't differentiate
+ between several keys */
+ DFBInputDeviceKeyIdentifier key_id; /* basic mapping,
+ modifier independent */
+ DFBInputDeviceKeySymbol key_symbol; /* advanced mapping,
+ unicode compatible,
+ modifier dependent */
+ /* additionally (check flags) */
+ DFBInputDeviceModifierMask modifiers; /* pressed modifiers
+ (optional) */
+ DFBInputDeviceLockState locks; /* active locks
+ (optional) */
+
+/* DIET_BUTTONPRESS, DIET_BUTTONRELEASE */
+ DFBInputDeviceButtonIdentifier button; /* in case of a button
+ event */
+ DFBInputDeviceButtonMask buttons; /* mask of currently
+ pressed buttons */
+
+/* DIET_AXISMOTION */
+ DFBInputDeviceAxisIdentifier axis; /* in case of an axis
+ event */
+ /* one of these two (check flags) */
+ int axisabs; /* absolute mouse/
+ joystick coordinate */
+ int axisrel; /* relative mouse/
+ joystick movement */
+
+ /* general information */
+ int min; /* minimum possible value */
+ int max; /* maximum possible value */
+} DFBInputEvent;
+
+/*
+ * Window Event Types - can also be used as flags for event filters.
+ */
+typedef enum {
+ DWET_NONE = 0x00000000,
+
+ DWET_POSITION = 0x00000001, /* window has been moved by
+ window manager or the
+ application itself */
+ DWET_SIZE = 0x00000002, /* window has been resized
+ by window manager or the
+ application itself */
+ DWET_CLOSE = 0x00000004, /* closing this window has been
+ requested only */
+ DWET_DESTROYED = 0x00000008, /* window got destroyed by global
+ deinitialization function or
+ the application itself */
+ DWET_GOTFOCUS = 0x00000010, /* window got focus */
+ DWET_LOSTFOCUS = 0x00000020, /* window lost focus */
+
+ DWET_KEYDOWN = 0x00000100, /* a key has gone down while
+ window has focus */
+ DWET_KEYUP = 0x00000200, /* a key has gone up while
+ window has focus */
+
+ DWET_BUTTONDOWN = 0x00010000, /* mouse button went down in
+ the window */
+ DWET_BUTTONUP = 0x00020000, /* mouse button went up in
+ the window */
+ DWET_MOTION = 0x00040000, /* mouse cursor changed its
+ position in window */
+ DWET_ENTER = 0x00080000, /* mouse cursor entered
+ the window */
+ DWET_LEAVE = 0x00100000, /* mouse cursor left the window */
+
+ DWET_WHEEL = 0x00200000, /* mouse wheel was moved while
+ window has focus */
+
+ DWET_POSITION_SIZE = DWET_POSITION | DWET_SIZE,/* initially sent to
+ window when it's
+ created */
+
+ DWET_UPDATE = 0x10000000,
+
+ DWET_ALL = 0x103F033F /* all event types */
+} DFBWindowEventType;
+
+/*
+ * Flags for a window event.
+ */
+typedef enum {
+ DWEF_NONE = 0x00000000, /* none of these */
+
+ DWEF_RETURNED = 0x00000001, /* This is a returned event, e.g. unconsumed key. */
+ DWEF_RELATIVE = 0x00000002, /* This is a relative motion event (confined mode) */
+ DWEF_REPEAT = 0x00000004, /* This is a repeated event (e.g. key repeat) */
+
+ DWEF_ALL = 0x00000007 /* all of these */
+} DFBWindowEventFlags;
+
+/*
+ * Video Provider Event Types - can also be used as flags for event filters.
+ */
+typedef enum {
+ DVPET_NONE = 0x00000000,
+ DVPET_STARTED = 0x00000001, /* The video provider has started the playback */
+ DVPET_STOPPED = 0x00000002, /* The video provider has stopped the playback */
+ DVPET_SPEEDCHANGE = 0x00000004, /* A speed change has occured */
+ DVPET_STREAMCHANGE = 0x00000008, /* A stream description change has occured */
+ DVPET_FATALERROR = 0x00000010, /* A fatal error has occured: restart must be done */
+ DVPET_FINISHED = 0x00000020, /* The video provider has finished the playback */
+ DVPET_SURFACECHANGE = 0x00000040, /* A surface description change has occured */
+ DVPET_FRAMEDECODED = 0x00000080, /* A frame has been decoded by the decoder */
+ DVPET_FRAMEDISPLAYED = 0x00000100, /* A frame has been rendered to the output */
+ DVPET_DATAEXHAUSTED = 0x00000200, /* There is no more data available for consumption */
+ DVPET_VIDEOACTION = 0x00000400, /* An action is required on the video provider */
+ DVPET_DATALOW = 0x00000800, /* The stream buffer is running low in data (threshold defined by implementation). */
+ DVPET_DATAHIGH = 0x00001000, /* The stream buffer is high. */
+ DVPET_BUFFERTIMELOW = 0x00002000, /* The stream buffer has less than requested playout time buffered. */
+ DVPET_BUFFERTIMEHIGH = 0x00004000, /* The stream buffer has more than requested playout time buffered. */
+ DVPET_ALL = 0x00007FFF /* All event types */
+} DFBVideoProviderEventType;
+
+/*
+ * Event from the windowing system.
+ */
+typedef struct {
+ DFBEventClass clazz; /* clazz of event */
+
+ DFBWindowEventType type; /* type of event */
+ DFBWindowEventFlags flags; /* event flags */
+
+ DFBWindowID window_id; /* source of event */
+
+ /* used by DWET_MOVE, DWET_MOTION, DWET_BUTTONDOWN, DWET_BUTTONUP,
+ DWET_ENTER, DWET_LEAVE */
+ int x; /* x position of window
+ or coordinate within
+ window */
+ int y; /* y position of window
+ or coordinate within
+ window */
+
+ /* used by DWET_MOTION, DWET_BUTTONDOWN, DWET_BUTTONUP,
+ DWET_ENTER, DWET_LEAVE */
+ int cx; /* x cursor position */
+ int cy; /* y cursor position */
+
+ /* used by DWET_WHEEL */
+ int step; /* wheel step */
+
+ /* used by DWET_RESIZE */
+ int w; /* width of window */
+ int h; /* height of window */
+
+ /* used by DWET_KEYDOWN, DWET_KEYUP */
+ int key_code; /* hardware keycode, no
+ mapping, -1 if device
+ doesn't differentiate
+ between several keys */
+ DFBInputDeviceKeyIdentifier key_id; /* basic mapping,
+ modifier independent */
+ DFBInputDeviceKeySymbol key_symbol; /* advanced mapping,
+ unicode compatible,
+ modifier dependent */
+ DFBInputDeviceModifierMask modifiers; /* pressed modifiers */
+ DFBInputDeviceLockState locks; /* active locks */
+
+ /* used by DWET_BUTTONDOWN, DWET_BUTTONUP */
+ DFBInputDeviceButtonIdentifier button; /* button being
+ pressed or released */
+ /* used by DWET_MOTION, DWET_BUTTONDOWN, DWET_BUTTONUP */
+ DFBInputDeviceButtonMask buttons; /* mask of currently
+ pressed buttons */
+
+ struct timeval timestamp; /* always set */
+} DFBWindowEvent;
+
+/*
+ * Video Provider Event Types - can also be used as flags for event filters.
+ */
+typedef enum {
+ DVPEDST_UNKNOWN = 0x00000000, /* Event is valid for unknown Data */
+ DVPEDST_AUDIO = 0x00000001, /* Event is valid for Audio Data */
+ DVPEDST_VIDEO = 0x00000002, /* Event is valid for Video Data */
+ DVPEDST_DATA = 0x00000004, /* Event is valid for Data types */
+ DVPEDST_ALL = 0x00000007, /* Event is valid for all Data types */
+
+} DFBVideoProviderEventDataSubType;
+
+/*
+ * Event from the video provider
+ */
+typedef struct {
+ DFBEventClass clazz; /* clazz of event */
+
+ DFBVideoProviderEventType type; /* type of event */
+ DFBVideoProviderEventDataSubType data_type; /* data type that this event is applicable for. */
+
+ int data[4]; /* custom data - large enough for 4 ints so that in most cases
+ memory allocation will not be needed */
+} DFBVideoProviderEvent;
+
+/*
+ * Event for usage by the user of this library.
+ */
+typedef struct {
+ DFBEventClass clazz; /* clazz of event */
+
+ unsigned int type; /* custom type */
+ void *data; /* custom data */
+} DFBUserEvent;
+
+/*
+ * Universal event for custom usage with variable size.
+ */
+typedef struct {
+ DFBEventClass clazz; /* clazz of event (DFEC_UNIVERSAL) */
+ unsigned int size; /* size of this event, minimum is sizeof(DFBUniversalEvent),
+ e.g. 8 bytes (on 32bit architectures) */
+
+
+ /* custom data follows, size of this data is 'size' - sizeof(DFBUniversalEvent) */
+} DFBUniversalEvent;
+
+/*
+ * General container for a DirectFB Event.
+ */
+typedef union {
+ DFBEventClass clazz; /* clazz of event */
+ DFBInputEvent input; /* field for input events */
+ DFBWindowEvent window; /* field for window events */
+ DFBUserEvent user; /* field for user-defined events */
+ DFBUniversalEvent universal; /* field for universal events */
+ DFBVideoProviderEvent videoprovider; /* field for video provider */
+} DFBEvent;
+
+#define DFB_EVENT(e) ((DFBEvent *) (e))
+
+/*
+ * Statistics about event buffer queue.
+ */
+typedef struct {
+ unsigned int num_events; /* Total number of events in the queue. */
+
+ unsigned int DFEC_INPUT; /* Number of input events. */
+ unsigned int DFEC_WINDOW; /* Number of window events. */
+ unsigned int DFEC_USER; /* Number of user events. */
+ unsigned int DFEC_UNIVERSAL; /* Number of universal events. */
+ unsigned int DFEC_VIDEOPROVIDER; /* Number of universal events. */
+
+ unsigned int DIET_KEYPRESS;
+ unsigned int DIET_KEYRELEASE;
+ unsigned int DIET_BUTTONPRESS;
+ unsigned int DIET_BUTTONRELEASE;
+ unsigned int DIET_AXISMOTION;
+
+ unsigned int DWET_POSITION;
+ unsigned int DWET_SIZE;
+ unsigned int DWET_CLOSE;
+ unsigned int DWET_DESTROYED;
+ unsigned int DWET_GOTFOCUS;
+ unsigned int DWET_LOSTFOCUS;
+ unsigned int DWET_KEYDOWN;
+ unsigned int DWET_KEYUP;
+ unsigned int DWET_BUTTONDOWN;
+ unsigned int DWET_BUTTONUP;
+ unsigned int DWET_MOTION;
+ unsigned int DWET_ENTER;
+ unsigned int DWET_LEAVE;
+ unsigned int DWET_WHEEL;
+ unsigned int DWET_POSITION_SIZE;
+
+ unsigned int DVPET_STARTED;
+ unsigned int DVPET_STOPPED;
+ unsigned int DVPET_SPEEDCHANGE;
+ unsigned int DVPET_STREAMCHANGE;
+ unsigned int DVPET_FATALERROR;
+ unsigned int DVPET_FINISHED;
+ unsigned int DVPET_SURFACECHANGE;
+ unsigned int DVPET_FRAMEDECODED;
+ unsigned int DVPET_FRAMEDISPLAYED;
+ unsigned int DVPET_DATAEXHAUSTED;
+ unsigned int DVPET_DATALOW;
+ unsigned int DVPET_VIDEOACTION;
+ unsigned int DVPET_DATAHIGH;
+ unsigned int DVPET_BUFFERTIMELOW;
+ unsigned int DVPET_BUFFERTIMEHIGH;
+} DFBEventBufferStats;
+
+
+/************************
+ * IDirectFBEventBuffer *
+ ************************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBEventBuffer,
+
+
+ /** Buffer handling **/
+
+ /*
+ * Clear all events stored in this buffer.
+ */
+ DFBResult (*Reset) (
+ IDirectFBEventBuffer *thiz
+ );
+
+
+ /** Waiting for events **/
+
+ /*
+ * Wait for the next event to occur.
+ * Thread is idle in the meantime.
+ */
+ DFBResult (*WaitForEvent) (
+ IDirectFBEventBuffer *thiz
+ );
+
+ /*
+ * Block until next event to occur or timeout is reached.
+ * Thread is idle in the meantime.
+ */
+ DFBResult (*WaitForEventWithTimeout) (
+ IDirectFBEventBuffer *thiz,
+ unsigned int seconds,
+ unsigned int milli_seconds
+ );
+
+
+ /** Fetching events **/
+
+ /*
+ * Get the next event and remove it from the FIFO.
+ */
+ DFBResult (*GetEvent) (
+ IDirectFBEventBuffer *thiz,
+ DFBEvent *ret_event
+ );
+
+ /*
+ * Get the next event but leave it there, i.e. do a preview.
+ */
+ DFBResult (*PeekEvent) (
+ IDirectFBEventBuffer *thiz,
+ DFBEvent *ret_event
+ );
+
+ /*
+ * Check if there is a pending event in the queue. This
+ * function returns DFB_OK if there is at least one event,
+ * DFB_BUFFER_EMPTY otherwise.
+ */
+ DFBResult (*HasEvent) (
+ IDirectFBEventBuffer *thiz
+ );
+
+
+ /** Sending events **/
+
+ /*
+ * Put an event into the FIFO.
+ *
+ * This function does not wait until the event got fetched.
+ */
+ DFBResult (*PostEvent) (
+ IDirectFBEventBuffer *thiz,
+ const DFBEvent *event
+ );
+
+ /*
+ * Wake up any thread waiting for events in this buffer.
+ *
+ * This method causes any IDirectFBEventBuffer::WaitForEvent() or
+ * IDirectFBEventBuffer::WaitForEventWithTimeout() call to return with DFB_INTERRUPTED.
+ *
+ * It should be used rather than sending wake up messages which
+ * may pollute the queue and consume lots of CPU and memory compared to
+ * this 'single code line method'.
+ */
+ DFBResult (*WakeUp) (
+ IDirectFBEventBuffer *thiz
+ );
+
+
+ /** Special handling **/
+
+ /*
+ * Create a file descriptor for reading events.
+ *
+ * This method provides an alternative for reading events from an event buffer.
+ * It creates a file descriptor which can be used in select(), poll() or read().
+ *
+ * In general only non-threaded applications which already use select() or poll() need it.
+ *
+ * <b>Note:</b> This method flushes the event buffer. After calling this method all other
+ * methods except IDirectFBEventBuffer::PostEvent() will return DFB_UNSUPPORTED.
+ * Calling this method again will return DFB_BUSY.
+ */
+ DFBResult (*CreateFileDescriptor) (
+ IDirectFBEventBuffer *thiz,
+ int *ret_fd
+ );
+
+
+ /** Statistics **/
+
+ /*
+ * Enable/disable collection of event buffer statistics.
+ */
+ DFBResult (*EnableStatistics) (
+ IDirectFBEventBuffer *thiz,
+ DFBBoolean enable
+ );
+
+ /*
+ * Query collected event buffer statistics.
+ */
+ DFBResult (*GetStatistics) (
+ IDirectFBEventBuffer *thiz,
+ DFBEventBufferStats *ret_stats
+ );
+)
+
+/*
+ * The key selection defines a mode for filtering keys while the window is having the focus.
+ */
+typedef enum {
+ DWKS_ALL = 0x00000000, /* Select all keys (default). */
+ DWKS_NONE = 0x00000001, /* Don't select any key. */
+ DWKS_LIST = 0x00000002 /* Select a list of keys. */
+} DFBWindowKeySelection;
+
+typedef enum {
+ DWGM_DEFAULT = 0x00000000, /* Use default values. */
+ DWGM_FOLLOW = 0x00000001, /* Use values of parent window. */
+ DWGM_RECTANGLE = 0x00000002, /* Use pixel values as defined. */
+ DWGM_LOCATION = 0x00000003 /* Use relative values as defined. */
+} DFBWindowGeometryMode;
+
+typedef struct {
+ DFBWindowGeometryMode mode;
+
+ DFBRectangle rectangle;
+ DFBLocation location;
+} DFBWindowGeometry;
+
+typedef enum {
+ DWCF_NONE = 0x00000000,
+
+ DWCF_RELATIVE = 0x00000001,
+ DWCF_EXPLICIT = 0x00000002,
+ DWCF_UNCLIPPED = 0x00000004,
+ DWCF_TRAPPED = 0x00000008,
+ DWCF_FIXED = 0x00000010,
+ DWCF_INVISIBLE = 0x00000020,
+
+ DWCF_ALL = 0x0000003F
+} DFBWindowCursorFlags;
+
+/*******************
+ * IDirectFBWindow *
+ *******************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBWindow,
+
+ /** Retrieving information **/
+
+ /*
+ * Get the unique window ID.
+ */
+ DFBResult (*GetID) (
+ IDirectFBWindow *thiz,
+ DFBWindowID *ret_window_id
+ );
+
+ /*
+ * Get the current position of this window.
+ */
+ DFBResult (*GetPosition) (
+ IDirectFBWindow *thiz,
+ int *ret_x,
+ int *ret_y
+ );
+
+ /*
+ * Get the size of the window in pixels.
+ */
+ DFBResult (*GetSize) (
+ IDirectFBWindow *thiz,
+ int *ret_width,
+ int *ret_height
+ );
+
+
+ /** Close & Destroy **/
+
+ /*
+ * Send a close message to the window.
+ *
+ * This function sends a message of type DWET_CLOSE to the window.
+ * It does NOT actually close it.
+ */
+ DFBResult (*Close) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Destroys the window and sends a destruction message.
+ *
+ * This function sends a message of type DWET_DESTROY to
+ * the window after removing it from the window stack and
+ * freeing its data. Some functions called from this
+ * interface will return DFB_DESTROYED after that.
+ */
+ DFBResult (*Destroy) (
+ IDirectFBWindow *thiz
+ );
+
+
+ /** Surface & Scaling **/
+
+ /*
+ * Get an interface to the backing store surface.
+ *
+ * This surface has to be flipped to make previous drawing
+ * commands visible, i.e. to repaint the windowstack for
+ * that region.
+ */
+ DFBResult (*GetSurface) (
+ IDirectFBWindow *thiz,
+ IDirectFBSurface **ret_surface
+ );
+
+ /*
+ * Resize the surface of a scalable window.
+ *
+ * This requires the option DWOP_SCALE.
+ * See IDirectFBWindow::SetOptions().
+ */
+ DFBResult (*ResizeSurface) (
+ IDirectFBWindow *thiz,
+ int width,
+ int height
+ );
+
+
+ /** Events **/
+
+ /*
+ * Create an event buffer for this window and attach it.
+ */
+ DFBResult (*CreateEventBuffer) (
+ IDirectFBWindow *thiz,
+ IDirectFBEventBuffer **ret_buffer
+ );
+
+ /*
+ * Attach an existing event buffer to this window.
+ *
+ * NOTE: Attaching multiple times generates multiple events.
+ *
+ */
+ DFBResult (*AttachEventBuffer) (
+ IDirectFBWindow *thiz,
+ IDirectFBEventBuffer *buffer
+ );
+
+ /*
+ * Detach an event buffer from this window.
+ */
+ DFBResult (*DetachEventBuffer) (
+ IDirectFBWindow *thiz,
+ IDirectFBEventBuffer *buffer
+ );
+
+ /*
+ * Enable specific events to be sent to the window.
+ *
+ * The argument is a mask of events that will be set in the
+ * window's event mask. The default event mask is DWET_ALL.
+ */
+ DFBResult (*EnableEvents) (
+ IDirectFBWindow *thiz,
+ DFBWindowEventType mask
+ );
+
+ /*
+ * Disable specific events from being sent to the window.
+ *
+ * The argument is a mask of events that will be cleared in
+ * the window's event mask. The default event mask is DWET_ALL.
+ */
+ DFBResult (*DisableEvents) (
+ IDirectFBWindow *thiz,
+ DFBWindowEventType mask
+ );
+
+
+ /** Options **/
+
+ /*
+ * Set options controlling appearance and behaviour of the window.
+ */
+ DFBResult (*SetOptions) (
+ IDirectFBWindow *thiz,
+ DFBWindowOptions options
+ );
+
+ /*
+ * Get options controlling appearance and behaviour of the window.
+ */
+ DFBResult (*GetOptions) (
+ IDirectFBWindow *thiz,
+ DFBWindowOptions *ret_options
+ );
+
+ /*
+ * Set the window color.
+ *
+ * This is used in case you specified DWCAPS_COLOR.
+ * It specifies the window draw color.
+ */
+ DFBResult (*SetColor) (
+ IDirectFBWindow *thiz,
+ u8 r,
+ u8 g,
+ u8 b,
+ u8 a
+ );
+
+ /*
+ * Set the window color key.
+ *
+ * If a pixel of the window matches this color the
+ * underlying window or the background is visible at this
+ * point.
+ */
+ DFBResult (*SetColorKey) (
+ IDirectFBWindow *thiz,
+ u8 r,
+ u8 g,
+ u8 b
+ );
+
+ /*
+ * Set the window color key (indexed).
+ *
+ * If a pixel (indexed format) of the window matches this
+ * color index the underlying window or the background is
+ * visible at this point.
+ */
+ DFBResult (*SetColorKeyIndex) (
+ IDirectFBWindow *thiz,
+ unsigned int index
+ );
+
+ /*
+ * Set the window's global opacity factor.
+ *
+ * Set it to "0" to hide a window.
+ * Setting it to "0xFF" makes the window opaque if
+ * it has no alpha channel.
+ */
+ DFBResult (*SetOpacity) (
+ IDirectFBWindow *thiz,
+ u8 opacity
+ );
+
+ /*
+ * Disable alpha channel blending for one region of the window.
+ *
+ * If DWOP_ALPHACHANNEL and DWOP_OPAQUE_REGION are set but not DWOP_COLORKEYING
+ * and the opacity of the window is 255 the window gets rendered
+ * without alpha blending within the specified region.
+ *
+ * This is extremely useful for alpha blended window decorations while
+ * the main content stays opaque and gets rendered faster.
+ */
+ DFBResult (*SetOpaqueRegion) (
+ IDirectFBWindow *thiz,
+ int x1,
+ int y1,
+ int x2,
+ int y2
+ );
+
+ /*
+ * Get the current opacity factor of this window.
+ */
+ DFBResult (*GetOpacity) (
+ IDirectFBWindow *thiz,
+ u8 *ret_opacity
+ );
+
+ /*
+ * Bind a cursor shape to this window.
+ *
+ * This method will set a per-window cursor shape. Everytime
+ * the cursor enters this window, the specified shape is set.
+ *
+ * Passing NULL will unbind a set shape and release its surface.
+ */
+ DFBResult (*SetCursorShape) (
+ IDirectFBWindow *thiz,
+ IDirectFBSurface *shape,
+ int hot_x,
+ int hot_y
+ );
+
+
+ /** Position and Size **/
+
+ /*
+ * Move the window by the specified distance.
+ */
+ DFBResult (*Move) (
+ IDirectFBWindow *thiz,
+ int dx,
+ int dy
+ );
+
+ /*
+ * Move the window to the specified coordinates.
+ */
+ DFBResult (*MoveTo) (
+ IDirectFBWindow *thiz,
+ int x,
+ int y
+ );
+
+ /*
+ * Resize the window.
+ */
+ DFBResult (*Resize) (
+ IDirectFBWindow *thiz,
+ int width,
+ int height
+ );
+
+ /*
+ * Set position and size in one step.
+ */
+ DFBResult (*SetBounds) (
+ IDirectFBWindow *thiz,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+
+ /** Stacking **/
+
+ /*
+ * Put the window into a specific stacking class.
+ */
+ DFBResult (*SetStackingClass) (
+ IDirectFBWindow *thiz,
+ DFBWindowStackingClass stacking_class
+ );
+
+ /*
+ * Raise the window by one within the window stack.
+ */
+ DFBResult (*Raise) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Lower the window by one within the window stack.
+ */
+ DFBResult (*Lower) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Put the window on the top of the window stack.
+ */
+ DFBResult (*RaiseToTop) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Send a window to the bottom of the window stack.
+ */
+ DFBResult (*LowerToBottom) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Put a window on top of another window.
+ */
+ DFBResult (*PutAtop) (
+ IDirectFBWindow *thiz,
+ IDirectFBWindow *lower
+ );
+
+ /*
+ * Put a window below another window.
+ */
+ DFBResult (*PutBelow) (
+ IDirectFBWindow *thiz,
+ IDirectFBWindow *upper
+ );
+
+
+ /** Binding **/
+
+ /*
+ * Bind a window at the specified position of this window.
+ *
+ * After binding, bound window will be automatically moved
+ * when this window moves to a new position.<br>
+ * Binding the same window to multiple windows is not supported.
+ * Subsequent call to Bind() automatically unbounds the bound window
+ * before binding it again.<br>
+ * To move the bound window to a new position call Bind() again
+ * with the new coordinates.
+ */
+ DFBResult (*Bind) (
+ IDirectFBWindow *thiz,
+ IDirectFBWindow *window,
+ int x,
+ int y
+ );
+
+ /*
+ * Unbind a window from this window.
+ */
+ DFBResult (*Unbind) (
+ IDirectFBWindow *thiz,
+ IDirectFBWindow *window
+ );
+
+
+ /** Focus handling **/
+
+ /*
+ * Pass the focus to this window.
+ */
+ DFBResult (*RequestFocus) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Grab the keyboard, i.e. all following keyboard events are
+ * sent to this window ignoring the focus.
+ */
+ DFBResult (*GrabKeyboard) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Ungrab the keyboard, i.e. switch to standard key event
+ * dispatching.
+ */
+ DFBResult (*UngrabKeyboard) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Grab the pointer, i.e. all following mouse events are
+ * sent to this window ignoring the focus.
+ */
+ DFBResult (*GrabPointer) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Ungrab the pointer, i.e. switch to standard mouse event
+ * dispatching.
+ */
+ DFBResult (*UngrabPointer) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Grab a specific key, i.e. all following events of this key are
+ * sent to this window ignoring the focus.
+ */
+ DFBResult (*GrabKey) (
+ IDirectFBWindow *thiz,
+ DFBInputDeviceKeySymbol symbol,
+ DFBInputDeviceModifierMask modifiers
+ );
+
+ /*
+ * Ungrab a specific key, i.e. switch to standard key event
+ * dispatching.
+ */
+ DFBResult (*UngrabKey) (
+ IDirectFBWindow *thiz,
+ DFBInputDeviceKeySymbol symbol,
+ DFBInputDeviceModifierMask modifiers
+ );
+
+
+ /** Key selection **/
+
+ /*
+ * Selects a mode for filtering keys while being focused.
+ *
+ * The <b>selection</b> defines whether all, none or a specific set (list) of keys is selected.
+ * In case of a specific set, the <b>keys</b> array with <b>num_keys</b> has to be provided.
+ *
+ * Multiple calls to this method are possible. Each overrides all settings from the previous call.
+ */
+ DFBResult (*SetKeySelection) (
+ IDirectFBWindow *thiz,
+ DFBWindowKeySelection selection,
+ const DFBInputDeviceKeySymbol *keys,
+ unsigned int num_keys
+ );
+
+ /*
+ * Grab all unselected (filtered out) keys.
+ *
+ * Unselected keys are those not selected by the focused window. These keys won't be sent
+ * to that window. Instead one window in the stack can collect them.
+ *
+ * See also IDirectFBWindow::UngrabUnselectedKeys() and IDirectFBWindow::SetKeySelection().
+ */
+ DFBResult (*GrabUnselectedKeys) (
+ IDirectFBWindow *thiz
+ );
+
+ /*
+ * Release the grab of unselected (filtered out) keys.
+ *
+ * See also IDirectFBWindow::GrabUnselectedKeys() and IDirectFBWindow::SetKeySelection().
+ */
+ DFBResult (*UngrabUnselectedKeys) (
+ IDirectFBWindow *thiz
+ );
+
+
+ /** Advanced Geometry **/
+
+ /*
+ * Set area of surface to be shown in window.
+ *
+ * Default and maximum is to show whole surface.
+ */
+ DFBResult (*SetSrcGeometry) (
+ IDirectFBWindow *thiz,
+ const DFBWindowGeometry *geometry
+ );
+
+ /*
+ * Set destination location of window within its bounds.
+ *
+ * Default and maximum is to fill whole bounds.
+ */
+ DFBResult (*SetDstGeometry) (
+ IDirectFBWindow *thiz,
+ const DFBWindowGeometry *geometry
+ );
+
+
+ /** Properties **/
+
+ /*
+ * Set property controlling appearance and behaviour of the window.
+ */
+ DFBResult (*SetProperty) (
+ IDirectFBWindow *thiz,
+ const char *key,
+ void *value,
+ void **ret_old_value
+ );
+
+ /*
+ * Get property controlling appearance and behaviour of the window.
+ */
+ DFBResult (*GetProperty) (
+ IDirectFBWindow *thiz,
+ const char *key,
+ void **ret_value
+ );
+
+ /*
+ * Remove property controlling appearance and behaviour of the window.
+ */
+ DFBResult (*RemoveProperty) (
+ IDirectFBWindow *thiz,
+ const char *key,
+ void **ret_value
+ );
+
+ /*
+ * Set window rotation.
+ */
+ DFBResult (*SetRotation) (
+ IDirectFBWindow *thiz,
+ int rotation
+ );
+
+
+ /** Association **/
+
+ /*
+ * Change the window association.
+ *
+ * If <b>window_id</b> is 0, the window will be dissociated.
+ */
+ DFBResult (*SetAssociation) (
+ IDirectFBWindow *thiz,
+ DFBWindowID window_id
+ );
+
+
+ /** Updates **/
+
+ /*
+ * Signal start of window content updates.
+ */
+ DFBResult (*BeginUpdates) (
+ IDirectFBWindow *thiz,
+ const DFBRegion *update
+ );
+
+
+ /** Events **/
+
+ /*
+ * Send event
+ */
+ DFBResult (*SendEvent) (
+ IDirectFBWindow *thiz,
+ const DFBWindowEvent *event
+ );
+
+
+ /** Cursor **/
+
+ /*
+ * Set cursor flags (active when in focus).
+ */
+ DFBResult (*SetCursorFlags) (
+ IDirectFBWindow *thiz,
+ DFBWindowCursorFlags flags
+ );
+
+ /*
+ * Set cursor resolution (coordinate space for cursor within window).
+ *
+ * The default cursor resolution is the surface dimensions.
+ */
+ DFBResult (*SetCursorResolution) (
+ IDirectFBWindow *thiz,
+ const DFBDimension *resolution
+ );
+
+ /*
+ * Set cursor position within window coordinates (surface or cursor resolution).
+ */
+ DFBResult (*SetCursorPosition) (
+ IDirectFBWindow *thiz,
+ int x,
+ int y
+ );
+)
+
+
+/*
+ * Called for each provided text encoding.
+ */
+typedef DFBEnumerationResult (*DFBTextEncodingCallback) (
+ DFBTextEncodingID encoding_id,
+ const char *name,
+ void *context
+);
+
+/*****************
+ * IDirectFBFont *
+ *****************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBFont,
+
+ /** Retrieving information **/
+
+ /*
+ * Get the distance from the baseline to the top of the
+ * logical extents of this font.
+ */
+ DFBResult (*GetAscender) (
+ IDirectFBFont *thiz,
+ int *ret_ascender
+ );
+
+ /*
+ * Get the distance from the baseline to the bottom of
+ * the logical extents of this font.
+ *
+ * This is a negative value!
+ */
+ DFBResult (*GetDescender) (
+ IDirectFBFont *thiz,
+ int *ret_descender
+ );
+
+ /*
+ * Get the logical height of this font. This is the
+ * distance from one baseline to the next when writing
+ * several lines of text. Note that this value does not
+ * correspond the height value specified when loading the
+ * font.
+ */
+ DFBResult (*GetHeight) (
+ IDirectFBFont *thiz,
+ int *ret_height
+ );
+
+ /*
+ * Get the maximum character width.
+ *
+ * This is a somewhat dubious value. Not all fonts
+ * specify it correcly. It can give you an idea of
+ * the maximum expected width of a rendered string.
+ */
+ DFBResult (*GetMaxAdvance) (
+ IDirectFBFont *thiz,
+ int *ret_maxadvance
+ );
+
+ /*
+ * Get the kerning to apply between two glyphs specified by
+ * their character codes.
+ */
+ DFBResult (*GetKerning) (
+ IDirectFBFont *thiz,
+ unsigned int prev,
+ unsigned int current,
+ int *ret_kern_x,
+ int *ret_kern_y
+ );
+
+ /** Measurements **/
+
+ /*
+ * Get the logical width of the specified string
+ * as if it were drawn with this font.
+ *
+ * Bytes specifies the number of bytes to take from the
+ * string or -1 for the complete NULL-terminated string.
+ *
+ * The returned width may be different than the actual drawn
+ * width of the text since this function returns the logical
+ * width that should be used to layout the text. A negative
+ * width indicates right-to-left rendering.
+ */
+ DFBResult (*GetStringWidth) (
+ IDirectFBFont *thiz,
+ const char *text,
+ int bytes,
+ int *ret_width
+ );
+
+ /*
+ * Get the logical and real extents of the specified
+ * string as if it were drawn with this font.
+ *
+ * Bytes specifies the number of bytes to take from the
+ * string or -1 for the complete NULL-terminated string.
+ *
+ * The logical rectangle describes the typographic extents
+ * and should be used to layout text. The ink rectangle
+ * describes the smallest rectangle containing all pixels
+ * that are touched when drawing the string. If you only
+ * need one of the rectangles, pass NULL for the other one.
+ *
+ * The ink rectangle is guaranteed to be a valid rectangle
+ * with positive width and height, while the logical
+ * rectangle may have negative width indicating right-to-left
+ * layout.
+ *
+ * The rectangle offsets are reported relative to the
+ * baseline and refer to the text being drawn using
+ * DSTF_LEFT.
+ */
+ DFBResult (*GetStringExtents) (
+ IDirectFBFont *thiz,
+ const char *text,
+ int bytes,
+ DFBRectangle *ret_logical_rect,
+ DFBRectangle *ret_ink_rect
+ );
+
+ /*
+ * Get the extents of a glyph specified by its character code.
+ *
+ * The rectangle describes the the smallest rectangle
+ * containing all pixels that are touched when drawing the
+ * glyph. It is reported relative to the baseline. If you
+ * only need the advance, pass NULL for the rectangle.
+ *
+ * The advance describes the horizontal offset to the next
+ * glyph (without kerning applied). It may be a negative
+ * value indicating left-to-right rendering. If you don't
+ * need this value, pass NULL for advance.
+ */
+ DFBResult (*GetGlyphExtents) (
+ IDirectFBFont *thiz,
+ unsigned int character,
+ DFBRectangle *ret_rect,
+ int *ret_advance
+ );
+
+ /*
+ * Get the next explicit or automatic break within a string
+ * along with the logical width of the text, the string length,
+ * and a pointer to the next text line.
+ *
+ * The bytes specifies the maximum number of bytes to take from the
+ * string or -1 for complete NULL-terminated string.
+ *
+ * The max_width specifies logical width of column onto which
+ * the text will be drawn. Then the logical width of fitted
+ * text is returned in ret_width. The returned width may overlap
+ * the max width specified if there's only one character
+ * that fits.
+ *
+ * The number of characters that fit into this column is
+ * returned by the ret_str_length. This value can be used as
+ * the number of bytes to take when using DrawString().
+ *
+ * In ret_next_line a pointer to the next line of text is returned. This
+ * will point to NULL or the end of the string if there's no more break.
+ */
+ DFBResult (*GetStringBreak) (
+ IDirectFBFont *thiz,
+ const char *text,
+ int bytes,
+ int max_width,
+ int *ret_width,
+ int *ret_str_length,
+ const char **ret_next_line
+ );
+
+ /** Encodings **/
+
+ /*
+ * Change the default encoding used when the font is set at a surface.
+ *
+ * It's also the encoding used for the measurement functions
+ * of this interface, e.g. IDirectFBFont::GetStringExtents().
+ */
+ DFBResult (*SetEncoding) (
+ IDirectFBFont *thiz,
+ DFBTextEncodingID encoding
+ );
+
+ /*
+ * Enumerate all provided text encodings.
+ */
+ DFBResult (*EnumEncodings) (
+ IDirectFBFont *thiz,
+ DFBTextEncodingCallback callback,
+ void *context
+ );
+
+ /*
+ * Find an encoding by its name.
+ */
+ DFBResult (*FindEncoding) (
+ IDirectFBFont *thiz,
+ const char *name,
+ DFBTextEncodingID *ret_encoding
+ );
+
+ /*
+ * Get the line spacing vector of this font. This is the
+ * displacement vector from one line to the next when writing
+ * several lines of text. It differs from the height only
+ * when the font is rotated.
+ */
+ DFBResult (*GetLineSpacingVector) (
+ IDirectFBFont *thiz,
+ int *ret_xspacing,
+ int *ret_yspacing
+ );
+
+ /*
+ * Get the extents of a glyph specified by its character code (extended version).
+ *
+ * The rectangle describes the the smallest rectangle
+ * containing all pixels that are touched when drawing the
+ * glyph. It is reported relative to the baseline. If you
+ * only need the advance, pass NULL for the rectangle.
+ *
+ * The advance describes the horizontal offset to the next
+ * glyph (without kerning applied). It may be a negative
+ * value indicating left-to-right rendering. If you don't
+ * need this value, pass NULL for advance.
+ */
+ DFBResult (*GetGlyphExtentsXY) (
+ IDirectFBFont *thiz,
+ unsigned int character,
+ DFBRectangle *ret_rect,
+ int *ret_xadvance,
+ int *ret_yadvance
+ );
+
+
+ /** Retrieving information **/
+
+ /*
+ * Get the description of the font.
+ */
+ DFBResult (*GetDescription) (
+ IDirectFBFont *thiz,
+ DFBFontDescription *ret_description
+ );
+)
+
+/*
+ * Capabilities of an image.
+ */
+typedef enum {
+ DICAPS_NONE = 0x00000000, /* None of these. */
+ DICAPS_ALPHACHANNEL = 0x00000001, /* The image data contains an
+ alphachannel. */
+ DICAPS_COLORKEY = 0x00000002 /* The image has a colorkey,
+ e.g. the transparent color
+ of a GIF image. */
+} DFBImageCapabilities;
+
+/*
+ * Information about an image including capabilities and values
+ * belonging to available capabilities.
+ */
+typedef struct {
+ DFBImageCapabilities caps; /* capabilities */
+
+ u8 colorkey_r; /* colorkey red channel */
+ u8 colorkey_g; /* colorkey green channel */
+ u8 colorkey_b; /* colorkey blue channel */
+} DFBImageDescription;
+
+
+typedef enum {
+ DIRCR_OK,
+ DIRCR_ABORT
+} DIRenderCallbackResult;
+/*
+ * Called whenever a chunk of the image is decoded.
+ * Has to be registered with IDirectFBImageProvider::SetRenderCallback().
+ */
+typedef DIRenderCallbackResult (*DIRenderCallback)(DFBRectangle *rect, void *ctx);
+
+/**************************
+ * IDirectFBImageProvider *
+ **************************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBImageProvider,
+
+ /** Retrieving information **/
+
+ /*
+ * Get a surface description that best matches the image
+ * contained in the file.
+ *
+ * For opaque image formats the pixel format of the primary
+ * layer is used. For images with alpha channel an ARGB
+ * surface description is returned.
+ */
+ DFBResult (*GetSurfaceDescription) (
+ IDirectFBImageProvider *thiz,
+ DFBSurfaceDescription *ret_dsc
+ );
+
+ /*
+ * Get a description of the image.
+ *
+ * This includes stuff that does not belong into the surface
+ * description, e.g. a colorkey of a transparent GIF.
+ */
+ DFBResult (*GetImageDescription) (
+ IDirectFBImageProvider *thiz,
+ DFBImageDescription *ret_dsc
+ );
+
+
+ /** Rendering **/
+
+ /*
+ * Render the file contents into the destination contents
+ * doing automatic scaling and color format conversion.
+ *
+ * If the image file has an alpha channel it is rendered
+ * with alpha channel if the destination surface is of the
+ * ARGB pixelformat. Otherwise, transparent areas are
+ * blended over a black background.
+ *
+ * If a destination rectangle is specified, the rectangle is
+ * clipped to the destination surface. If NULL is passed as
+ * destination rectangle, the whole destination surface is
+ * taken. The image is stretched to fill the rectangle.
+ */
+ DFBResult (*RenderTo) (
+ IDirectFBImageProvider *thiz,
+ IDirectFBSurface *destination,
+ const DFBRectangle *destination_rect
+ );
+
+ /*
+ * Registers a callback for progressive image loading.
+ *
+ * The function is called each time a chunk of the image is decoded.
+ */
+ DFBResult (*SetRenderCallback) (
+ IDirectFBImageProvider *thiz,
+ DIRenderCallback callback,
+ void *callback_data
+ );
+
+
+ /** Encoding **/
+
+ /*
+ * Encode a portion of a surface.
+ */
+ DFBResult (*WriteBack) (
+ IDirectFBImageProvider *thiz,
+ IDirectFBSurface *surface,
+ const DFBRectangle *src_rect,
+ const char *filename
+ );
+)
+
+/*
+ * Capabilities of an audio/video stream.
+ */
+typedef enum {
+ DVSCAPS_NONE = 0x00000000, /* None of these. */
+ DVSCAPS_VIDEO = 0x00000001, /* Stream contains video. */
+ DVSCAPS_AUDIO = 0x00000002 /* Stream contains audio. */
+ /* DVSCAPS_SUBPICTURE ?! */
+} DFBStreamCapabilities;
+
+#define DFB_STREAM_DESC_ENCODING_LENGTH 30
+
+#define DFB_STREAM_DESC_TITLE_LENGTH 255
+
+#define DFB_STREAM_DESC_AUTHOR_LENGTH 255
+
+#define DFB_STREAM_DESC_ALBUM_LENGTH 255
+
+#define DFB_STREAM_DESC_GENRE_LENGTH 32
+
+#define DFB_STREAM_DESC_COMMENT_LENGTH 255
+
+/*
+ * Informations about an audio/video stream.
+ */
+typedef struct {
+ DFBStreamCapabilities caps; /* capabilities */
+
+ struct {
+ char encoding[DFB_STREAM_DESC_ENCODING_LENGTH]; /* encoding (e.g. "MPEG4") */
+ double framerate; /* number of frames per second */
+ double aspect; /* frame aspect ratio */
+ int bitrate; /* amount of bits per second */
+ int afd; /* Active Format Descriptor */
+ int width; /* Width as reported by Sequence Header */
+ int height; /* Height as reported by Sequence Header */
+ } video; /* struct containing the above encoding properties for video */
+
+ struct {
+ char encoding[DFB_STREAM_DESC_ENCODING_LENGTH]; /* encoding (e.g. "AAC") */
+ int samplerate; /* number of samples per second */
+ int channels; /* number of channels per sample */
+ int bitrate; /* amount of bits per second */
+ } audio; /* struct containing the above four encoding properties for audio */
+
+ char title[DFB_STREAM_DESC_TITLE_LENGTH]; /* title */
+ char author[DFB_STREAM_DESC_AUTHOR_LENGTH]; /* author */
+ char album[DFB_STREAM_DESC_ALBUM_LENGTH]; /* album */
+ short year; /* year */
+ char genre[DFB_STREAM_DESC_GENRE_LENGTH]; /* genre */
+ char comment[DFB_STREAM_DESC_COMMENT_LENGTH]; /* comment */
+} DFBStreamDescription;
+
+/*
+ * Type of an audio stream.
+ */
+typedef enum {
+ DSF_ES = 0x00000000, /* ES. */
+ DSF_PES = 0x00000001, /* PES. */
+} DFBStreamFormat;
+
+/*
+ * Stream attributes for an audio/video stream.
+ */
+typedef struct {
+ struct {
+ char encoding[DFB_STREAM_DESC_ENCODING_LENGTH]; /* encoding (e.g. "MPEG4") */
+ DFBStreamFormat format; /* format of the video stream */
+ } video; /* struct containing the above two encoding properties for video */
+
+ struct {
+ char encoding[DFB_STREAM_DESC_ENCODING_LENGTH]; /* encoding (e.g. "AAC") */
+ DFBStreamFormat format; /* format of the audio stream */
+ } audio; /* struct containing the above two encoding properties for audio */
+} DFBStreamAttributes;
+
+/*
+ * Buffer levels and occupancy for Audio/Video input buffers.
+ */
+typedef struct {
+ DFBStreamCapabilities valid; /* Which of the Audio / Video sections are valid. */
+
+ struct {
+ unsigned int buffer_size; /* Size in bytes of the input buffer to video decoder */
+ unsigned int minimum_level; /* The level at which a DVPET_DATALOW event will be generated. */
+ unsigned int maximum_level; /* The level at which a DVPET_DATAHIGH event will be generated. */
+ unsigned int current_level; /* Current fill level of video input buffer.*/
+ } video;
+
+ struct {
+ unsigned int buffer_size; /* Size in bytes of the input buffer to audio decoder */
+ unsigned int minimum_level; /* The level at which a DVPET_DATALOW event will be generated. */
+ unsigned int maximum_level; /* The level at which a DVPET_DATAHIGH event will be generated. */
+ unsigned int current_level; /* Current fill level of audio input buffer.*/
+ } audio;
+} DFBBufferOccupancy;
+
+/*
+ * Buffer thresholds for Audio and Video.
+ */
+typedef struct {
+ DFBStreamCapabilities selection; /* Which of the Audio / Video are we setting? */
+
+ struct {
+ unsigned int minimum_level; /* The level at which a DVPET_DATALOW event will be generated. */
+ unsigned int maximum_level; /* The level at which a DVPET_DATAHIGH event will be generated. */
+ unsigned int minimum_time; /* The level at which a DVPET_BUFFERTIMELOW event will be generated. */
+ unsigned int maximum_time; /* The level at which a DVPET_BUFFERTIMEHIGH event will be generated. */
+ } video;
+
+ struct {
+ unsigned int minimum_level; /* The level at which a DVPET_DATALOW event will be generated. */
+ unsigned int maximum_level; /* The level at which a DVPET_DATAHIGH event will be generated. */
+ unsigned int minimum_time; /* The level at which a DVPET_BUFFERTIMELOW event will be generated. */
+ unsigned int maximum_time; /* The level at which a DVPET_BUFFERTIMEHIGH event will be generated. */
+ } audio;
+} DFBBufferThresholds;
+
+/*
+ * Called for each written frame.
+ */
+typedef void (*DVFrameCallback)(void *ctx);
+
+
+/**************************
+ * IDirectFBVideoProvider *
+ **************************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBVideoProvider,
+
+ /** Retrieving information **/
+
+ /*
+ * Retrieve information about the video provider's
+ * capabilities.
+ */
+ DFBResult (*GetCapabilities) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderCapabilities *ret_caps
+ );
+
+ /*
+ * Get a surface description that best matches the video
+ * contained in the file.
+ */
+ DFBResult (*GetSurfaceDescription) (
+ IDirectFBVideoProvider *thiz,
+ DFBSurfaceDescription *ret_dsc
+ );
+
+ /*
+ * Get a description of the video stream.
+ */
+ DFBResult (*GetStreamDescription) (
+ IDirectFBVideoProvider *thiz,
+ DFBStreamDescription *ret_dsc
+ );
+
+
+ /** Playback **/
+
+ /*
+ * Play the video rendering it into the specified rectangle
+ * of the destination surface.
+ *
+ * Optionally a callback can be registered that is called
+ * for each rendered frame. This is especially important if
+ * you are playing to a flipping surface. In this case, you
+ * should flip the destination surface in your callback.
+ */
+ DFBResult (*PlayTo) (
+ IDirectFBVideoProvider *thiz,
+ IDirectFBSurface *destination,
+ const DFBRectangle *destination_rect,
+ DVFrameCallback callback,
+ void *ctx
+ );
+
+ /*
+ * Stop rendering into the destination surface.
+ */
+ DFBResult (*Stop) (
+ IDirectFBVideoProvider *thiz
+ );
+
+ /*
+ * Get the status of the playback.
+ */
+ DFBResult (*GetStatus) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderStatus *ret_status
+ );
+
+
+ /** Media Control **/
+
+ /*
+ * Seeks to a position within the stream.
+ */
+ DFBResult (*SeekTo) (
+ IDirectFBVideoProvider *thiz,
+ double seconds
+ );
+
+ /*
+ * Gets current position within the stream.
+ */
+ DFBResult (*GetPos) (
+ IDirectFBVideoProvider *thiz,
+ double *ret_seconds
+ );
+
+ /*
+ * Gets the length of the stream.
+ */
+ DFBResult (*GetLength) (
+ IDirectFBVideoProvider *thiz,
+ double *ret_seconds
+ );
+
+ /** Color Adjustment **/
+
+ /*
+ * Gets the current video color settings.
+ */
+ DFBResult (*GetColorAdjustment) (
+ IDirectFBVideoProvider *thiz,
+ DFBColorAdjustment *ret_adj
+ );
+
+ /*
+ * Adjusts the video colors.
+ *
+ * This function only has an effect if the video provider
+ * supports this operation. Check the providers capabilities
+ * to find out if this is the case.
+ */
+ DFBResult (*SetColorAdjustment) (
+ IDirectFBVideoProvider *thiz,
+ const DFBColorAdjustment *adj
+ );
+
+ /** Interactivity **/
+
+ /*
+ * Send an input or window event.
+ *
+ * This method allows to redirect events to an interactive
+ * video provider. Events must be relative to the specified
+ * rectangle of the destination surface.
+ */
+ DFBResult (*SendEvent) (
+ IDirectFBVideoProvider *thiz,
+ const DFBEvent *event
+ );
+
+ /** Advanced control **/
+
+ /*
+ * Set the flags controlling playback mode.
+ */
+ DFBResult (*SetPlaybackFlags) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderPlaybackFlags flags
+ );
+
+ /*
+ * Set the speed multiplier.
+ *
+ * Values below 1.0 reduce playback speed
+ * while values over 1.0 increase it.<br>
+ * Specifying a value of 0.0 has the effect of
+ * putting the playback in pause mode without
+ * stopping the video provider.
+ */
+ DFBResult (*SetSpeed) (
+ IDirectFBVideoProvider *thiz,
+ double multiplier
+ );
+
+ /*
+ * Get current speed multiplier.
+ */
+ DFBResult (*GetSpeed) (
+ IDirectFBVideoProvider *thiz,
+ double *ret_multiplier
+ );
+
+ /*
+ * Set volume level.
+ *
+ * Values between 0.0f and 1.0f adjust the volume level.
+ * Values over 1.0f increase the amplification level.
+ */
+ DFBResult (*SetVolume) (
+ IDirectFBVideoProvider *thiz,
+ float level
+ );
+
+ /*
+ * Get volume level.
+ */
+ DFBResult (*GetVolume) (
+ IDirectFBVideoProvider *thiz,
+ float *ret_level
+ );
+
+ /*
+ * Set the stream attributes.
+ * May have a wrapper with different media types types encapsulated.
+ * Can use this method to indicate the content type.
+ */
+ DFBResult (*SetStreamAttributes) (
+ IDirectFBVideoProvider *thiz,
+ DFBStreamAttributes attr
+ );
+
+ /*
+ * Set the audio units that are being used for output.
+ * May have multiple audio outputs and need to configure them on/off
+ * dynamically.
+ */
+ DFBResult (*SetAudioOutputs) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderAudioUnits *audioUnits
+ );
+
+ /*
+ * Get the audio units that are being used for output.
+ */
+ DFBResult (*GetAudioOutputs) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderAudioUnits *audioUnits
+ );
+
+ /*
+ * Set the audio delay
+ *
+ * The parameter is in microseconds. Values < 0 make audio earlier, > 0 make audio later.
+ */
+ DFBResult (*SetAudioDelay) (
+ IDirectFBVideoProvider *thiz,
+ long delay
+ );
+
+
+ /** Event buffers **/
+
+ /*
+ * Create an event buffer for this video provider and attach it.
+ */
+ DFBResult (*CreateEventBuffer) (
+ IDirectFBVideoProvider *thiz,
+ IDirectFBEventBuffer **ret_buffer
+ );
+
+ /*
+ * Attach an existing event buffer to this video provider.
+ *
+ * NOTE: Attaching multiple times generates multiple events.
+ */
+ DFBResult (*AttachEventBuffer) (
+ IDirectFBVideoProvider *thiz,
+ IDirectFBEventBuffer *buffer
+ );
+
+ /*
+ * Enable specific events to be sent from the video provider.
+ *
+ * The argument is a mask of events that will be set in the
+ * videoproviders's event mask. The default event mask is DVPET_ALL.
+ */
+ DFBResult (*EnableEvents) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderEventType mask
+ );
+
+ /*
+ * Disable specific events from being sent from the video provider
+ *
+ * The argument is a mask of events that will be cleared in
+ * the video providers's event mask. The default event mask is DWET_ALL.
+ */
+ DFBResult (*DisableEvents) (
+ IDirectFBVideoProvider *thiz,
+ DFBVideoProviderEventType mask
+ );
+
+ /*
+ * Detach an event buffer from this video provider.
+ */
+ DFBResult (*DetachEventBuffer) (
+ IDirectFBVideoProvider *thiz,
+ IDirectFBEventBuffer *buffer
+ );
+
+
+ /** Buffer control **/
+
+ /*
+ * Get buffer occupancy (A/V) when playing this stream.
+ */
+ DFBResult (*GetBufferOccupancy) (
+ IDirectFBVideoProvider *thiz,
+ DFBBufferOccupancy *ret_occ
+ );
+
+ /*
+ * Set buffer thresholds for the Audio / Video playback.
+ */
+ DFBResult (*SetBufferThresholds) (
+ IDirectFBVideoProvider *thiz,
+ DFBBufferThresholds thresh
+ );
+
+ /*
+ * Get buffer thresholds for the Audio / Video playback.
+ */
+ DFBResult (*GetBufferThresholds) (
+ IDirectFBVideoProvider *thiz,
+ DFBBufferThresholds *ret_thresh
+ );
+)
+
+/***********************
+ * IDirectFBDataBuffer *
+ ***********************/
+
+/*
+ * <i>No summary yet...</i>
+ */
+DEFINE_INTERFACE( IDirectFBDataBuffer,
+
+
+ /** Buffer handling **/
+
+ /*
+ * Flushes all data in this buffer.
+ *
+ * This method only applies to streaming buffers.
+ */
+ DFBResult (*Flush) (
+ IDirectFBDataBuffer *thiz
+ );
+
+ /*
+ * Finish writing into a streaming buffer.
+ *
+ * Subsequent calls to PutData will fail,
+ * while attempts to fetch data from the buffer will return EOF
+ * unless there is still data available.
+ */
+ DFBResult (*Finish) (
+ IDirectFBDataBuffer *thiz
+ );
+
+ /*
+ * Seeks to a given byte position.
+ *
+ * This method only applies to static buffers.
+ */
+ DFBResult (*SeekTo) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int offset
+ );
+
+ /*
+ * Get the current byte position within a static buffer.
+ *
+ * This method only applies to static buffers.
+ */
+ DFBResult (*GetPosition) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int *ret_offset
+ );
+
+ /*
+ * Get the length of a static or streaming buffer in bytes.
+ *
+ * The length of a static buffer is its static size.
+ * A streaming buffer has a variable length reflecting
+ * the amount of buffered data.
+ */
+ DFBResult (*GetLength) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int *ret_length
+ );
+
+ /** Waiting for data **/
+
+ /*
+ * Wait for data to be available.
+ * Thread is idle in the meantime.
+ *
+ * This method blocks until at least the specified number of bytes
+ * is available.
+ */
+ DFBResult (*WaitForData) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int length
+ );
+
+ /*
+ * Wait for data to be available within an amount of time.
+ * Thread is idle in the meantime.
+ *
+ * This method blocks until at least the specified number of bytes
+ * is available or the timeout is reached.
+ */
+ DFBResult (*WaitForDataWithTimeout) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int length,
+ unsigned int seconds,
+ unsigned int milli_seconds
+ );
+
+
+ /** Retrieving data **/
+
+ /*
+ * Fetch data from a streaming or static buffer.
+ *
+ * Static buffers will increase the data pointer.
+ * Streaming buffers will flush the data portion.
+ *
+ * The maximum number of bytes to fetch is specified by "length",
+ * the actual number of bytes fetched is returned via "read".
+ */
+ DFBResult (*GetData) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int length,
+ void *ret_data,
+ unsigned int *ret_read
+ );
+
+ /*
+ * Peek data from a streaming or static buffer.
+ *
+ * Unlike GetData() this method won't increase the data
+ * pointer or flush any portions of the data held.
+ *
+ * Additionally an offset relative to the current data pointer
+ * or beginning of the streaming buffer can be specified.
+ *
+ * The maximum number of bytes to peek is specified by "length",
+ * the actual number of bytes peeked is returned via "read".
+ */
+ DFBResult (*PeekData) (
+ IDirectFBDataBuffer *thiz,
+ unsigned int length,
+ int offset,
+ void *ret_data,
+ unsigned int *ret_read
+ );
+
+ /*
+ * Check if there is data available.
+ *
+ * This method returns DFB_OK if there is data available,
+ * DFB_BUFFER_EMPTY otherwise.
+ */
+ DFBResult (*HasData) (
+ IDirectFBDataBuffer *thiz
+ );
+
+
+ /** Providing data **/
+
+ /*
+ * Appends a block of data to a streaming buffer.
+ *
+ * This method does not wait until the data got fetched.
+ *
+ * Static buffers don't support this method.
+ */
+ DFBResult (*PutData) (
+ IDirectFBDataBuffer *thiz,
+ const void *data,
+ unsigned int length
+ );
+
+
+ /** Media from data **/
+
+ /*
+ * Creates an image provider using the buffers data.
+ */
+ DFBResult (*CreateImageProvider) (
+ IDirectFBDataBuffer *thiz,
+ IDirectFBImageProvider **interface
+ );
+
+ /*
+ * Creates a video provider using the buffers data.
+ */
+ DFBResult (*CreateVideoProvider) (
+ IDirectFBDataBuffer *thiz,
+ IDirectFBVideoProvider **interface
+ );
+
+ /*
+ * Load a font using the buffer's data, given a description
+ * of how to load the glyphs.
+ */
+ DFBResult (*CreateFont) (
+ IDirectFBDataBuffer *thiz,
+ const DFBFontDescription *desc,
+ IDirectFBFont **interface
+ );
+)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif