From 3646c313679c4bd16c9eec98c2e35c7a7bf5c961 Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Tue, 8 Jan 2008 01:22:14 +0000 Subject: Add the viewport functions to the screens API, including a new getfont() function to return the font used by the current viewport. A change to the screens API makes the plugin API incompatible, so we bump version and sort. Also commit the test_viewports plugin (not built by default). This is some more of FS#8385. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16022 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/CATEGORIES | 1 + apps/plugins/test_viewports.c | 309 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 apps/plugins/test_viewports.c (limited to 'apps/plugins') diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES index 9a6cc93faa..ee28614da0 100644 --- a/apps/plugins/CATEGORIES +++ b/apps/plugins/CATEGORIES @@ -81,6 +81,7 @@ test_disk,apps test_fps,apps test_sampr,apps test_scanrate,apps +test_viewports,apps text_editor,apps vbrfix,viewers video,viewers diff --git a/apps/plugins/test_viewports.c b/apps/plugins/test_viewports.c new file mode 100644 index 0000000000..3cb8afb519 --- /dev/null +++ b/apps/plugins/test_viewports.c @@ -0,0 +1,309 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: helloworld.c 12807 2007-03-16 21:56:08Z amiconn $ + * + * Copyright (C) 2007 Dave Chapman + * + * 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 "plugin.h" + +PLUGIN_HEADER + +static struct plugin_api* rb; + +#ifdef HAVE_LCD_BITMAP + +#ifdef HAVE_LCD_COLOR +#define BGCOLOR_1 LCD_RGBPACK(255,255,0) +#define BGCOLOR_2 LCD_RGBPACK(0,255,0) +#define FGCOLOR_1 LCD_RGBPACK(0,0,255) +#else if LCD_DEPTH > 1 +#define BGCOLOR_1 LCD_DARKGRAY +#define BGCOLOR_2 LCD_LIGHTGRAY +#define FGCOLOR_1 LCD_WHITE +#endif + +static struct viewport vp0 = +{ + .x = 0, + .y = 0, + .width = LCD_WIDTH, + .height = 20, + .font = FONT_UI, + .drawmode = DRMODE_SOLID, + .xmargin = 0, + .ymargin = 0, +#if LCD_DEPTH > 1 + .fg_pattern = LCD_DEFAULT_FG, + .bg_pattern = BGCOLOR_1, +#endif +#ifdef HAVE_LCD_COLOR + .lss_pattern = LCD_DEFAULT_BG, + .lse_pattern = LCD_DEFAULT_BG, + .lst_pattern = LCD_DEFAULT_BG, +#endif +}; + +static struct viewport vp1 = +{ + .x = LCD_WIDTH / 10, + .y = 20, + .width = LCD_WIDTH / 3, + .height = LCD_HEIGHT / 2, + .font = FONT_SYSFIXED, + .drawmode = DRMODE_SOLID, + .xmargin = 0, + .ymargin = 0, +#if LCD_DEPTH > 1 + .fg_pattern = LCD_DEFAULT_FG, + .bg_pattern = LCD_DEFAULT_BG, +#ifdef HAVE_LCD_COLOR + .lss_pattern = LCD_DEFAULT_BG, + .lse_pattern = LCD_DEFAULT_BG, + .lst_pattern = LCD_DEFAULT_BG, +#endif +#endif +}; + +static struct viewport vp2 = +{ + .x = LCD_WIDTH / 2, + .y = 40, + .width = LCD_WIDTH / 3, + .height = (LCD_HEIGHT / 2), + .font = FONT_UI, + .drawmode = DRMODE_SOLID, + .xmargin = 0, + .ymargin = 0, +#if LCD_DEPTH > 1 + .fg_pattern = FGCOLOR_1, + .bg_pattern = BGCOLOR_2, +#ifdef HAVE_LCD_COLOR + .lss_pattern = LCD_DEFAULT_BG, + .lse_pattern = LCD_DEFAULT_BG, + .lst_pattern = LCD_DEFAULT_BG, +#endif +#endif +}; + + +static struct viewport vp3 = +{ + .x = LCD_WIDTH / 4, + .y = (5 * LCD_HEIGHT) / 8, + .width = LCD_WIDTH / 2, + .height = (LCD_HEIGHT / 4), + .font = FONT_SYSFIXED, + .drawmode = DRMODE_SOLID, + .xmargin = 0, + .ymargin = 0, +#if LCD_DEPTH > 1 + .fg_pattern = LCD_BLACK, + .bg_pattern = LCD_WHITE, +#ifdef HAVE_LCD_COLOR + .lss_pattern = LCD_DEFAULT_BG, + .lse_pattern = LCD_DEFAULT_BG, + .lst_pattern = LCD_DEFAULT_BG, +#endif +#endif +}; + + +#ifdef HAVE_REMOTE_LCD +static struct viewport rvp0 = +{ + .x = 0, + .y = 10, + .width = LCD_REMOTE_WIDTH / 3, + .height = LCD_REMOTE_HEIGHT - 10, + .font = FONT_SYSFIXED, + .drawmode = DRMODE_SOLID, + .xmargin = 0, + .ymargin = 0, +#if LCD_REMOTE_DEPTH > 1 + .fg_pattern = LCD_REMOTE_BLACK, + .bg_pattern = LCD_REMOTE_LIGHTGRAY, +#endif +}; + +static struct viewport rvp1 = +{ + .x = LCD_REMOTE_WIDTH / 2, + .y = 0, + .width = LCD_REMOTE_WIDTH / 3, + .height = LCD_REMOTE_HEIGHT - 10, + .font = FONT_SYSFIXED, + .drawmode = DRMODE_SOLID, + .xmargin = 0, + .ymargin = 0, +#if LCD_REMOTE_DEPTH > 1 + .fg_pattern = LCD_REMOTE_DEFAULT_FG, + .bg_pattern = LCD_REMOTE_DEFAULT_BG +#endif +}; + +#endif + + +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) +{ + (void)parameter; + char buf[80]; + int i,y; + + rb = api; + + rb->screens[SCREEN_MAIN]->set_viewport(&vp0); + rb->screens[SCREEN_MAIN]->clear_viewport(); + rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Viewport testing plugin - this is a scrolling title"); + + rb->screens[SCREEN_MAIN]->set_viewport(&vp1); + rb->screens[SCREEN_MAIN]->clear_viewport(); + + for (i = 0 ; i < 3; i++) + { + rb->snprintf(buf,sizeof(buf),"Left text, scrolling_line %d",i); + rb->screens[SCREEN_MAIN]->puts_scroll(0,i,buf); + } + + rb->screens[SCREEN_MAIN]->set_viewport(&vp2); + rb->screens[SCREEN_MAIN]->clear_viewport(); + for (i = 1 ; i < 3; i++) + { + rb->snprintf(buf,sizeof(buf),"Right text, scrolling line %d",i); + rb->screens[SCREEN_MAIN]->puts_scroll(1,i,buf); + } + + y = -10; + for (i = -10; i < vp2.width + 10; i += 5) + { + rb->screens[SCREEN_MAIN]->drawline(i, y, i, vp2.height - y); + } + + rb->screens[SCREEN_MAIN]->set_viewport(&vp3); + rb->screens[SCREEN_MAIN]->clear_viewport(); + for (i = 1 ; i < 2; i++) + { + rb->snprintf(buf,sizeof(buf),"Bottom text, a scrolling line %d",i); + rb->screens[SCREEN_MAIN]->puts_scroll(2,i,buf); + } + rb->screens[SCREEN_MAIN]->puts_scroll(4,i,"Short line"); + rb->screens[SCREEN_MAIN]->update(); + + +#ifdef HAVE_REMOTE_LCD + rb->screens[SCREEN_REMOTE]->set_viewport(&rvp0); + rb->screens[SCREEN_REMOTE]->clear_viewport(); + + for (i = 0 ; i < 5; i++) + { + rb->snprintf(buf,sizeof(buf),"Left text, scrolling_line %d",i); + rb->screens[SCREEN_REMOTE]->puts_scroll(0,i,buf); + } + rb->screens[SCREEN_REMOTE]->puts(1,i,"Static"); + + rb->screens[SCREEN_REMOTE]->set_viewport(&rvp1); + rb->screens[SCREEN_REMOTE]->clear_viewport(); + for (i = 1 ; i < 3; i++) + { + rb->snprintf(buf,sizeof(buf),"Right text, scrolling line %d",i); + rb->screens[SCREEN_REMOTE]->puts_scroll(1,i,buf); + } + + y = -10; + for (i = -10; i < rvp1.width + 10; i += 5) + { + rb->screens[SCREEN_REMOTE]->drawline(i, y, i, rvp1.height - y); + } + + rb->screens[SCREEN_REMOTE]->update(); +#endif + + rb->button_get(true); + + /* Restore the default viewport */ + rb->screens[SCREEN_MAIN]->set_viewport(NULL); +#ifdef HAVE_REMOTE_LCD + rb->screens[SCREEN_REMOTE]->set_viewport(NULL); +#endif + + return PLUGIN_OK; +} + + +#else + +/* Charcell version of plugin */ + +static struct viewport vp0 = +{ + .x = 0, + .y = 0, + .width = 5, + .height = 1, + .xmargin = 0, + .ymargin = 0, +}; + +static struct viewport vp1 = +{ + .x = 6, + .y = 0, + .width = 5, + .height = 1, + .xmargin = 0, + .ymargin = 0, +}; + +static struct viewport vp2 = +{ + .x = 0, + .y = 1, + .width = LCD_WIDTH, + .height = 1, + .xmargin = 0, + .ymargin = 0, +}; + + +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) +{ + (void)parameter; + + rb = api; + + rb->screens[SCREEN_MAIN]->set_viewport(&vp0); + rb->screens[SCREEN_MAIN]->clear_viewport(); + rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Rockbox"); + + rb->screens[SCREEN_MAIN]->set_viewport(&vp1); + rb->screens[SCREEN_MAIN]->clear_viewport(); + rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Viewports"); + + rb->screens[SCREEN_MAIN]->set_viewport(&vp2); + rb->screens[SCREEN_MAIN]->clear_viewport(); + rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Demonstration"); + + rb->screens[SCREEN_MAIN]->update(); + + rb->button_get(true); + + /* Restore the default viewport */ + rb->screens[SCREEN_MAIN]->set_viewport(NULL); + + return PLUGIN_OK; +} + +#endif /* !HAVE_LCD_BITMAP */ -- cgit v1.2.3