From 7da9477bc3401cbd90b2984f625f96f451ecaf6b Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Fri, 28 Oct 2005 00:00:00 +0000 Subject: =?UTF-8?q?Initial=20multi=20screen=20support=20by=20K=C3=A9vin=20?= =?UTF-8?q?Ferrare=20(Patch=20#1318081)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7666 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/buttonbar.c | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 apps/gui/buttonbar.c (limited to 'apps/gui/buttonbar.c') 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 */ -- cgit v1.1