1/* Copyright (C) 2007-2008 The Android Open Source Project 2** 3** This software is licensed under the terms of the GNU General Public 4** License version 2, as published by the Free Software Foundation, and 5** may be copied, distributed, and modified under those terms. 6** 7** This program is distributed in the hope that it will be useful, 8** but WITHOUT ANY WARRANTY; without even the implied warranty of 9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10** GNU General Public License for more details. 11*/ 12#ifndef _ANDROID_SKIN_COMPOSER_H 13#define _ANDROID_SKIN_COMPOSER_H 14 15#include "android/skin/rect.h" 16#include "android/skin/region.h" 17#include "android/utils/reflist.h" 18 19/* the composer displays stacked surfaces on a target window/SDL_Surface */ 20 21typedef enum { 22 SKIN_PLATE_SURFACE = 0, 23 SKIN_PLATE_GROUP, 24 SKIN_PLATE_SPACE 25} SkinPlateType; 26 27typedef union SkinPlate SkinPlate; 28typedef struct SkinViewport SkinViewport; 29 30struct SkinPlateAny { 31 SkinPlateType type; /* class pointer */ 32 SkinPlate* parent; /* parent container */ 33 SkinPos pos; /* position relative to parent */ 34 SkinRegion region[1]; /* the plate's region */ 35 char isVisible; /* flag: TRUE iff the region is visible */ 36 char isOpaque; /* flag: TRUE iff the region is opaque */ 37}; 38 39 40typedef void (*SkinPlateDrawFunc)( void* user, SkinRegion* region, SkinPos* apos, SkinViewport* viewport, int opaque ); 41typedef void (*SkinPlateDoneFunc)( void* user ); 42 43struct SkinPlateSurface { 44 struct SkinPlateAny any; 45 void* user; 46 SkinPlateDrawFunc draw; 47 SkinPlateDoneFunc done; 48}; 49 50struct SkinPlateGroup { 51 struct SkinPlateAny any; 52 char hasRegion; 53 char hasOpaqueRegion; 54 SkinRegion opaqueRegion[1]; 55 ARefList children[1]; 56}; 57 58struct SkinPlateSpace { 59 struct SkinPlateGroup group; 60 ARefList viewports[1]; 61}; 62 63 64union SkinPlate { 65 struct SkinPlateAny any; 66 struct SkinPlateSurface surface; 67 struct SkinPlateGroup group; 68 struct SkinPlateSpace space; 69}; 70 71 72extern SkinPlate* skin_plate_surface( SkinPlate* parent, 73 SkinPos* pos, 74 SkinRegion* region, 75 void* user, 76 SkinPlateDrawFunc draw, 77 SkinPlateDoneFunc done ); 78 79extern SkinPlate* skin_plate_group( SkinPlate* parent, SkinPos* pos ); 80 81extern SkinPlate* skin_plate_space( void ); 82 83extern void skin_plate_free( SkinPlate* plate ); 84extern void skin_plate_invalidate( SkinPlate* plate, SkinRegion* region ); 85extern void skin_plate_set_pos( SkinPlate* plate, int x, int y ); 86extern void skin_plate_set_visible( SkinPlate* plate, int isVisible ); 87extern void skin_plate_set_opaque( SkinPlate* plate, int isOpaque ); 88 89struct SkinViewport { 90 SkinPlate* space; 91 SkinRect rect; 92 void* surface; 93 SkinPos spos; 94 SkinRegion update[1]; 95}; 96 97extern SkinViewport* skin_viewport( SkinPlate* space, SkinRect* rect, void* surface, int sx, int sy ); 98extern void skin_viewport_free( SkinViewport* v ); 99extern void skin_viewport_invalidate( SkinViewport* v, SkinRegion* r ); 100extern void skin_viewport_redraw( SkinViewport* v ); 101 102#endif /* _ANDROID_SKIN_COMPOSER_H */ 103