c826933984
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17101 a1c6a512-1295-4272-9138-f99709370657
309 lines
7.5 KiB
C
309 lines
7.5 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* 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)
|
|
#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,
|
|
.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 */
|