From 7fe60435bce6595a9c58a9bfd8244d74b5320e96 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 15 Jan 2013 08:46:13 +0100 Subject: Import DirectFB141_2k11R3_beta5 --- Source/SaWMan/include/sawman.h | 519 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 519 insertions(+) create mode 100755 Source/SaWMan/include/sawman.h (limited to 'Source/SaWMan/include/sawman.h') diff --git a/Source/SaWMan/include/sawman.h b/Source/SaWMan/include/sawman.h new file mode 100755 index 0000000..fa0fbbb --- /dev/null +++ b/Source/SaWMan/include/sawman.h @@ -0,0 +1,519 @@ +/* + (c) Copyright 2006-2007 directfb.org + + All rights reserved. + + Written by Denis Oliver Kropp . + + 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 __SAWMAN_H__ +#define __SAWMAN_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include +#include + +#include "sawman_types.h" + +/* + * Main SaWMan interface for all executables including start/stop of other applications. + */ +DECLARE_INTERFACE( ISaWMan ) + +/* + * Manager interface to be created only once for the application manager executable. + */ +DECLARE_INTERFACE( ISaWManManager ) + + +DirectResult SaWManInit ( int *argc, + char ***argv ); + +DirectResult SaWManCreate( ISaWMan **ret_sawman ); + +/* + * Public SaWMan types + */ + +typedef enum { + SWMWF_NONE = 0x00000000, + + SWMWF_INSERTED = 0x00000001, + + SWMWF_FOCUSED = 0x00000002, /* only used for GetWindowInfo */ + SWMWF_ENTERED = 0x00000004, /* only used for GetWindowInfo */ + + SWMWF_UPDATING = 0x00000010, + + SWMWF_ALL = 0x00000017 +} SaWManWindowFlags; + + +typedef enum { + SWMSM_SMOOTH_SW, /* Smooth scaling algorithm in software */ + SWMSM_STANDARD /* As provided by hardware, otherwise software (nearest neighbor) */ +} SaWManScalingMode; + + +typedef enum { + SWMPF_NONE = 0x00000000, + + SWMPF_MASTER = 0x00000001, + SWMPF_MANAGER = 0x00000002, + + SWMPF_EXITING = 0x00000010, + + SWMPF_ALL = 0x00000013 +} SaWManProcessFlags; + + +/* defines stacking relation. + * If 2 valid window handles are passed, defines relative order of 1st towards 2nd + * If only 1 handle is valid (2nd is WINDOW_NONE), defines location in complete stack */ +typedef enum { + SWMWR_TOP, + SWMWR_BOTTOM +} SaWManWindowRelation; + + +typedef struct { + DirectLink link; + + int magic; + + pid_t pid; + FusionID fusion_id; + SaWManProcessFlags flags; + + FusionRef ref; +} SaWManProcess; + + +typedef unsigned long SaWManWindowHandle; +#define SAWMAN_WINDOW_NONE ((SaWManWindowHandle) 0) + + +typedef enum { + SWMCF_NONE = 0x00000000, + + SWMCF_POSITION = 0x00000001, + SWMCF_SIZE = 0x00000002, + SWMCF_OPACITY = 0x00000004, + SWMCF_STACKING = 0x00000008, + + SWMCF_OPTIONS = 0x00000010, + SWMCF_EVENTS = 0x00000020, + + SWMCF_COLOR_KEY = 0x00000100, + SWMCF_OPAQUE = 0x00000200, + SWMCF_COLOR = 0x00000400, + + SWMCF_KEY_SELECTION = 0x00001000, + + SWMCF_ASSOCIATION = 0x00002000, + SWMCF_CURSOR_FLAGS = 0x00004000, + SWMCF_CURSOR_RESOLUTION = 0x00008000, + + SWMCF_SRC_GEOMETRY = 0x00010000, + SWMCF_DST_GEOMETRY = 0x00020000, + + SWMCF_ALL = 0x0003F73F +} SaWManWindowConfigFlags; + +typedef struct { + DFBRectangle bounds; /* position and size */ + int opacity; /* global alpha factor */ + DFBWindowStackingClass stacking; /* level boundaries */ + DFBWindowOptions options; /* flags for appearance/behaviour */ + + DFBWindowEventType events; /* mask of enabled events */ + DFBColor color; /* constant color (no surface needed) */ + u32 color_key; /* transparent pixel */ + DFBRegion opaque; /* region of the window forced to be opaque */ + + DFBWindowKeySelection key_selection; /* how to filter keys in focus */ + DFBInputDeviceKeySymbol *keys; /* list of keys for DWKS_LIST */ + unsigned int num_keys; /* number of entries in key array */ + + DFBWindowID association; /* ID of window which this is associated to */ + + DFBWindowGeometry src_geometry; /* advanced source geometry */ + DFBWindowGeometry dst_geometry; /* advanced destination geometry */ + + DFBWindowCursorFlags cursor_flags; + DFBDimension cursor_resolution; +} SaWManWindowConfig; + +typedef struct { + SaWManWindowHandle handle; + + DFBWindowCapabilities caps; + SaWManWindowConfig config; + + unsigned long resource_id; + DFBWindowID win_id; + + SaWManWindowFlags flags; +} SaWManWindowInfo; + +typedef struct { + SaWManWindowHandle handle; + + DFBWindowCapabilities caps; /* window capabilities, RO */ + + SaWManWindowConfigFlags flags; /* applicability of below values */ + SaWManWindowConfig current; + SaWManWindowConfig request; +} SaWManWindowReconfig; + +typedef struct { + DFBDisplayLayerID layer_id; + + SaWManWindowHandle single; + DFBDisplayLayerConfig config; +} SaWManLayerReconfig; + +/* + * Callbacks, to be used together with the SaWMan Manager interface + */ + +typedef struct { + DirectResult (*Start) ( void *context, + const char *name, + pid_t *ret_pid ); + + DirectResult (*Stop) ( void *context, + pid_t pid, + FusionID caller ); + + + + DirectResult (*ProcessAdded) ( void *context, + SaWManProcess *process ); + + DirectResult (*ProcessRemoved) ( void *context, + SaWManProcess *process ); + + + + DirectResult (*InputFilter) ( void *context, + DFBInputEvent *event ); + + + + DirectResult (*WindowPreConfig)( void *context, + SaWManWindowConfig *config ); + + + + DirectResult (*WindowAdded) ( void *context, + SaWManWindowInfo *info ); + + DirectResult (*WindowRemoved) ( void *context, + SaWManWindowInfo *info ); + + + + DirectResult (*WindowReconfig) ( void *context, + SaWManWindowReconfig *reconfig ); + + DirectResult (*WindowRestack) ( void *context, + SaWManWindowHandle handle, + SaWManWindowHandle relative, + SaWManWindowRelation relation ); + + DirectResult (*SwitchFocus) ( void *context, + SaWManWindowHandle handle ); + + + + DirectResult (*StackResized) ( void *context, + const DFBDimension *size ); + + DirectResult (*LayerReconfig) ( void *context, + SaWManLayerReconfig *reconfig ); + +} SaWManCallbacks; + +/*********** + * ISaWMan * + ***********/ + +/* + * Main entry point for clients of SaWMan. + * Can be used to start/stop external applications and return not-wanted keys to the key collector. + * Also used to create the singleton Window Manager interface. + */ +DEFINE_INTERFACE( ISaWMan, + + /** Applications **/ + + /* + * Start an application. + */ + DirectResult (*Start) ( + ISaWMan *thiz, + const char *name, + pid_t *ret_pid + ); + + /* + * Stop an application. + * + * Use 0 pid to indicate to kill all but me + */ + DirectResult (*Stop) ( + ISaWMan *thiz, + pid_t pid + ); + + + /** Event handling **/ + + /* + * Returns a received key event. + * + * This sends the key event to the key collector. + * In the flags field of the event structure DWEF_RETURNED will be set. + */ + DirectResult (*ReturnKeyEvent) ( + ISaWMan *thiz, + DFBWindowEvent *event + ); + + + /** Manager **/ + + /* + * Create the manager interface. + * + * This only works once and is called by the application manager executable. + */ + DirectResult (*CreateManager) ( + ISaWMan *thiz, + const SaWManCallbacks *callbacks, + void *context, + ISaWManManager **ret_manager + ); + + + /** Updates **/ + + /* + * Get updates. + */ + DirectResult (*GetUpdates) ( + ISaWMan *thiz, + DFBWindowStackingClass stacking_class, + DFBRegion *ret_updates, + unsigned int *ret_num + ); +) + + +/****************** + * ISaWManManager * + ******************/ + +/* + * Manages SaWMan. + * used to request and deny regular window activties like close, remove, switch focus. + * To be used together with the callbacks given to ISaWMan::CreateManager(). + */ +DEFINE_INTERFACE( ISaWManManager, + + /** Updates **/ + + /* + * Queue an update of the screen, e.g. due to layout changes. + * + * If region is NULL the whole screen will be updated. + */ + DirectResult (*QueueUpdate) ( + ISaWManManager *thiz, + DFBWindowStackingClass stacking, + const DFBRegion *region + ); + + /* + * Process queued updates. + */ + DirectResult (*ProcessUpdates) ( + ISaWManManager *thiz, + DFBSurfaceFlipFlags flags + ); + + + /** Windows **/ + + /* + * Send a close request to a window. + */ + DirectResult (*CloseWindow) ( + ISaWManManager *thiz, + SaWManWindowHandle handle + ); + + /* + * Show or hide a window. + */ + DirectResult (*SetVisible) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + DFBBoolean visible + ); + + /* + * Switches focus to a window. + */ + DirectResult (*SwitchFocus) ( + ISaWManManager *thiz, + SaWManWindowHandle handle + ); + + + /** Stack **/ + + /* + * Get the dimensions of the stack. + */ + DirectResult (*GetSize) ( + ISaWManManager *thiz, + DFBWindowStackingClass stacking, + DFBDimension *ret_size + ); + + /* + * Insert a window that has been added. + * + * If no relative is specified, the window will be inserted at the top or bottom most + * position in its stacking class. Otherwise the window will be inserted on top of or below the + * relative. + */ + DirectResult (*InsertWindow) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + SaWManWindowHandle relative, + SaWManWindowRelation relation + ); + + /* + * Remove a window. + */ + DirectResult (*RemoveWindow) ( + ISaWManManager *thiz, + SaWManWindowHandle handle + ); + + + /** Configuration **/ + + /* + * Choose scaling quality. + */ + DirectResult (*SetScalingMode) ( + ISaWManManager *thiz, + SaWManScalingMode mode + ); + + DirectResult (*SetWindowConfig) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + SaWManWindowConfigFlags flags, + SaWManWindowConfig *config + ); + + /** Event handling **/ + + /* + * Send an event to a window. + * + * This sends an event to the window specified by the handle. + */ + DirectResult (*SendWindowEvent) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + const DFBWindowEvent *event + ); + + + /** Locking **/ + + /* + * Lock SaWMan for calls to this interface and access to data structures. + */ + DirectResult (*Lock) ( + ISaWManManager *thiz + ); + + /* + * Unlock SaWMan. + */ + DirectResult (*Unlock) ( + ISaWManManager *thiz + ); + + /** Information retrieval **/ + + /* + * Returns window information of the requested window. + * + * The window information will be copied into the provided structure, + * except info->config.keys which will be a pointer to the internal table, + * so do not change the content of this table with this function. + */ + DirectResult (*GetWindowInfo) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + SaWManWindowInfo *ret_info + ); + + /* + * Returns process information of the requested window. + * + * The process information will be copied into the provided structure. + */ + DirectResult (*GetProcessInfo) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + SaWManProcess *ret_process + ); + + /* + * Determines visibility of a window. + */ + DirectResult (*IsWindowShowing) ( + ISaWManManager *thiz, + SaWManWindowHandle handle, + DFBBoolean *ret_showing + ); +) + + +#ifdef __cplusplus +} +#endif + +#endif + -- cgit