From 0501fb016c4d88d3430a34ecc55a003e062b5f63 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Thu, 29 May 2008 11:13:46 +0000 Subject: [PATCH] total removal of gui_textarea. The only thing using the text_message struct is the yesno screen so move its definition to yesno.h git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17653 a1c6a512-1295-4272-9138-f99709370657 --- apps/SOURCES | 1 - apps/bookmark.c | 1 - apps/gui/textarea.c | 81 ---------------------------------------------- apps/gui/textarea.h | 84 ------------------------------------------------ apps/gui/yesno.c | 22 +++++++++++-- apps/gui/yesno.h | 7 +++- apps/misc.c | 1 - apps/playlist_catalog.c | 1 + apps/recorder/radio.c | 85 +++++++++++++++++++++++++++++++------------------ apps/screen_access.c | 20 ++++++++++-- 10 files changed, 99 insertions(+), 204 deletions(-) delete mode 100644 apps/gui/textarea.c delete mode 100644 apps/gui/textarea.h diff --git a/apps/SOURCES b/apps/SOURCES index e0fdbbcd07..c384982843 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -71,7 +71,6 @@ gui/quickscreen.c gui/scrollbar.c gui/splash.c gui/statusbar.c -gui/textarea.c gui/yesno.c gui/wps_debug.c gui/wps_parser.c diff --git a/apps/bookmark.c b/apps/bookmark.c index 2ce03a2d3d..c9a285975d 100644 --- a/apps/bookmark.c +++ b/apps/bookmark.c @@ -41,7 +41,6 @@ #include "backdrop.h" #include "file.h" #include "statusbar.h" -#include "textarea.h" #define MAX_BOOKMARKS 10 #define MAX_BOOKMARK_SIZE 350 diff --git a/apps/gui/textarea.c b/apps/gui/textarea.c deleted file mode 100644 index 21028da375..0000000000 --- a/apps/gui/textarea.c +++ /dev/null @@ -1,81 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * 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 "textarea.h" -#include "font.h" -#include "lang.h" -#include "talk.h" - -void gui_textarea_clear(struct screen * display) -{ -#ifdef HAVE_LCD_BITMAP - int y_start = gui_textarea_get_ystart(display); - int y_end = gui_textarea_get_yend(display); - screen_clear_area(display, 0, y_start, display->width, y_end - y_start); - display->stop_scroll(); - screen_set_ymargin(display, y_start); -#else - display->clear_display(); -#endif -} - -void gui_textarea_update(struct screen * display) -{ -#ifdef HAVE_LCD_BITMAP - int y_start = gui_textarea_get_ystart(display); - int y_end = gui_textarea_get_yend(display); - display->update_rect(0, y_start, display->width, y_end - y_start); -#else - display->update(); -#endif -} - -void gui_textarea_update_nblines(struct screen * display) -{ - int height=display->height; -#ifdef HAVE_LCD_BITMAP - if(global_settings.statusbar) - height -= STATUSBAR_HEIGHT; -#ifdef HAS_BUTTONBAR - if(global_settings.buttonbar && display->has_buttonbar) - height -= BUTTONBAR_HEIGHT; -#endif - display->getstringsize((unsigned char *)"A", &display->char_width, - &display->char_height); -#else - display->char_width = 1; - display->char_height = 1; -#endif - display->nb_lines = height / display->char_height; -} - -void talk_text_message(const struct text_message * message, bool enqueue) -{ - int line; - if(message) - for(line=0; linenb_lines; line++) - { - long id = P2ID((unsigned char *)message->message_lines[line]); - if(id>=0) - { - talk_id(id, enqueue); - enqueue = true; - } - } -} diff --git a/apps/gui/textarea.h b/apps/gui/textarea.h deleted file mode 100644 index 5e770eac38..0000000000 --- a/apps/gui/textarea.h +++ /dev/null @@ -1,84 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * 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. - * - ****************************************************************************/ - -#ifndef _GUI_TEXTAREA_H_ -#define _GUI_TEXTAREA_H_ -#include "screen_access.h" -#include "settings.h" -#include "statusbar.h" - -struct text_message -{ - const char **message_lines; - int nb_lines; -}; - -/* - * Clears the area in the screen in which text can be displayed - * and sets the y margin properly - * - display : the screen structure - */ -extern void gui_textarea_clear(struct screen * display); - -/* - * Updates the area in the screen in which text can be displayed - * - display : the screen structure - */ -extern void gui_textarea_update(struct screen * display); - -/* - * Compute the number of text lines the display can draw with the current font - * Also updates the char height and width - * - display : the screen structure - */ -extern void gui_textarea_update_nblines(struct screen * display); - -/* - * Speak a text_message. The message's lines may be virtual pointers - * representing language / voicefont IDs (see settings.h). - */ -extern void talk_text_message(const struct text_message * message, bool enqueue); - -#ifdef HAVE_LCD_BITMAP -/* - * Compute the number of pixels from which text can be displayed - * - display : the screen structure - * Returns the number of pixels - */ -#define gui_textarea_get_ystart(display) \ - ( (global_settings.statusbar)? STATUSBAR_HEIGHT : 0) - -/* - * Compute the number of pixels below which text can't be displayed - * - display : the screen structure - * Returns the number of pixels - */ -#ifdef HAS_BUTTONBAR -#define gui_textarea_get_yend(display) \ - ( (display)->height - ( (global_settings.buttonbar && \ - (display)->has_buttonbar)? \ - BUTTONBAR_HEIGHT : 0) ) -#else -#define gui_textarea_get_yend(display) \ - ( (display)->height ) -#endif /* HAS_BUTTONBAR */ - -#endif /* HAVE_LCD_BITMAP */ - -#endif /* _GUI_TEXTAREA_H_ */ diff --git a/apps/gui/yesno.c b/apps/gui/yesno.c index 9232015211..91358d8feb 100644 --- a/apps/gui/yesno.c +++ b/apps/gui/yesno.c @@ -16,7 +16,7 @@ * KIND, either express or implied. * ****************************************************************************/ - +#include "config.h" #include "yesno.h" #include "system.h" #include "kernel.h" @@ -24,7 +24,7 @@ #include "lang.h" #include "action.h" #include "talk.h" -#include "textarea.h" +#include "settings.h" #include "viewport.h" @@ -36,6 +36,24 @@ struct gui_yesno struct viewport *vp; struct screen * display; }; + +static void talk_text_message(const struct text_message * message, bool enqueue) +{ + int line; + if(message) + { + for(line=0; linenb_lines; line++) + { + long id = P2ID((unsigned char *)message->message_lines[line]); + if(id>=0) + { + talk_id(id, enqueue); + enqueue = true; + } + } + } +} + static int put_message(struct screen *display, const struct text_message * message, int start, int max_y) diff --git a/apps/gui/yesno.h b/apps/gui/yesno.h index 9af64a7aad..fbccb5d8cc 100644 --- a/apps/gui/yesno.h +++ b/apps/gui/yesno.h @@ -21,7 +21,6 @@ #define _GUI_YESNO_H_ #include "screen_access.h" -#include "textarea.h" enum yesno_res { @@ -30,6 +29,12 @@ enum yesno_res YESNO_USB }; +struct text_message +{ + const char **message_lines; + int nb_lines; +}; + /* * Runs the yesno asker : * it will display the 'main_message' question, and wait for user keypress diff --git a/apps/misc.c b/apps/misc.c index 23341a82e8..e9f1724b1b 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -73,7 +73,6 @@ #ifdef BOOTFILE #if !defined(USB_NONE) && !defined(USB_IPODSTYLE) -#include "textarea.h" #include "rolo.h" #include "yesno.h" #endif diff --git a/apps/playlist_catalog.c b/apps/playlist_catalog.c index c7458f8351..dfcfd0c363 100644 --- a/apps/playlist_catalog.c +++ b/apps/playlist_catalog.c @@ -40,6 +40,7 @@ #include "filetypes.h" #include "debug.h" #include "playlist_catalog.h" +#include "statusbar.h" #define MAX_PLAYLISTS 400 #define PLAYLIST_DISPLAY_COUNT 10 diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c index 38319dca9e..efc6aa0a74 100644 --- a/apps/recorder/radio.c +++ b/apps/recorder/radio.c @@ -53,7 +53,6 @@ #include "sound.h" #include "screen_access.h" #include "statusbar.h" -#include "textarea.h" #include "splash.h" #include "yesno.h" #include "buttonbar.h" @@ -64,6 +63,7 @@ #include "list.h" #include "menus/exported_menus.h" #include "root_menu.h" +#include "viewport.h" #if CONFIG_TUNER @@ -131,7 +131,7 @@ static int save_preset_list(void); static int load_preset_list(void); static int clear_preset_list(void); -static int scan_presets(void); +static int scan_presets(void *viewports); /* Function to manipulate all yesno dialogues. This function needs the output text as an argument. */ @@ -142,7 +142,7 @@ static bool yesno_pop(const char* text) const struct text_message message={lines, 1}; bool ret = (gui_syncyesno_run(&message,NULL,NULL)== YESNO_YES); FOR_NB_SCREENS(i) - gui_textarea_clear(&screens[i]); + screens[i].clear_viewport(); return ret; } @@ -451,6 +451,7 @@ int radio_screen(void) #ifndef HAVE_NOISY_IDLE_MODE int button_timeout = current_tick + (2*HZ); #endif + struct viewport vp[NB_SCREENS]; #ifdef HAS_BUTTONBAR struct gui_buttonbar buttonbar; gui_buttonbar_init(&buttonbar); @@ -463,14 +464,19 @@ int radio_screen(void) /* always display status bar in radio screen for now */ global_status.statusbar_forced = statusbar?0:1; global_settings.statusbar = true; + gui_syncstatusbar_draw(&statusbars,true); FOR_NB_SCREENS(i) { - gui_textarea_clear(&screens[i]); - screen_set_xmargin(&screens[i],0); + viewport_set_defaults(&vp[i], i); +#ifdef HAS_BUTTONBAR + if (global_settings.buttonbar) + vp[i].height -= BUTTONBAR_HEIGHT; +#endif + screens[i].set_viewport(&vp[i]); + screens[i].clear_viewport(); + screens[i].update_viewport(); } - gui_syncstatusbar_draw(&statusbars,true); - fh = font_get(FONT_UI)->height; /* Adjust for font size, trying to center the information vertically */ @@ -520,7 +526,7 @@ int radio_screen(void) #endif if(num_presets < 1 && yesno_pop(ID2P(LANG_FM_FIRST_AUTOSCAN))) - scan_presets(); + scan_presets(vp); curr_preset = find_preset(curr_freq); if(curr_preset != -1) @@ -715,10 +721,12 @@ int radio_screen(void) case ACTION_FM_MENU: radio_menu(); curr_preset = find_preset(curr_freq); - FOR_NB_SCREENS(i){ - struct screen *sc = &screens[i]; - gui_textarea_clear(sc); - screen_set_xmargin(sc, 0); + FOR_NB_SCREENS(i) + { + screens[i].set_viewport(&vp[i]); + screens[i].clear_viewport(); + screens[i].update_viewport(); + screens[i].set_viewport(NULL); } #ifdef HAS_BUTTONBAR gui_buttonbar_set(&buttonbar, str(LANG_BUTTONBAR_MENU), @@ -736,10 +744,10 @@ int radio_screen(void) update_screen = true; FOR_NB_SCREENS(i) { - struct screen *sc = &screens[i]; - gui_textarea_clear(sc); - screen_set_xmargin(sc, 0); - gui_textarea_update(sc); + screens[i].set_viewport(&vp[i]); + screens[i].clear_viewport(); + screens[i].update_viewport(); + screens[i].set_viewport(NULL); } break; @@ -747,10 +755,10 @@ int radio_screen(void) handle_radio_presets(); FOR_NB_SCREENS(i) { - struct screen *sc = &screens[i]; - gui_textarea_clear(sc); - screen_set_xmargin(sc, 0); - gui_textarea_update(sc); + screens[i].set_viewport(&vp[i]); + screens[i].clear_viewport(); + screens[i].update_viewport(); + screens[i].set_viewport(NULL); } #ifdef HAS_BUTTONBAR gui_buttonbar_set(&buttonbar, @@ -847,10 +855,12 @@ int radio_screen(void) { FOR_NB_SCREENS(i) { + screens[i].set_viewport(&vp[i]); peak_meter_screen(&screens[i],0, STATUSBAR_HEIGHT + fh*(top_of_screen + 4), fh); screens[i].update_rect(0, STATUSBAR_HEIGHT + fh*(top_of_screen + 4), - screens[i].width, fh); + screens[i].width, fh); + screens[i].set_viewport(NULL); } } @@ -887,7 +897,9 @@ int radio_screen(void) int freq; FOR_NB_SCREENS(i) - screens[i].setfont(FONT_UI); + { + screens[i].set_viewport(&vp[i]); + } snprintf(buf, 128, curr_preset >= 0 ? "%d. %s" : " ", curr_preset + 1, presets[curr_preset].name); @@ -934,11 +946,15 @@ int radio_screen(void) } #endif /* CONFIG_CODEC != SWCODEC */ + FOR_NB_SCREENS(i) + { + screens[i].update_viewport(); + screens[i].set_viewport(NULL); + } + #ifdef HAS_BUTTONBAR gui_buttonbar_draw(&buttonbar); #endif - FOR_NB_SCREENS(i) - gui_textarea_update(&screens[i]); } /* Only force the redraw if update_screen is true */ gui_syncstatusbar_draw(&statusbars,true); @@ -983,7 +999,11 @@ int radio_screen(void) gui_syncsplash(0, str(LANG_DISK_FULL)); gui_syncstatusbar_draw(&statusbars,true); FOR_NB_SCREENS(i) - gui_textarea_update(&screens[i]); + { + screens[i].set_viewport(&vp[i]); + screens[i].update_viewport(); + screens[i].set_viewport(NULL); + } audio_error_clear(); while(1) @@ -1415,10 +1435,14 @@ MENUITEM_FUNCTION_DYNTEXT(radio_mode_item, 0, get_mode_text, NULL, NULL, NULL, Icon_NOICON); #endif -static int scan_presets(void) +static int scan_presets(void *viewports) { bool do_scan = true; + int i; + struct viewport *vp = (struct viewport *)viewports; + FOR_NB_SCREENS(i) + screens[i].set_viewport(vp?&vp[i]:NULL); if(num_presets > 0) /* Do that to avoid 2 questions. */ do_scan = yesno_pop(ID2P(LANG_FM_CLEAR_PRESETS)); @@ -1428,7 +1452,6 @@ static int scan_presets(void) &fm_region_data[global_settings.fm_region]; char buf[MAX_FMPRESET_LEN + 1]; - int i; curr_freq = fmr->freq_min; num_presets = 0; @@ -1466,9 +1489,8 @@ static int scan_presets(void) FOR_NB_SCREENS(i) { - gui_textarea_clear(&screens[i]); - screen_set_xmargin(&screens[i],0); - gui_textarea_update(&screens[i]); + screens[i].clear_viewport(); + screens[i].update_viewport(); } if(num_presets > 0) @@ -1557,7 +1579,8 @@ MENUITEM_FUNCTION(presetsave_item, 0, ID2P(LANG_FM_PRESET_SAVE), save_preset_list, NULL, NULL, Icon_NOICON); MENUITEM_FUNCTION(presetclear_item, 0, ID2P(LANG_FM_PRESET_CLEAR), clear_preset_list, NULL, NULL, Icon_NOICON); -MENUITEM_FUNCTION(scan_presets_item, 0, ID2P(LANG_FM_SCAN_PRESETS), +MENUITEM_FUNCTION(scan_presets_item, MENU_FUNC_USEPARAM, + ID2P(LANG_FM_SCAN_PRESETS), scan_presets, NULL, NULL, Icon_NOICON); MAKE_MENU(radio_settings_menu, ID2P(LANG_FM_MENU), NULL, diff --git a/apps/screen_access.c b/apps/screen_access.c index dbd3727a26..82f80638af 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c @@ -29,7 +29,6 @@ #include #include "screen_access.h" -#include "textarea.h" struct screen screens[NB_SCREENS] = { @@ -228,11 +227,28 @@ void screen_clear_area(struct screen * display, int xstart, int ystart, void screen_access_init(void) { int i; + struct screen *display; FOR_NB_SCREENS(i) { + display = &screens[i]; #ifdef HAVE_LCD_BITMAP ((struct screen*)&screens[i])->setfont(FONT_UI); #endif - gui_textarea_update_nblines(&screens[i]); + + int height=display->height; +#ifdef HAVE_LCD_BITMAP + if(global_settings.statusbar) + height -= STATUSBAR_HEIGHT; +#ifdef HAS_BUTTONBAR + if(global_settings.buttonbar && display->has_buttonbar) + height -= BUTTONBAR_HEIGHT; +#endif + display->getstringsize((unsigned char *)"A", &display->char_width, + &display->char_height); +#else + display->char_width = 1; + display->char_height = 1; +#endif + display->nb_lines = height / display->char_height; } } -- 2.11.4.GIT