summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2008-05-29 08:59:57 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2008-05-29 08:59:57 +0000
commitfd3b46c22ca34eabf1e3697ae7d54fb17da804a4 (patch)
tree52cb1bb7eeb222286181875f7d0d37903ea848f9
parentd0ed3712c7f25c28a5e8b420c776638ef4f6688a (diff)
downloadrockbox-fd3b46c22ca34eabf1e3697ae7d54fb17da804a4.tar.gz
rockbox-fd3b46c22ca34eabf1e3697ae7d54fb17da804a4.zip
draw the buttonbar in its own viewport. It always uses the sysfont and is drawn on the bottom.
Callers need to remeber to fiddle with their viewports to not be overwritten by the bar. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17651 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/gui/buttonbar.c62
2 files changed, 33 insertions, 31 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index b9b763486f..e0fdbbcd07 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -47,7 +47,9 @@ filetree.c
47scrobbler.c 47scrobbler.c
48 48
49screen_access.c 49screen_access.c
50#ifdef HAS_BUTTONBAR
50gui/buttonbar.c 51gui/buttonbar.c
52#endif
51gui/gwps.c 53gui/gwps.c
52gui/gwps-common.c 54gui/gwps-common.c
53#ifdef HAVE_LCD_BITMAP 55#ifdef HAVE_LCD_BITMAP
diff --git a/apps/gui/buttonbar.c b/apps/gui/buttonbar.c
index b4adb45d69..ce03c82a69 100644
--- a/apps/gui/buttonbar.c
+++ b/apps/gui/buttonbar.c
@@ -22,20 +22,32 @@
22 - Rewrote a lot of code to avoid global vars and make it accept eventually 22 - Rewrote a lot of code to avoid global vars and make it accept eventually
23 more that 3 buttons on the bar (just the prototype of gui_buttonbar_set 23 more that 3 buttons on the bar (just the prototype of gui_buttonbar_set
24 and the constant BUTTONBAR_MAX_BUTTONS to modify) 24 and the constant BUTTONBAR_MAX_BUTTONS to modify)
252008 Jonathan Gordon
26 - redone to use viewports, items will NOT scroll in their vp.
27 Bar is always drawn at the bottom of the screen. This may be changed later.
28 Callers need to remember to adjust their viewports to not be overwitten
25*/ 29*/
26#include "config.h" 30#include "config.h"
27#include "buttonbar.h" 31#include "buttonbar.h"
28 32#include "viewport.h"
29#ifdef HAS_BUTTONBAR
30
31#include "lcd.h" 33#include "lcd.h"
32#include "font.h" 34#include "font.h"
33#include "string.h" 35#include "string.h"
34#include "settings.h" 36#include "settings.h"
35 37
38static struct viewport bb_vp[NB_SCREENS];
36void gui_buttonbar_init(struct gui_buttonbar * buttonbar) 39void gui_buttonbar_init(struct gui_buttonbar * buttonbar)
37{ 40{
41 int i;
38 gui_buttonbar_unset(buttonbar); 42 gui_buttonbar_unset(buttonbar);
43 FOR_NB_SCREENS(i)
44 {
45 viewport_set_defaults(&bb_vp[i], i);
46 bb_vp[i].font = FONT_SYSFIXED;
47 bb_vp[i].y = screens[i].height - BUTTONBAR_HEIGHT;
48 bb_vp[i].height = BUTTONBAR_HEIGHT;
49 bb_vp[i].drawmode = DRMODE_COMPLEMENT;
50 }
39} 51}
40 52
41void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, 53void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar,
@@ -46,26 +58,22 @@ void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar,
46 58
47static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num) 59static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num)
48{ 60{
49 int xpos, ypos, button_width, text_width; 61 int button_width;
50 int fh; 62 int fh, fw;
51 struct screen * display = buttonbar->display; 63 struct screen * display = buttonbar->display;
52 display->getstringsize("M", NULL, &fh); 64 struct viewport vp = bb_vp[display->screen_type];
53 65
54 button_width = display->width/BUTTONBAR_MAX_BUTTONS; 66 button_width = display->width/BUTTONBAR_MAX_BUTTONS;
55 xpos = num * button_width; 67 vp.width = button_width;
56 ypos = display->height - fh; 68 vp.x = button_width * num;
57 69 display->set_viewport(&vp);
70 display->fillrect(0, 0, button_width - 1, vp.height);
58 if(buttonbar->caption[num][0] != 0) 71 if(buttonbar->caption[num][0] != 0)
59 { 72 {
60 /* center the text */ 73 display->getstringsize(buttonbar->caption[num], &fw, &fh);
61 text_width = display->getstringsize(buttonbar->caption[num], NULL, NULL); 74 display->putsxy((button_width - fw)/2,
62 display->putsxy(xpos + (button_width - text_width)/2, 75 (vp.height-fh)/2, buttonbar->caption[num]);
63 ypos, buttonbar->caption[num]);
64 } 76 }
65
66 display->set_drawmode(DRMODE_COMPLEMENT);
67 display->fillrect(xpos, ypos, button_width - 1, fh);
68 display->set_drawmode(DRMODE_SOLID);
69} 77}
70 78
71void gui_buttonbar_set(struct gui_buttonbar * buttonbar, 79void gui_buttonbar_set(struct gui_buttonbar * buttonbar,
@@ -101,22 +109,16 @@ void gui_buttonbar_unset(struct gui_buttonbar * buttonbar)
101void gui_buttonbar_draw(struct gui_buttonbar * buttonbar) 109void gui_buttonbar_draw(struct gui_buttonbar * buttonbar)
102{ 110{
103 struct screen * display = buttonbar->display; 111 struct screen * display = buttonbar->display;
104 screen_has_buttonbar(display, gui_buttonbar_isset(buttonbar)); 112 if(!global_settings.buttonbar || !gui_buttonbar_isset(buttonbar))
105 if(!global_settings.buttonbar || !display->has_buttonbar)
106 return; 113 return;
107 int i; 114 int i;
108 display->setfont(FONT_SYSFIXED); 115 display->set_viewport(&bb_vp[display->screen_type]);
109 116 display->clear_viewport();
110 display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
111 display->fillrect(0, display->height - BUTTONBAR_HEIGHT,
112 display->width, BUTTONBAR_HEIGHT);
113 display->set_drawmode(DRMODE_SOLID);
114
115 for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) 117 for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++)
116 gui_buttonbar_draw_button(buttonbar, i); 118 gui_buttonbar_draw_button(buttonbar, i);
117 display->update_rect(0, display->height - BUTTONBAR_HEIGHT, 119 display->set_viewport(&bb_vp[display->screen_type]);
118 display->width, BUTTONBAR_HEIGHT); 120 display->update_viewport();
119 display->setfont(FONT_UI); 121 display->set_viewport(NULL);
120} 122}
121 123
122bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar) 124bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar)
@@ -128,5 +130,3 @@ bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar)
128 return true; 130 return true;
129 return false; 131 return false;
130} 132}
131
132#endif /* HAS_BUTTONBAR */