file.h revision 73dd5fc7da33280597dc6302ad8116d3723ebf3e
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_FILE_H 13#define _ANDROID_SKIN_FILE_H 14 15#include "android/skin/image.h" 16#include "android/config-file.h" 17#include "android/framebuffer.h" 18 19/** Layout 20 **/ 21 22typedef struct SkinBackground { 23 SkinImage* image; 24 SkinRect rect; 25 char valid; 26} SkinBackground; 27 28typedef struct SkinDisplay { 29 SkinRect rect; /* display rectangle */ 30 SkinRotation rotation; /* framebuffer rotation */ 31 int bpp; /* bits per pixel, 32 or 16 */ 32 char valid; 33 QFrameBuffer qfbuff[1]; 34} SkinDisplay; 35 36typedef struct SkinButton { 37 struct SkinButton* next; 38 const char* name; 39 SkinImage* image; 40 SkinRect rect; 41 unsigned keycode; 42} SkinButton; 43 44typedef struct SkinPart { 45 struct SkinPart* next; 46 const char* name; 47 SkinBackground background[1]; 48 SkinDisplay display[1]; 49 SkinButton* buttons; 50 SkinRect rect; /* bounding box of all parts */ 51} SkinPart; 52 53#define SKIN_PART_LOOP_BUTTONS(part,button) \ 54 do { \ 55 SkinButton* __button = (part)->buttons; \ 56 while (__button != NULL) { \ 57 SkinButton* __button_next = __button->next; \ 58 SkinButton* button = __button; 59 60#define SKIN_PART_LOOP_END \ 61 __button = __button_next; \ 62 } \ 63 } while (0); 64 65typedef struct SkinLocation { 66 SkinPart* part; 67 SkinPos anchor; 68 SkinRotation rotation; 69 struct SkinLocation* next; 70} SkinLocation; 71 72typedef struct SkinLayout { 73 struct SkinLayout* next; 74 const char* name; 75 unsigned color; 76 int event_type; 77 int event_code; 78 int event_value; 79 char has_dpad_rotation; 80 SkinRotation dpad_rotation; 81 SkinSize size; 82 SkinLocation* locations; 83} SkinLayout; 84 85#define SKIN_LAYOUT_LOOP_LOCS(layout,loc) \ 86 do { \ 87 SkinLocation* __loc = (layout)->locations; \ 88 while (__loc != NULL) { \ 89 SkinLocation* __loc_next = (__loc)->next; \ 90 SkinLocation* loc = __loc; 91 92#define SKIN_LAYOUT_LOOP_END \ 93 __loc = __loc_next; \ 94 } \ 95 } while (0); 96 97extern SkinDisplay* skin_layout_get_display( SkinLayout* layout ); 98 99extern SkinRotation skin_layout_get_dpad_rotation( SkinLayout* layout ); 100 101typedef struct SkinFile { 102 int version; /* 1, 2 or 3 */ 103 SkinPart* parts; 104 SkinLayout* layouts; 105 int num_parts; 106 int num_layouts; 107} SkinFile; 108 109#define SKIN_FILE_LOOP_LAYOUTS(file,layout) \ 110 do { \ 111 SkinLayout* __layout = (file)->layouts; \ 112 while (__layout != NULL) { \ 113 SkinLayout* __layout_next = __layout->next; \ 114 SkinLayout* layout = __layout; 115 116#define SKIN_FILE_LOOP_END_LAYOUTS \ 117 __layout = __layout_next; \ 118 } \ 119 } while (0); 120 121#define SKIN_FILE_LOOP_PARTS(file,part) \ 122 do { \ 123 SkinPart* __part = (file)->parts; \ 124 while (__part != NULL) { \ 125 SkinPart* __part_next = __part->next; \ 126 SkinPart* part = __part; 127 128#define SKIN_FILE_LOOP_END_PARTS \ 129 __part = __part_next; \ 130 } \ 131 } while (0); 132 133extern SkinFile* skin_file_create_from_aconfig( AConfig* aconfig, const char* basepath ); 134extern void skin_file_free( SkinFile* file ); 135 136#endif /* _ANDROID_SKIN_FILE_H */ 137