diff options
Diffstat (limited to 'apps/gui')
-rw-r--r-- | apps/gui/buttonbar.c | 62 |
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) |
25 | 2008 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 | ||
38 | static struct viewport bb_vp[NB_SCREENS]; | ||
36 | void gui_buttonbar_init(struct gui_buttonbar * buttonbar) | 39 | void 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 | ||
41 | void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, | 53 | void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, |
@@ -46,26 +58,22 @@ void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, | |||
46 | 58 | ||
47 | static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num) | 59 | static 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 | ||
71 | void gui_buttonbar_set(struct gui_buttonbar * buttonbar, | 79 | void gui_buttonbar_set(struct gui_buttonbar * buttonbar, |
@@ -101,22 +109,16 @@ void gui_buttonbar_unset(struct gui_buttonbar * buttonbar) | |||
101 | void gui_buttonbar_draw(struct gui_buttonbar * buttonbar) | 109 | void 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 | ||
122 | bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar) | 124 | bool 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 */ | ||