/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2007 Nicolas Pennequin * Copyright (C) 2009 Jonathan Gordon * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #ifndef _SKIN_ENGINE_H #define _SKIN_ENGINE_H #ifndef PLUGIN #include "skin_fonts.h" #include "tag_table.h" #include "wps_internals.h" /* TODO: remove this line.. shoudlnt be needed */ enum skinnable_screens { CUSTOM_STATUSBAR, WPS, #if CONFIG_TUNER FM_SCREEN, #endif SKINNABLE_SCREENS_COUNT }; #ifdef HAVE_LCD_BITMAP #define MAIN_BUFFER ((2*LCD_HEIGHT*LCD_WIDTH*LCD_DEPTH/8) \ + (SKINNABLE_SCREENS_COUNT * LCD_BACKDROP_BYTES)) #if (NB_SCREENS > 1) #define REMOTE_BUFFER (2*(LCD_REMOTE_HEIGHT*LCD_REMOTE_WIDTH*LCD_REMOTE_DEPTH/8) \ + (SKINNABLE_SCREENS_COUNT * REMOTE_LCD_BACKDROP_BYTES)) #else #define REMOTE_BUFFER 0 #endif #define SKIN_BUFFER_SIZE (MAIN_BUFFER + REMOTE_BUFFER + SKIN_FONT_SIZE) + \ (WPS_MAX_TOKENS * \ (sizeof(struct wps_token) + (sizeof(struct skin_element)))) #endif #ifdef HAVE_LCD_CHARCELLS #define SKIN_BUFFER_SIZE (LCD_HEIGHT * LCD_WIDTH) * 64 + \ (WPS_MAX_TOKENS * \ (sizeof(struct wps_token) + (sizeof(struct skin_element)))) #endif #ifdef HAVE_TOUCHSCREEN int skin_get_touchaction(struct wps_data *data, int* edge_offset, struct touchregion **retregion); void skin_disarm_touchregions(struct wps_data *data); #endif /* Do a update_type update of the skinned screen */ void skin_update(enum skinnable_screens skin, enum screen_type screen, unsigned int update_type); /* * setup up the skin-data from a format-buffer (isfile = false) * or from a skinfile (isfile = true) */ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data, const char *buf, bool isfile); /* call this in statusbar toggle handlers if needed */ void skin_statusbar_changed(struct gui_wps*); bool skin_has_sbs(enum screen_type screen, struct wps_data *data); /* load a backdrop into the skin buffer. * reuse buffers if the file is already loaded */ char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen); void skin_backdrop_init(void); int skin_backdrop_assign(char* backdrop, char *bmpdir, enum screen_type screen); bool skin_backdrops_preload(void); void skin_backdrop_show(int backdrop_id); void skin_backdrop_load_setting(void); void skin_backdrop_unload(int backdrop_id); /* do the button loop as often as required for the peak meters to update * with a good refresh rate. * gwps is really gwps[NB_SCREENS]! don't wrap this in FOR_NB_SCREENS() */ int skin_wait_for_action(enum skinnable_screens skin, int context, int timeout); void skin_load(enum skinnable_screens skin, enum screen_type screen, const char *buf, bool isfile); struct gui_wps *skin_get_gwps(enum skinnable_screens skin, enum screen_type screen); struct wps_state *skin_get_global_state(void); void gui_sync_skin_init(void); bool skin_do_full_update(enum skinnable_screens skin, enum screen_type screen); void skin_request_full_update(enum skinnable_screens skin); #endif /* !PLUGIN */ #endif