From 6e4b5771c790f013f9929a9430867d0da7b65fd1 Mon Sep 17 00:00:00 2001 From: nls Date: Tue, 18 Sep 2007 19:05:35 +0000 Subject: [PATCH] Simplify initing of the screens[] struct by using an initializer, also some reordering of the struct, and the required plugin api bump git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14743 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugin.h | 4 +- apps/screen_access.c | 440 +++++++++++++++++++++++++-------------------------- apps/screen_access.h | 17 +- 3 files changed, 223 insertions(+), 238 deletions(-) rewrite apps/screen_access.c (75%) diff --git a/apps/plugin.h b/apps/plugin.h index 3971a1357..ab6213850 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -112,12 +112,12 @@ #define PLUGIN_MAGIC 0x526F634B /* RocK */ /* increase this every time the api struct changes */ -#define PLUGIN_API_VERSION 74 +#define PLUGIN_API_VERSION 75 /* update this to latest version if a change to the api struct breaks backwards compatibility (and please take the opportunity to sort in any new function which are "waiting" at the end of the function table) */ -#define PLUGIN_MIN_API_VERSION 74 +#define PLUGIN_MIN_API_VERSION 75 /* plugin return codes */ enum plugin_status { diff --git a/apps/screen_access.c b/apps/screen_access.c dissimilarity index 75% index b5731cf33..251bd7e84 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c @@ -1,224 +1,216 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2005 by Kevin Ferrare - * - * All files in this archive are subject to the GNU General Public License. - * See the file COPYING in the source tree root for full license agreement. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#include -#include -#include "backlight.h" -#include -#include -#include -#include -#include -#include - -#include "screen_access.h" -#include "textarea.h" - -struct screen screens[NB_SCREENS]; - -void screen_init(struct screen * screen, enum screen_type screen_type) -{ - switch(screen_type) - { -#ifdef HAVE_REMOTE_LCD - case SCREEN_REMOTE: - screen->is_color=false;/* No color remotes yet */ - screen->pixel_format=LCD_REMOTE_PIXELFORMAT; - screen->depth=LCD_REMOTE_DEPTH; - screen->has_disk_led=false; - - screen->width=LCD_REMOTE_WIDTH; - screen->height=LCD_REMOTE_HEIGHT; - screen->setmargins=&lcd_remote_setmargins; - screen->getymargin=&lcd_remote_getymargin; - screen->getxmargin=&lcd_remote_getxmargin; - screen->getstringsize=&lcd_remote_getstringsize; -#if 1 /* all remote LCDs are bitmapped so far */ - screen->setfont=&lcd_remote_setfont; - screen->setfont(FONT_UI); - screen->mono_bitmap=&lcd_remote_mono_bitmap; - screen->mono_bitmap_part=&lcd_remote_mono_bitmap_part; - screen->bitmap=(screen_bitmap_func*)&lcd_remote_bitmap; - screen->bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part; - screen->set_drawmode=&lcd_remote_set_drawmode; -#if LCD_REMOTE_DEPTH <= 2 - /* No transparency yet for grayscale and mono lcd */ - screen->transparent_bitmap=(screen_bitmap_func*)&lcd_remote_bitmap; - screen->transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part; - /* No colour remotes yet */ -#endif -#if LCD_REMOTE_DEPTH > 1 -#if defined(HAVE_LCD_COLOR) - screen->color_to_native=&lcd_remote_color_to_native; -#endif - screen->get_background=&lcd_remote_get_background; - screen->get_foreground=&lcd_remote_get_foreground; - screen->set_background=&lcd_remote_set_background; - screen->set_foreground=&lcd_remote_set_foreground; -#endif /* LCD_REMOTE_DEPTH > 1 */ - screen->update_rect=&lcd_remote_update_rect; - screen->fillrect=&lcd_remote_fillrect; - screen->drawrect=&lcd_remote_drawrect; - screen->drawpixel=&lcd_remote_drawpixel; - screen->drawline=&lcd_remote_drawline; - screen->vline=&lcd_remote_vline; - screen->hline=&lcd_remote_hline; - screen->scroll_step=&lcd_remote_scroll_step; - screen->invertscroll=&lcd_remote_invertscroll; - screen->puts_style_offset=&lcd_remote_puts_style_offset; - screen->puts_scroll_style=&lcd_remote_puts_scroll_style; - screen->puts_scroll_style_offset=&lcd_remote_puts_scroll_style_offset; -#endif /* 1 */ - -#if 0 /* no charcell remote LCDs so far */ - screen->double_height=&lcd_remote_double_height; - screen->putc=&lcd_remote_putc; - screen->get_locked_pattern=&lcd_remote_get_locked_pattern; - screen->define_pattern=&lcd_remote_define_pattern; - screen->icon=&lcd_remote_icon; -#endif /* 0 */ - - screen->init=&lcd_remote_init; - screen->putsxy=&lcd_remote_putsxy; - screen->puts=&lcd_remote_puts; - screen->puts_offset=&lcd_remote_puts_offset; - screen->puts_scroll=&lcd_remote_puts_scroll; - screen->puts_scroll_offset=&lcd_remote_puts_scroll_offset; - screen->scroll_speed=&lcd_remote_scroll_speed; - screen->scroll_delay=&lcd_remote_scroll_delay; - screen->stop_scroll=&lcd_remote_stop_scroll; - screen->clear_display=&lcd_remote_clear_display; - screen->update=&lcd_remote_update; - screen->backlight_on=&remote_backlight_on; - screen->backlight_off=&remote_backlight_off; - screen->is_backlight_on=&is_remote_backlight_on; - screen->backlight_set_timeout=&remote_backlight_set_timeout; - break; -#endif /* HAVE_REMOTE_LCD */ - - case SCREEN_MAIN: - default: -#if defined(HAVE_LCD_COLOR) - screen->is_color=true; -#else - screen->is_color=false; -#endif -#ifdef HAVE_LCD_BITMAP - screen->pixel_format=LCD_PIXELFORMAT; -#endif - screen->depth=LCD_DEPTH; -#if (CONFIG_LED == LED_VIRTUAL) - screen->has_disk_led=false; -#elif defined(HAVE_REMOTE_LCD) - screen->has_disk_led=true; -#endif - screen->width=LCD_WIDTH; - screen->height=LCD_HEIGHT; - screen->setmargins=&lcd_setmargins; - screen->getymargin=&lcd_getymargin; - screen->getxmargin=&lcd_getxmargin; - screen->getstringsize=&lcd_getstringsize; -#ifdef HAVE_LCD_BITMAP - screen->setfont=&lcd_setfont; - screen->setfont(FONT_UI); - screen->mono_bitmap=&lcd_mono_bitmap; - screen->mono_bitmap_part=&lcd_mono_bitmap_part; - screen->set_drawmode=&lcd_set_drawmode; - screen->bitmap=(screen_bitmap_func*)&lcd_bitmap; - screen->bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part; -#if LCD_DEPTH <= 2 - /* No transparency yet for grayscale and mono lcd */ - screen->transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap; - screen->transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part; -#else - screen->transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap_transparent; - screen->transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_transparent_part; -#endif -#if LCD_DEPTH > 1 -#if defined(HAVE_LCD_COLOR) && defined(LCD_REMOTE_DEPTH) && LCD_REMOTE_DEPTH > 1 - screen->color_to_native=&lcd_color_to_native; -#endif - screen->get_background=&lcd_get_background; - screen->get_foreground=&lcd_get_foreground; - screen->set_background=&lcd_set_background; - screen->set_foreground=&lcd_set_foreground; -#endif /* LCD_DEPTH > 1 */ - screen->update_rect=&lcd_update_rect; - screen->fillrect=&lcd_fillrect; - screen->drawrect=&lcd_drawrect; - screen->drawpixel=&lcd_drawpixel; - screen->drawline=&lcd_drawline; - screen->vline=&lcd_vline; - screen->hline=&lcd_hline; - screen->scroll_step=&lcd_scroll_step; - screen->invertscroll=&lcd_invertscroll; - screen->puts_style_offset=&lcd_puts_style_offset; - screen->puts_scroll_style=&lcd_puts_scroll_style; - screen->puts_scroll_style_offset=&lcd_puts_scroll_style_offset; -#endif /* HAVE_LCD_BITMAP */ - -#ifdef HAVE_LCD_CHARCELLS - screen->double_height=&lcd_double_height; - screen->putc=&lcd_putc; - screen->get_locked_pattern=&lcd_get_locked_pattern; - screen->define_pattern=&lcd_define_pattern; - screen->unlock_pattern=&lcd_unlock_pattern; - screen->icon=&lcd_icon; -#endif /* HAVE_LCD_CHARCELLS */ - - screen->init=&lcd_init; - screen->putsxy=&lcd_putsxy; - screen->puts=&lcd_puts; - screen->puts_offset=&lcd_puts_offset; - screen->puts_scroll=&lcd_puts_scroll; - screen->puts_scroll_offset=&lcd_puts_scroll_offset; - screen->scroll_speed=&lcd_scroll_speed; - screen->scroll_delay=&lcd_scroll_delay; - screen->stop_scroll=&lcd_stop_scroll; - screen->clear_display=&lcd_clear_display; - screen->update=&lcd_update; - screen->backlight_on=&backlight_on; - screen->backlight_off=&backlight_off; - screen->is_backlight_on=&is_backlight_on; - screen->backlight_set_timeout=&backlight_set_timeout; - break; - } - screen->screen_type=screen_type; -#ifdef HAS_BUTTONBAR - screen->has_buttonbar=false; -#endif - gui_textarea_update_nblines(screen); -} - -#ifdef HAVE_LCD_BITMAP -void screen_clear_area(struct screen * display, int xstart, int ystart, - int width, int height) -{ - display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - display->fillrect(xstart, ystart, width, height); - display->set_drawmode(DRMODE_SOLID); -} -#endif - -void screen_access_init(void) -{ - int i; - FOR_NB_SCREENS(i) - screen_init(&screens[i], i); -} +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2005 by Kevin Ferrare + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include "backlight.h" +#include +#include +#include +#include +#include +#include + +#include "screen_access.h" +#include "textarea.h" + +struct screen screens[NB_SCREENS] = +{ + { + .screen_type=SCREEN_MAIN, + .width=LCD_WIDTH, + .height=LCD_HEIGHT, + .depth=LCD_DEPTH, +#if defined(HAVE_LCD_COLOR) + .is_color=true, +#else + .is_color=false, +#endif +#ifdef HAVE_LCD_BITMAP + .pixel_format=LCD_PIXELFORMAT, +#endif +#if (CONFIG_LED == LED_VIRTUAL) + .has_disk_led=false, +#elif defined(HAVE_REMOTE_LCD) + .has_disk_led=true, +#endif + .setmargins=&lcd_setmargins, + .getymargin=&lcd_getymargin, + .getxmargin=&lcd_getxmargin, + .getstringsize=&lcd_getstringsize, +#ifdef HAVE_LCD_BITMAP + .setfont=&lcd_setfont, + .mono_bitmap=&lcd_mono_bitmap, + .mono_bitmap_part=&lcd_mono_bitmap_part, + .set_drawmode=&lcd_set_drawmode, + .bitmap=(screen_bitmap_func*)&lcd_bitmap, + .bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part, +#if LCD_DEPTH <= 2 + /* No transparency yet for grayscale and mono lcd */ + .transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap, + .transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part, +#else + .transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap_transparent, + .transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_transparent_part, +#endif +#if LCD_DEPTH > 1 +#if defined(HAVE_LCD_COLOR) && defined(LCD_REMOTE_DEPTH) && LCD_REMOTE_DEPTH > 1 + .color_to_native=&lcd_color_to_native, +#endif + .get_background=&lcd_get_background, + .get_foreground=&lcd_get_foreground, + .set_background=&lcd_set_background, + .set_foreground=&lcd_set_foreground, +#endif /* LCD_DEPTH > 1 */ + .update_rect=&lcd_update_rect, + .fillrect=&lcd_fillrect, + .drawrect=&lcd_drawrect, + .drawpixel=&lcd_drawpixel, + .drawline=&lcd_drawline, + .vline=&lcd_vline, + .hline=&lcd_hline, + .scroll_step=&lcd_scroll_step, + .invertscroll=&lcd_invertscroll, + .puts_style_offset=&lcd_puts_style_offset, + .puts_scroll_style=&lcd_puts_scroll_style, + .puts_scroll_style_offset=&lcd_puts_scroll_style_offset, +#endif /* HAVE_LCD_BITMAP */ + +#ifdef HAVE_LCD_CHARCELLS + .double_height=&lcd_double_height, + .putc=&lcd_putc, + .get_locked_pattern=&lcd_get_locked_pattern, + .define_pattern=&lcd_define_pattern, + .unlock_pattern=&lcd_unlock_pattern, + .icon=&lcd_icon, +#endif /* HAVE_LCD_CHARCELLS */ + + .putsxy=&lcd_putsxy, + .puts=&lcd_puts, + .puts_offset=&lcd_puts_offset, + .puts_scroll=&lcd_puts_scroll, + .puts_scroll_offset=&lcd_puts_scroll_offset, + .scroll_speed=&lcd_scroll_speed, + .scroll_delay=&lcd_scroll_delay, + .stop_scroll=&lcd_stop_scroll, + .clear_display=&lcd_clear_display, + .update=&lcd_update, + .backlight_on=&backlight_on, + .backlight_off=&backlight_off, + .is_backlight_on=&is_backlight_on, + .backlight_set_timeout=&backlight_set_timeout +#ifdef HAS_BUTTONBAR + ,.has_buttonbar=false +#endif + } +#ifdef HAVE_REMOTE_LCD + ,{ + .screen_type=SCREEN_REMOTE, + .width=LCD_REMOTE_WIDTH, + .height=LCD_REMOTE_HEIGHT, + .depth=LCD_REMOTE_DEPTH, + .is_color=false,/* No color remotes yet */ + .pixel_format=LCD_REMOTE_PIXELFORMAT, + .has_disk_led=false, + .setmargins=&lcd_remote_setmargins, + .getymargin=&lcd_remote_getymargin, + .getxmargin=&lcd_remote_getxmargin, + .getstringsize=&lcd_remote_getstringsize, +#if 1 /* all remote LCDs are bitmapped so far */ + .setfont=&lcd_remote_setfont, + .mono_bitmap=&lcd_remote_mono_bitmap, + .mono_bitmap_part=&lcd_remote_mono_bitmap_part, + .bitmap=(screen_bitmap_func*)&lcd_remote_bitmap, + .bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part, + .set_drawmode=&lcd_remote_set_drawmode, +#if LCD_REMOTE_DEPTH <= 2 + /* No transparency yet for grayscale and mono lcd */ + .transparent_bitmap=(screen_bitmap_func*)&lcd_remote_bitmap, + .transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part, + /* No colour remotes yet */ +#endif +#if LCD_REMOTE_DEPTH > 1 +#if defined(HAVE_LCD_COLOR) + .color_to_native=&lcd_remote_color_to_native, +#endif + .get_background=&lcd_remote_get_background, + .get_foreground=&lcd_remote_get_foreground, + .set_background=&lcd_remote_set_background, + .set_foreground=&lcd_remote_set_foreground, +#endif /* LCD_REMOTE_DEPTH > 1 */ + .update_rect=&lcd_remote_update_rect, + .fillrect=&lcd_remote_fillrect, + .drawrect=&lcd_remote_drawrect, + .drawpixel=&lcd_remote_drawpixel, + .drawline=&lcd_remote_drawline, + .vline=&lcd_remote_vline, + .hline=&lcd_remote_hline, + .scroll_step=&lcd_remote_scroll_step, + .invertscroll=&lcd_remote_invertscroll, + .puts_style_offset=&lcd_remote_puts_style_offset, + .puts_scroll_style=&lcd_remote_puts_scroll_style, + .puts_scroll_style_offset=&lcd_remote_puts_scroll_style_offset, +#endif /* 1 */ + +#if 0 /* no charcell remote LCDs so far */ + .double_height=&lcd_remote_double_height, + .putc=&lcd_remote_putc, + .get_locked_pattern=&lcd_remote_get_locked_pattern, + .define_pattern=&lcd_remote_define_pattern, + .icon=&lcd_remote_icon, +#endif /* 0 */ + .putsxy=&lcd_remote_putsxy, + .puts=&lcd_remote_puts, + .puts_offset=&lcd_remote_puts_offset, + .puts_scroll=&lcd_remote_puts_scroll, + .puts_scroll_offset=&lcd_remote_puts_scroll_offset, + .scroll_speed=&lcd_remote_scroll_speed, + .scroll_delay=&lcd_remote_scroll_delay, + .stop_scroll=&lcd_remote_stop_scroll, + .clear_display=&lcd_remote_clear_display, + .update=&lcd_remote_update, + .backlight_on=&remote_backlight_on, + .backlight_off=&remote_backlight_off, + .is_backlight_on=&is_remote_backlight_on, + .backlight_set_timeout=&remote_backlight_set_timeout + } +#endif /* HAVE_REMOTE_LCD */ +}; + +#ifdef HAVE_LCD_BITMAP +void screen_clear_area(struct screen * display, int xstart, int ystart, + int width, int height) +{ + display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); + display->fillrect(xstart, ystart, width, height); + display->set_drawmode(DRMODE_SOLID); +} +#endif + +void screen_access_init(void) +{ + int i; + FOR_NB_SCREENS(i) + { +#ifdef HAVE_LCD_BITMAP + ((struct screen*)&screens[i])->setfont(FONT_UI); +#endif + gui_textarea_update_nblines(&screens[i]); + } +} diff --git a/apps/screen_access.h b/apps/screen_access.h index 822aab4a8..05a53d5d0 100644 --- a/apps/screen_access.h +++ b/apps/screen_access.h @@ -51,18 +51,20 @@ typedef void screen_bitmap_part_func(const void *src, int src_x, int src_y, typedef void screen_bitmap_func(const void *src, int x, int y, int width, int height); +/* if this struct is changed the plugin api may break so bump the api + versions in plugin.h */ struct screen { - int width, height; - int nb_lines; enum screen_type screen_type; + int width, height; int depth; - bool is_color; + int nb_lines; #ifdef HAVE_LCD_BITMAP int pixel_format; #endif int char_width; int char_height; + bool is_color; #if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD) bool has_disk_led; #endif @@ -72,7 +74,6 @@ struct screen void (*setmargins)(int x, int y); int (*getxmargin)(void); int (*getymargin)(void); - int (*getstringsize)(const unsigned char *str, int *w, int *h); #if defined(HAVE_LCD_BITMAP) || defined(HAVE_REMOTE_LCD) /* always bitmap */ void (*setfont)(int newfont); @@ -124,7 +125,6 @@ struct screen void (*define_pattern)(unsigned long ucs, const char *pattern); void (*unlock_pattern)(unsigned long ucs); #endif - void (*init)(void); void (*putsxy)(int x, int y, const unsigned char *str); void (*puts)(int x, int y, const unsigned char *str); void (*puts_offset)(int x, int y, const unsigned char *str, int offset); @@ -142,13 +142,6 @@ struct screen void (*backlight_set_timeout)(int index); }; -/* - * Initializes the given screen structure for a given display - * - screen : the screen structure - * - display_type : currently 2 possibles values : MAIN or REMOTE - */ -extern void screen_init(struct screen * screen, enum screen_type screen_type); - #ifdef HAS_BUTTONBAR /* * Sets if the given screen has a buttonbar or not -- 2.11.4.GIT