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_FILE_H
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _ANDROID_SKIN_FILE_H
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "android/skin/image.h"
1673dd5fc7da33280597dc6302ad8116d3723ebf3eDavid 'Digit' Turner#include "android/config-file.h"
17e3fdd075ed97085b4201cb0c79609633b19bddccDavid 'Digit' Turner#include "android/framebuffer.h"
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/**  Layout
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinBackground {
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinImage*  image;
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRect    rect;
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char        valid;
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinBackground;
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinDisplay {
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRect      rect;      /* display rectangle    */
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRotation  rotation;  /* framebuffer rotation */
3197d795c955f8d261a0a5294d49ea06d5a473ed03David 'Digit' Turner    int           bpp;       /* bits per pixel, 32 or 16 */
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char          valid;
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    QFrameBuffer  qfbuff[1];
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinDisplay;
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinButton {
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinButton*  next;
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    const char*         name;
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinImage*          image;
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRect            rect;
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    unsigned            keycode;
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinButton;
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinPart {
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinPart*   next;
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    const char*        name;
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinBackground     background[1];
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinDisplay        display[1];
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinButton*        buttons;
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRect           rect;    /* bounding box of all parts */
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinPart;
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_PART_LOOP_BUTTONS(part,button)              \
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    do {                                                  \
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        SkinButton*  __button = (part)->buttons;          \
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        while (__button != NULL) {                        \
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinButton*  __button_next = __button->next;  \
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinButton*  button        = __button;
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define   SKIN_PART_LOOP_END             \
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            __button = __button_next;    \
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        }                                \
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } while (0);
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinLocation {
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPart*             part;
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPos               anchor;
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinRotation          rotation;
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinLocation*  next;
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinLocation;
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinLayout {
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct SkinLayout*  next;
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    const char*         name;
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    unsigned            color;
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int                 event_type;
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int                 event_code;
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int                 event_value;
7987250c24aec9449eb615951cf537a2fcf709f1d8David 'Digit' Turner    char                has_dpad_rotation;
8087250c24aec9449eb615951cf537a2fcf709f1d8David 'Digit' Turner    SkinRotation        dpad_rotation;
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinSize            size;
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinLocation*       locations;
83a95a4dc1d37f9fa2f133e750312ee5c3440c4710Arthur Blume    SkinImage*          onion_image;
84a95a4dc1d37f9fa2f133e750312ee5c3440c4710Arthur Blume    int                 onion_alpha;
85a95a4dc1d37f9fa2f133e750312ee5c3440c4710Arthur Blume    SkinRotation        onion_rotation;
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinLayout;
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_LAYOUT_LOOP_LOCS(layout,loc)               \
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    do {                                                 \
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        SkinLocation*  __loc = (layout)->locations;      \
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        while (__loc != NULL) {                          \
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinLocation*  __loc_next = (__loc)->next;   \
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinLocation*  loc        = __loc;
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_LAYOUT_LOOP_END   \
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            __loc = __loc_next; \
978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        }                       \
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } while (0);
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinDisplay*   skin_layout_get_display( SkinLayout*  layout );
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinRotation   skin_layout_get_dpad_rotation( SkinLayout*  layout );
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinFile {
10559e8e1969c6543cc9375b1a4372ef2e3e8afa183David 'Digit' Turner    int             version;  /* 1, 2 or 3 */
1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinPart*       parts;
1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    SkinLayout*     layouts;
1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int             num_parts;
1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int             num_layouts;
1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinFile;
1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_FILE_LOOP_LAYOUTS(file,layout)             \
1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    do {                                                 \
1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        SkinLayout*  __layout = (file)->layouts;         \
1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        while (__layout != NULL) {                       \
1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinLayout*  __layout_next = __layout->next; \
1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinLayout*  layout        = __layout;
1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_FILE_LOOP_END_LAYOUTS       \
1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            __layout = __layout_next;     \
1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        }                                 \
1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } while (0);
1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_FILE_LOOP_PARTS(file,part)                 \
1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    do {                                                 \
1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        SkinPart*   __part = (file)->parts;              \
1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        while (__part != NULL) {                         \
1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinPart*  __part_next = __part->next;       \
1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            SkinPart*  part        = __part;
1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  SKIN_FILE_LOOP_END_PARTS  \
1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            __part = __part_next;  \
1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        }                          \
1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } while (0);
1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinFile*  skin_file_create_from_aconfig( AConfig*   aconfig, const char*  basepath );
1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void       skin_file_free( SkinFile*  file );
1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _ANDROID_SKIN_FILE_H */
140