18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project**
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms.
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project**
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful,
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details.
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _ANDROID_SKIN_COMPOSER_H
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _ANDROID_SKIN_COMPOSER_H
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "android/skin/rect.h"
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "android/skin/region.h"
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "android/utils/reflist.h"
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* the composer displays stacked surfaces on a target window/SDL_Surface */
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum {
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SKIN_PLATE_SURFACE = 0,
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SKIN_PLATE_GROUP,
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SKIN_PLATE_SPACE
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinPlateType;
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef union SkinPlate      SkinPlate;
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinViewport  SkinViewport;
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinPlateAny {
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPlateType    type;         /* class pointer */
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPlate*       parent;       /* parent container */
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPos          pos;          /* position relative to parent */
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRegion       region[1];    /* the plate's region */
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char             isVisible;    /* flag: TRUE iff the region is visible */
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char             isOpaque;     /* flag: TRUE iff the region is opaque */
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*SkinPlateDrawFunc)( void*  user, SkinRegion*  region, SkinPos*  apos, SkinViewport*  viewport, int  opaque );
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*SkinPlateDoneFunc)( void*  user );
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinPlateSurface {
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateAny   any;
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void*                 user;
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPlateDrawFunc     draw;
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPlateDoneFunc     done;
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinPlateGroup {
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateAny   any;
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char                  hasRegion;
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char                  hasOpaqueRegion;
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRegion            opaqueRegion[1];
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ARefList              children[1];
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinPlateSpace {
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateGroup   group;
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ARefList                viewports[1];
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectunion SkinPlate {
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateAny        any;
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateSurface    surface;
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateGroup      group;
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPlateSpace      space;
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinPlate*   skin_plate_surface( SkinPlate*         parent,
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        SkinPos*           pos,
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        SkinRegion*        region,
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        void*              user,
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        SkinPlateDrawFunc  draw,
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        SkinPlateDoneFunc  done );
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinPlate*   skin_plate_group( SkinPlate*  parent, SkinPos*  pos );
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinPlate*   skin_plate_space( void );
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void  skin_plate_free( SkinPlate*  plate );
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void  skin_plate_invalidate( SkinPlate*  plate, SkinRegion*  region );
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void  skin_plate_set_pos( SkinPlate*  plate, int  x, int  y );
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void  skin_plate_set_visible( SkinPlate*  plate, int  isVisible );
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void  skin_plate_set_opaque( SkinPlate* plate, int  isOpaque );
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinViewport {
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPlate*  space;
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRect    rect;
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void*       surface;
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPos     spos;
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRegion  update[1];
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinViewport*  skin_viewport( SkinPlate*  space, SkinRect*  rect, void*  surface, int  sx, int  sy );
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void           skin_viewport_free( SkinViewport*  v );
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void           skin_viewport_invalidate( SkinViewport*  v, SkinRegion*  r );
1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void           skin_viewport_redraw( SkinViewport*  v );
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _ANDROID_SKIN_COMPOSER_H */
103