| /*************************************************************************** |
| * __________ __ ___. |
| * Open \______ \ ____ ____ | | _\_ |__ _______ ___ |
| * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / |
| * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < |
| * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ |
| * \/ \/ \/ \/ \/ |
| * $Id: helloworld.c 12807 2007-03-16 21:56:08Z amiconn $ |
| * |
| * Copyright (C) 2007 Dave Chapman |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation; either version 2 |
| * of the License, or (at your option) any later version. |
| * |
| * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| * KIND, either express or implied. |
| * |
| ****************************************************************************/ |
| |
| #include "plugin.h" |
| |
| PLUGIN_HEADER |
| |
| static const 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) |
| #elif 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, |
| #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, |
| #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, |
| #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, |
| #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, |
| #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, |
| #if LCD_REMOTE_DEPTH > 1 |
| .fg_pattern = LCD_REMOTE_DEFAULT_FG, |
| .bg_pattern = LCD_REMOTE_DEFAULT_BG |
| #endif |
| }; |
| |
| #endif |
| |
| |
| enum plugin_status plugin_start(const struct plugin_api* api, const 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, |
| }; |
| |
| static struct viewport vp1 = |
| { |
| .x = 6, |
| .y = 0, |
| .width = 5, |
| .height = 1, |
| }; |
| |
| static struct viewport vp2 = |
| { |
| .x = 0, |
| .y = 1, |
| .width = LCD_WIDTH, |
| .height = 1, |
| }; |
| |
| |
| enum plugin_status plugin_start(const struct plugin_api* api, const 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 */ |