summaryrefslogtreecommitdiff
path: root/apps/plugins/test_viewports.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/test_viewports.c')
-rw-r--r--apps/plugins/test_viewports.c309
1 files changed, 309 insertions, 0 deletions
diff --git a/apps/plugins/test_viewports.c b/apps/plugins/test_viewports.c
new file mode 100644
index 0000000..3cb8afb
--- /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 */