summaryrefslogtreecommitdiff
path: root/apps/gui/buttonbar.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/buttonbar.c')
-rw-r--r--apps/gui/buttonbar.c62
1 files changed, 31 insertions, 31 deletions
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 */