summaryrefslogtreecommitdiff
path: root/apps/gui/buttonbar.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2005-10-28 00:00:00 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2005-10-28 00:00:00 +0000
commit7da9477bc3401cbd90b2984f625f96f451ecaf6b (patch)
tree8aea2c154ad0f666f57c4752fa541fa539de757c /apps/gui/buttonbar.c
parent3efa91ed03797dd533c0add6db750ade67499587 (diff)
downloadrockbox-7da9477bc3401cbd90b2984f625f96f451ecaf6b.zip
rockbox-7da9477bc3401cbd90b2984f625f96f451ecaf6b.tar.gz
rockbox-7da9477bc3401cbd90b2984f625f96f451ecaf6b.tar.bz2
rockbox-7da9477bc3401cbd90b2984f625f96f451ecaf6b.tar.xz
Initial multi screen support by Kévin Ferrare (Patch #1318081)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7666 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui/buttonbar.c')
-rw-r--r--apps/gui/buttonbar.c126
1 files changed, 126 insertions, 0 deletions
diff --git a/apps/gui/buttonbar.c b/apps/gui/buttonbar.c
new file mode 100644
index 0000000..be87b1b
--- /dev/null
+++ b/apps/gui/buttonbar.c
@@ -0,0 +1,126 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) Linus Nielsen Feltzing (2002), Kévin FERRARE (2005)
+ *
+ * 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 "config.h"
+#include "buttonbar.h"
+
+#ifdef HAS_BUTTONBAR
+
+#include "lcd.h"
+#include "font.h"
+#include "string.h"
+#include "settings.h"
+
+void gui_buttonbar_init(struct gui_buttonbar * buttonbar)
+{
+ gui_buttonbar_unset(buttonbar);
+}
+
+void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar,
+ struct screen * display)
+{
+ buttonbar->display = display;
+}
+
+void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num)
+{
+ int xpos, ypos, button_width, text_width;
+ int fw, fh;
+ struct screen * display = buttonbar->display;
+
+ display->setfont(FONT_SYSFIXED);
+ display->getstringsize("M", &fw, &fh);
+
+ button_width = display->width/BUTTONBAR_MAX_BUTTONS;
+ xpos = num * button_width;
+ ypos = display->height - fh;
+
+ if(buttonbar->caption[num][0] != 0)
+ {
+ /* center the text */
+ text_width = fw * strlen(buttonbar->caption[num]);
+ display->putsxy(xpos + (button_width - text_width)/2,
+ ypos, buttonbar->caption[num]);
+ }
+
+ display->set_drawmode(DRMODE_COMPLEMENT);
+ display->fillrect(xpos, ypos, button_width - 1, fh);
+ display->set_drawmode(DRMODE_SOLID);
+ display->setfont(FONT_UI);
+}
+
+void gui_buttonbar_set(struct gui_buttonbar * buttonbar,
+ const char *caption1,
+ const char *caption2,
+ const char *caption3)
+{
+ gui_buttonbar_unset(buttonbar);
+ if(caption1)
+ {
+ strncpy(buttonbar->caption[0], caption1, 7);
+ buttonbar->caption[0][7] = 0;
+ }
+ if(caption2)
+ {
+ strncpy(buttonbar->caption[1], caption2, 7);
+ buttonbar->caption[1][7] = 0;
+ }
+ if(caption3)
+ {
+ strncpy(buttonbar->caption[2], caption3, 7);
+ buttonbar->caption[2][7] = 0;
+ }
+}
+
+void gui_buttonbar_unset(struct gui_buttonbar * buttonbar)
+{
+ int i;
+ for(i = 0;i < BUTTONBAR_MAX_BUTTONS;++i)
+ buttonbar->caption[i][0] = 0;
+}
+
+void gui_buttonbar_draw(struct gui_buttonbar * buttonbar)
+{
+ struct screen * display = buttonbar->display;
+ int i;
+
+ display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
+ display->fillrect(0, display->height - BUTTONBAR_HEIGHT,
+ display->width, BUTTONBAR_HEIGHT);
+ display->set_drawmode(DRMODE_SOLID);
+
+ for(i = 0;i < BUTTONBAR_MAX_BUTTONS;++i)
+ gui_buttonbar_draw_button(buttonbar, i);
+ display->update_rect(0, display->height - BUTTONBAR_HEIGHT,
+ display->width, BUTTONBAR_HEIGHT);
+}
+
+bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar)
+{
+ /* If all buttons are unset, the button bar is considered disabled */
+ if(!global_settings.buttonbar)
+ return(false);
+ int i;
+ for(i = 0;i < BUTTONBAR_MAX_BUTTONS;++i)
+ if(buttonbar->caption[i] != 0)
+ return true;
+ return false;
+}
+
+#endif /* HAS_BUTTONBAR */