From 56d29e89778f30e87a20bb1e67fd6854fe19684c Mon Sep 17 00:00:00 2001 From: Teruaki Kawashima Date: Mon, 22 Feb 2010 07:17:15 +0000 Subject: some changes to use of display_text. * add parameter, wait_key to display_text(). - set this true to wait button press after all words is displayed. * use ARRAYLEN macro instead of #define WORDS * add macro to indicate end of style array. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24846 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/lib/display_text.c | 30 +++++++++++++++++++++--------- apps/plugins/lib/display_text.h | 26 ++++++++++++++++++++------ 2 files changed, 41 insertions(+), 15 deletions(-) (limited to 'apps/plugins/lib') diff --git a/apps/plugins/lib/display_text.c b/apps/plugins/lib/display_text.c index c696610..5d13fc6 100644 --- a/apps/plugins/lib/display_text.c +++ b/apps/plugins/lib/display_text.c @@ -28,8 +28,20 @@ #define MARGIN 5 #endif -bool display_text(short words, char** text, struct style_text* style, - struct viewport* vp_text) +static bool wait_key_press(void) +{ + int button; + do { + button = rb->button_get(true); + if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED ) + return true; + } while( ( button == BUTTON_NONE ) + || ( button & (BUTTON_REL|BUTTON_REPEAT) ) ); + return false; +} + +bool display_text(unsigned short words, char** text, struct style_text* style, + struct viewport* vp_text, bool wait_key) { #ifdef HAVE_LCD_BITMAP int prev_drawmode; @@ -41,7 +53,6 @@ bool display_text(short words, char** text, struct style_text* style, unsigned short x , y; unsigned short vp_width = LCD_WIDTH; unsigned short vp_height = LCD_HEIGHT; - int button; unsigned short i = 0, style_index = 0; if (vp_text != NULL) { vp_width = vp_text->width; @@ -76,12 +87,8 @@ bool display_text(short words, char** text, struct style_text* style, if (y + height > vp_height - MARGIN) { y = MARGIN; rb->screens[SCREEN_MAIN]->update_viewport(); - do { - button = rb->button_get(true); - if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED ) - return true; - } while( ( button == BUTTON_NONE ) - || ( button & (BUTTON_REL|BUTTON_REPEAT) ) ); + if (wait_key_press()) + return true; rb->screens[SCREEN_MAIN]->clear_viewport(); } /* no text formatting available */ @@ -134,5 +141,10 @@ bool display_text(short words, char** text, struct style_text* style, #ifdef HAVE_LCD_BITMAP rb->lcd_set_drawmode(prev_drawmode); #endif + if (wait_key) + { + if (wait_key_press()) + return true; + } return false; } diff --git a/apps/plugins/lib/display_text.h b/apps/plugins/lib/display_text.h index 39b5f76..33a8ff5 100644 --- a/apps/plugins/lib/display_text.h +++ b/apps/plugins/lib/display_text.h @@ -19,16 +19,20 @@ * KIND, either express or implied. * ****************************************************************************/ +#ifndef _DISPLAY_TEXT_H +#define _DISPLAY_TEXT_H + #include "plugin.h" + /* * basic usage: - * #define WORDS (sizeof text / sizeof (char*)) * char *text[] = {"normal", "centering", "red,underline"}; * struct style_text formation[]={ * { 1, TEXT_CENTER }, * { 2, C_RED|TEXT_UNDERLINE }, + * LAST_STYLE_ITEM * }; - * if (display_text(WORDS, text, formation, NULL)) + * if (display_text(ARRAYLEN(text), text, formation, NULL, true)) * return PLUGIN_USB_CONNECTED; */ @@ -36,13 +40,23 @@ enum ecolor { STANDARD, C_YELLOW, C_RED, C_BLUE, C_GREEN , C_ORANGE }; #define TEXT_COLOR_MASK 0x00ff #define TEXT_CENTER 0x0100 #define TEXT_UNDERLINE 0x0200 +#define LAST_STYLE_ITEM { -1, 0 } struct style_text { unsigned short index; unsigned short flags; }; -/* style and vp_text are optional. - * return true if usb is connected. */ -bool display_text(short words, char** text, struct style_text* style, - struct viewport* vp_text); +/* + * display text. + * - words : number of words in text. + * - text : array of word to be displayed. use empty string for newline. + * - style : (optional) set style of each word. must be sorted by index. + * - vp_text : (optional) viewport to display text. + * - wait_key : set true to wait button press after all words is displayed. + * return true if usb is connected, false otherwise. + */ +bool display_text(unsigned short words, char** text, struct style_text* style, + struct viewport* vp_text, bool wait_key); + +#endif /* _DISPLAY_TEXT_H */ -- cgit v1.1