file.h revision 97d795c955f8d261a0a5294d49ea06d5a473ed03
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" 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "android/config.h" 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "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; 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinLayout; 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_LAYOUT_LOOP_LOCS(layout,loc) \ 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project do { \ 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLocation* __loc = (layout)->locations; \ 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project while (__loc != NULL) { \ 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLocation* __loc_next = (__loc)->next; \ 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLocation* loc = __loc; 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_LAYOUT_LOOP_END \ 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project __loc = __loc_next; \ 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } \ 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } while (0); 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinDisplay* skin_layout_get_display( SkinLayout* layout ); 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinRotation skin_layout_get_dpad_rotation( SkinLayout* layout ); 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinFile { 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinPart* parts; 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLayout* layouts; 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int num_parts; 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int num_layouts; 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SkinFile; 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_FILE_LOOP_LAYOUTS(file,layout) \ 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project do { \ 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLayout* __layout = (file)->layouts; \ 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project while (__layout != NULL) { \ 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLayout* __layout_next = __layout->next; \ 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinLayout* layout = __layout; 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_FILE_LOOP_END_LAYOUTS \ 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project __layout = __layout_next; \ 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } \ 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } while (0); 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_FILE_LOOP_PARTS(file,part) \ 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project do { \ 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinPart* __part = (file)->parts; \ 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project while (__part != NULL) { \ 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinPart* __part_next = __part->next; \ 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinPart* part = __part; 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_FILE_LOOP_END_PARTS \ 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project __part = __part_next; \ 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } \ 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } while (0); 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinFile* skin_file_create_from_aconfig( AConfig* aconfig, const char* basepath ); 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_file_free( SkinFile* file ); 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _ANDROID_SKIN_FILE_H */ 136