blob: a52a972adbce3a8b3ec9ffc37992ce1264ec43f1 [file] [log] [blame]
/* 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 */