4af5dd84a2
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17859 a1c6a512-1295-4272-9138-f99709370657
134 lines
4.3 KiB
C
134 lines
4.3 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) Linus Nielsen Feltzing (2002)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
/*
|
|
2005 Kevin Ferrare :
|
|
- Multi screen support
|
|
- Rewrote a lot of code to avoid global vars and make it accept eventually
|
|
more that 3 buttons on the bar (just the prototype of gui_buttonbar_set
|
|
and the constant BUTTONBAR_MAX_BUTTONS to modify)
|
|
2008 Jonathan Gordon
|
|
- redone to use viewports, items will NOT scroll in their vp.
|
|
Bar is always drawn at the bottom of the screen. This may be changed later.
|
|
Callers need to remember to adjust their viewports to not be overwitten
|
|
*/
|
|
#include "config.h"
|
|
#include "buttonbar.h"
|
|
#include "viewport.h"
|
|
#include "lcd.h"
|
|
#include "font.h"
|
|
#include "string.h"
|
|
#include "settings.h"
|
|
|
|
static struct viewport bb_vp[NB_SCREENS];
|
|
void gui_buttonbar_init(struct gui_buttonbar * buttonbar)
|
|
{
|
|
int i;
|
|
gui_buttonbar_unset(buttonbar);
|
|
FOR_NB_SCREENS(i)
|
|
{
|
|
viewport_set_defaults(&bb_vp[i], i);
|
|
bb_vp[i].font = FONT_SYSFIXED;
|
|
bb_vp[i].y = screens[i].lcdheight - BUTTONBAR_HEIGHT;
|
|
bb_vp[i].height = BUTTONBAR_HEIGHT;
|
|
bb_vp[i].drawmode = DRMODE_COMPLEMENT;
|
|
}
|
|
}
|
|
|
|
void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar,
|
|
struct screen * display)
|
|
{
|
|
buttonbar->display = display;
|
|
}
|
|
|
|
static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num)
|
|
{
|
|
int button_width;
|
|
int fh, fw;
|
|
struct screen * display = buttonbar->display;
|
|
struct viewport vp = bb_vp[display->screen_type];
|
|
|
|
button_width = display->lcdwidth/BUTTONBAR_MAX_BUTTONS;
|
|
vp.width = button_width;
|
|
vp.x = button_width * num;
|
|
display->set_viewport(&vp);
|
|
display->fillrect(0, 0, button_width - 1, vp.height);
|
|
if(buttonbar->caption[num][0] != 0)
|
|
{
|
|
display->getstringsize(buttonbar->caption[num], &fw, &fh);
|
|
display->putsxy((button_width - fw)/2,
|
|
(vp.height-fh)/2, buttonbar->caption[num]);
|
|
}
|
|
}
|
|
|
|
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;
|
|
if(!global_settings.buttonbar || !gui_buttonbar_isset(buttonbar))
|
|
return;
|
|
int i;
|
|
display->set_viewport(&bb_vp[display->screen_type]);
|
|
display->clear_viewport();
|
|
for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++)
|
|
gui_buttonbar_draw_button(buttonbar, i);
|
|
display->set_viewport(&bb_vp[display->screen_type]);
|
|
display->update_viewport();
|
|
display->set_viewport(NULL);
|
|
}
|
|
|
|
bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar)
|
|
{
|
|
/* If all buttons are unset, the button bar is considered disabled */
|
|
int i;
|
|
for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++)
|
|
if(buttonbar->caption[i][0] != 0)
|
|
return true;
|
|
return false;
|
|
}
|