1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
8 * $Id: helloworld.c 12807 2007-03-16 21:56:08Z amiconn $
10 * Copyright (C) 2007 Dave Chapman
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
26 static const struct plugin_api
* rb
;
28 #ifdef HAVE_LCD_BITMAP
31 #define BGCOLOR_1 LCD_RGBPACK(255,255,0)
32 #define BGCOLOR_2 LCD_RGBPACK(0,255,0)
33 #define FGCOLOR_1 LCD_RGBPACK(0,0,255)
35 #define BGCOLOR_1 LCD_DARKGRAY
36 #define BGCOLOR_2 LCD_LIGHTGRAY
37 #define FGCOLOR_1 LCD_WHITE
40 static struct viewport vp0
=
47 .drawmode
= DRMODE_SOLID
,
49 .fg_pattern
= LCD_DEFAULT_FG
,
50 .bg_pattern
= BGCOLOR_1
,
53 .lss_pattern
= LCD_DEFAULT_BG
,
54 .lse_pattern
= LCD_DEFAULT_BG
,
55 .lst_pattern
= LCD_DEFAULT_BG
,
59 static struct viewport vp1
=
63 .width
= LCD_WIDTH
/ 3,
64 .height
= LCD_HEIGHT
/ 2,
65 .font
= FONT_SYSFIXED
,
66 .drawmode
= DRMODE_SOLID
,
68 .fg_pattern
= LCD_DEFAULT_FG
,
69 .bg_pattern
= LCD_DEFAULT_BG
,
71 .lss_pattern
= LCD_DEFAULT_BG
,
72 .lse_pattern
= LCD_DEFAULT_BG
,
73 .lst_pattern
= LCD_DEFAULT_BG
,
78 static struct viewport vp2
=
82 .width
= LCD_WIDTH
/ 3,
83 .height
= (LCD_HEIGHT
/ 2),
85 .drawmode
= DRMODE_SOLID
,
87 .fg_pattern
= FGCOLOR_1
,
88 .bg_pattern
= BGCOLOR_2
,
90 .lss_pattern
= LCD_DEFAULT_BG
,
91 .lse_pattern
= LCD_DEFAULT_BG
,
92 .lst_pattern
= LCD_DEFAULT_BG
,
98 static struct viewport vp3
=
101 .y
= (5 * LCD_HEIGHT
) / 8,
102 .width
= LCD_WIDTH
/ 2,
103 .height
= (LCD_HEIGHT
/ 4),
104 .font
= FONT_SYSFIXED
,
105 .drawmode
= DRMODE_SOLID
,
107 .fg_pattern
= LCD_BLACK
,
108 .bg_pattern
= LCD_WHITE
,
109 #ifdef HAVE_LCD_COLOR
110 .lss_pattern
= LCD_DEFAULT_BG
,
111 .lse_pattern
= LCD_DEFAULT_BG
,
112 .lst_pattern
= LCD_DEFAULT_BG
,
118 #ifdef HAVE_REMOTE_LCD
119 static struct viewport rvp0
=
123 .width
= LCD_REMOTE_WIDTH
/ 3,
124 .height
= LCD_REMOTE_HEIGHT
- 10,
125 .font
= FONT_SYSFIXED
,
126 .drawmode
= DRMODE_SOLID
,
127 #if LCD_REMOTE_DEPTH > 1
128 .fg_pattern
= LCD_REMOTE_BLACK
,
129 .bg_pattern
= LCD_REMOTE_LIGHTGRAY
,
133 static struct viewport rvp1
=
135 .x
= LCD_REMOTE_WIDTH
/ 2,
137 .width
= LCD_REMOTE_WIDTH
/ 3,
138 .height
= LCD_REMOTE_HEIGHT
- 10,
139 .font
= FONT_SYSFIXED
,
140 .drawmode
= DRMODE_SOLID
,
141 #if LCD_REMOTE_DEPTH > 1
142 .fg_pattern
= LCD_REMOTE_DEFAULT_FG
,
143 .bg_pattern
= LCD_REMOTE_DEFAULT_BG
150 enum plugin_status
plugin_start(const struct plugin_api
* api
, const void* parameter
)
158 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp0
);
159 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
160 rb
->screens
[SCREEN_MAIN
]->puts_scroll(0,0,"Viewport testing plugin - this is a scrolling title");
162 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp1
);
163 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
165 for (i
= 0 ; i
< 3; i
++)
167 rb
->snprintf(buf
,sizeof(buf
),"Left text, scrolling_line %d",i
);
168 rb
->screens
[SCREEN_MAIN
]->puts_scroll(0,i
,buf
);
171 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp2
);
172 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
173 for (i
= 1 ; i
< 3; i
++)
175 rb
->snprintf(buf
,sizeof(buf
),"Right text, scrolling line %d",i
);
176 rb
->screens
[SCREEN_MAIN
]->puts_scroll(1,i
,buf
);
180 for (i
= -10; i
< vp2
.width
+ 10; i
+= 5)
182 rb
->screens
[SCREEN_MAIN
]->drawline(i
, y
, i
, vp2
.height
- y
);
185 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp3
);
186 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
187 for (i
= 1 ; i
< 2; i
++)
189 rb
->snprintf(buf
,sizeof(buf
),"Bottom text, a scrolling line %d",i
);
190 rb
->screens
[SCREEN_MAIN
]->puts_scroll(2,i
,buf
);
192 rb
->screens
[SCREEN_MAIN
]->puts_scroll(4,i
,"Short line");
193 rb
->screens
[SCREEN_MAIN
]->update();
196 #ifdef HAVE_REMOTE_LCD
197 rb
->screens
[SCREEN_REMOTE
]->set_viewport(&rvp0
);
198 rb
->screens
[SCREEN_REMOTE
]->clear_viewport();
200 for (i
= 0 ; i
< 5; i
++)
202 rb
->snprintf(buf
,sizeof(buf
),"Left text, scrolling_line %d",i
);
203 rb
->screens
[SCREEN_REMOTE
]->puts_scroll(0,i
,buf
);
205 rb
->screens
[SCREEN_REMOTE
]->puts(1,i
,"Static");
207 rb
->screens
[SCREEN_REMOTE
]->set_viewport(&rvp1
);
208 rb
->screens
[SCREEN_REMOTE
]->clear_viewport();
209 for (i
= 1 ; i
< 3; i
++)
211 rb
->snprintf(buf
,sizeof(buf
),"Right text, scrolling line %d",i
);
212 rb
->screens
[SCREEN_REMOTE
]->puts_scroll(1,i
,buf
);
216 for (i
= -10; i
< rvp1
.width
+ 10; i
+= 5)
218 rb
->screens
[SCREEN_REMOTE
]->drawline(i
, y
, i
, rvp1
.height
- y
);
221 rb
->screens
[SCREEN_REMOTE
]->update();
224 rb
->button_get(true);
226 /* Restore the default viewport */
227 rb
->screens
[SCREEN_MAIN
]->set_viewport(NULL
);
228 #ifdef HAVE_REMOTE_LCD
229 rb
->screens
[SCREEN_REMOTE
]->set_viewport(NULL
);
238 /* Charcell version of plugin */
240 static struct viewport vp0
=
248 static struct viewport vp1
=
256 static struct viewport vp2
=
265 enum plugin_status
plugin_start(const struct plugin_api
* api
, const void* parameter
)
271 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp0
);
272 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
273 rb
->screens
[SCREEN_MAIN
]->puts_scroll(0,0,"Rockbox");
275 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp1
);
276 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
277 rb
->screens
[SCREEN_MAIN
]->puts_scroll(0,0,"Viewports");
279 rb
->screens
[SCREEN_MAIN
]->set_viewport(&vp2
);
280 rb
->screens
[SCREEN_MAIN
]->clear_viewport();
281 rb
->screens
[SCREEN_MAIN
]->puts_scroll(0,0,"Demonstration");
283 rb
->screens
[SCREEN_MAIN
]->update();
285 rb
->button_get(true);
287 /* Restore the default viewport */
288 rb
->screens
[SCREEN_MAIN
]->set_viewport(NULL
);
293 #endif /* !HAVE_LCD_BITMAP */