diff options
Diffstat (limited to 'android/skin/composer.h')
-rw-r--r-- | android/skin/composer.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/android/skin/composer.h b/android/skin/composer.h new file mode 100644 index 0000000..a52a972 --- /dev/null +++ b/android/skin/composer.h @@ -0,0 +1,102 @@ +/* Copyright (C) 2007-2008 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program 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 General Public License for more details. +*/ +#ifndef _ANDROID_SKIN_COMPOSER_H +#define _ANDROID_SKIN_COMPOSER_H + +#include "android/skin/rect.h" +#include "android/skin/region.h" +#include "android/utils/reflist.h" + +/* the composer displays stacked surfaces on a target window/SDL_Surface */ + +typedef enum { + SKIN_PLATE_SURFACE = 0, + SKIN_PLATE_GROUP, + SKIN_PLATE_SPACE +} SkinPlateType; + +typedef union SkinPlate SkinPlate; +typedef struct SkinViewport SkinViewport; + +struct SkinPlateAny { + SkinPlateType type; /* class pointer */ + SkinPlate* parent; /* parent container */ + SkinPos pos; /* position relative to parent */ + SkinRegion region[1]; /* the plate's region */ + char isVisible; /* flag: TRUE iff the region is visible */ + char isOpaque; /* flag: TRUE iff the region is opaque */ +}; + + +typedef void (*SkinPlateDrawFunc)( void* user, SkinRegion* region, SkinPos* apos, SkinViewport* viewport, int opaque ); +typedef void (*SkinPlateDoneFunc)( void* user ); + +struct SkinPlateSurface { + struct SkinPlateAny any; + void* user; + SkinPlateDrawFunc draw; + SkinPlateDoneFunc done; +}; + +struct SkinPlateGroup { + struct SkinPlateAny any; + char hasRegion; + char hasOpaqueRegion; + SkinRegion opaqueRegion[1]; + ARefList children[1]; +}; + +struct SkinPlateSpace { + struct SkinPlateGroup group; + ARefList viewports[1]; +}; + + +union SkinPlate { + struct SkinPlateAny any; + struct SkinPlateSurface surface; + struct SkinPlateGroup group; + struct SkinPlateSpace space; +}; + + +extern SkinPlate* skin_plate_surface( SkinPlate* parent, + SkinPos* pos, + SkinRegion* region, + void* user, + SkinPlateDrawFunc draw, + SkinPlateDoneFunc done ); + +extern SkinPlate* skin_plate_group( SkinPlate* parent, SkinPos* pos ); + +extern SkinPlate* skin_plate_space( void ); + +extern void skin_plate_free( SkinPlate* plate ); +extern void skin_plate_invalidate( SkinPlate* plate, SkinRegion* region ); +extern void skin_plate_set_pos( SkinPlate* plate, int x, int y ); +extern void skin_plate_set_visible( SkinPlate* plate, int isVisible ); +extern void skin_plate_set_opaque( SkinPlate* plate, int isOpaque ); + +struct SkinViewport { + SkinPlate* space; + SkinRect rect; + void* surface; + SkinPos spos; + SkinRegion update[1]; +}; + +extern SkinViewport* skin_viewport( SkinPlate* space, SkinRect* rect, void* surface, int sx, int sy ); +extern void skin_viewport_free( SkinViewport* v ); +extern void skin_viewport_invalidate( SkinViewport* v, SkinRegion* r ); +extern void skin_viewport_redraw( SkinViewport* v ); + +#endif /* _ANDROID_SKIN_COMPOSER_H */ |