/* 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 */