Markus Braun's progressbar and slidebar code
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1510 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
7769ad2982
commit
57e2fb1f37
2 changed files with 149 additions and 0 deletions
|
@ -1051,6 +1051,144 @@ void lcd_getfontsize(unsigned int font, int *width, int *height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print a progress bar
|
||||||
|
*/
|
||||||
|
void lcd_progressbar(int x, int y, int width, int height, int percent, int direction)
|
||||||
|
{
|
||||||
|
int pos;
|
||||||
|
int i,j;
|
||||||
|
|
||||||
|
/* draw horizontal lines */
|
||||||
|
for(i=x+1;i<=x+width-2;i++) {
|
||||||
|
DRAW_PIXEL(i,y);
|
||||||
|
DRAW_PIXEL(i,(y+height-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* draw vertical lines */
|
||||||
|
for(i=1;i<height;i++) {
|
||||||
|
DRAW_PIXEL(x,(y+i));
|
||||||
|
DRAW_PIXEL((x+width-1),(y+i));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clear edge pixels */
|
||||||
|
CLEAR_PIXEL(x,y);
|
||||||
|
CLEAR_PIXEL((x+width-1),y);
|
||||||
|
CLEAR_PIXEL(x,(y+height-1));
|
||||||
|
CLEAR_PIXEL((x+width-1),(y+height-1));
|
||||||
|
|
||||||
|
/* clear pixels in progress bar */
|
||||||
|
for(i=1;i<=width-2;i++) {
|
||||||
|
for(j=1;j<=height-2;j++) {
|
||||||
|
CLEAR_PIXEL((x+i),(y+j));
|
||||||
|
CLEAR_PIXEL((x+i),(y+j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* draw bar */
|
||||||
|
pos=percent;
|
||||||
|
if(pos<0)
|
||||||
|
pos=0;
|
||||||
|
if(pos>100)
|
||||||
|
pos=100;
|
||||||
|
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case BAR_RIGHT:
|
||||||
|
pos=(width-2)*pos/100;
|
||||||
|
for(i=1;i<=pos;i++)
|
||||||
|
for(j=1;j<height-1;j++)
|
||||||
|
DRAW_PIXEL((x+i),(y+j));
|
||||||
|
break;
|
||||||
|
case BAR_LEFT:
|
||||||
|
pos=(width-2)*(100-pos)/100;
|
||||||
|
for(i=pos+1;i<=width-2;i++)
|
||||||
|
for(j=1;j<height-1;j++)
|
||||||
|
DRAW_PIXEL((x+i),(y+j));
|
||||||
|
break;
|
||||||
|
case BAR_DOWN:
|
||||||
|
pos=(height-2)*pos/100;
|
||||||
|
for(i=1;i<=pos;i++)
|
||||||
|
for(j=1;j<width-1;j++)
|
||||||
|
DRAW_PIXEL((x+j),(y+i));
|
||||||
|
break;
|
||||||
|
case BAR_UP:
|
||||||
|
pos=(height-2)*(100-pos)/100;
|
||||||
|
for(i=pos+1;i<=height-2;i++)
|
||||||
|
for(j=1;j<width-1;j++)
|
||||||
|
DRAW_PIXEL((x+j),(y+i));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print a slidebar bar
|
||||||
|
*/
|
||||||
|
void lcd_slidebar(int x, int y, int width, int height, int percent, int direction)
|
||||||
|
{
|
||||||
|
int pos;
|
||||||
|
int i,j;
|
||||||
|
|
||||||
|
/* draw horizontal lines */
|
||||||
|
for(i=x+1;i<=x+width-2;i++) {
|
||||||
|
DRAW_PIXEL(i,y);
|
||||||
|
DRAW_PIXEL(i,(y+height-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* draw vertical lines */
|
||||||
|
for(i=1;i<height;i++) {
|
||||||
|
DRAW_PIXEL(x,(y+i));
|
||||||
|
DRAW_PIXEL((x+width-1),(y+i));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clear edge pixels */
|
||||||
|
CLEAR_PIXEL(x,y);
|
||||||
|
CLEAR_PIXEL((x+width-1),y);
|
||||||
|
CLEAR_PIXEL(x,(y+height-1));
|
||||||
|
CLEAR_PIXEL((x+width-1),(y+height-1));
|
||||||
|
|
||||||
|
/* clear pixels in progress bar */
|
||||||
|
for(i=1;i<=width-2;i++)
|
||||||
|
for(j=1;j<=height-2;j++) {
|
||||||
|
CLEAR_PIXEL((x+i),(y+j));
|
||||||
|
CLEAR_PIXEL((x+i),(y+j));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* draw point */
|
||||||
|
pos=percent;
|
||||||
|
if(pos<0)
|
||||||
|
pos=0;
|
||||||
|
if(pos>100)
|
||||||
|
pos=100;
|
||||||
|
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case BAR_RIGHT:
|
||||||
|
pos=(width-height-1)*pos/100;
|
||||||
|
break;
|
||||||
|
case BAR_LEFT:
|
||||||
|
pos=(width-height-1)*(100-pos)/100;
|
||||||
|
break;
|
||||||
|
case BAR_DOWN:
|
||||||
|
pos=(height-width-1)*pos/100;
|
||||||
|
break;
|
||||||
|
case BAR_UP:
|
||||||
|
pos=(height-width-1)*(100-pos)/100;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(direction == BAR_LEFT || direction == BAR_RIGHT)
|
||||||
|
for(i=1;i<height;i++)
|
||||||
|
for(j=1;j<height;j++)
|
||||||
|
DRAW_PIXEL((x+pos+i),(y+j));
|
||||||
|
else
|
||||||
|
for(i=1;i<width;i++)
|
||||||
|
for(j=1;j<width;j++)
|
||||||
|
DRAW_PIXEL((x+i),(y+pos+j));
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* no LCD defined, no code to use */
|
/* no LCD defined, no code to use */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -74,6 +74,15 @@ extern void lcd_double_height (bool on);
|
||||||
#define LCD_WIDTH 112 /* Display width in pixels */
|
#define LCD_WIDTH 112 /* Display width in pixels */
|
||||||
#define LCD_HEIGHT 64 /* Display height in pixels */
|
#define LCD_HEIGHT 64 /* Display height in pixels */
|
||||||
|
|
||||||
|
/* Directions for progressbar and scrollbar */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
BAR_RIGHT = 0,
|
||||||
|
BAR_LEFT,
|
||||||
|
BAR_DOWN,
|
||||||
|
BAR_UP
|
||||||
|
};
|
||||||
|
|
||||||
extern void lcd_putsxy(int x, int y, unsigned char *string, int font);
|
extern void lcd_putsxy(int x, int y, unsigned char *string, int font);
|
||||||
extern void lcd_setfont(int font);
|
extern void lcd_setfont(int font);
|
||||||
extern void lcd_getfontsize(unsigned int font, int *width, int *height);
|
extern void lcd_getfontsize(unsigned int font, int *width, int *height);
|
||||||
|
@ -88,6 +97,8 @@ extern void lcd_drawline( int x1, int y1, int x2, int y2 );
|
||||||
extern void lcd_clearline( int x1, int y1, int x2, int y2 );
|
extern void lcd_clearline( int x1, int y1, int x2, int y2 );
|
||||||
extern void lcd_drawpixel(int x, int y);
|
extern void lcd_drawpixel(int x, int y);
|
||||||
extern void lcd_clearpixel(int x, int y);
|
extern void lcd_clearpixel(int x, int y);
|
||||||
|
extern void lcd_progressbar(int x, int y, int width, int height, int percent, int direction);
|
||||||
|
extern void lcd_slidebar(int x, int y, int width, int height, int percent, int direction);
|
||||||
|
|
||||||
#endif /* CHARCELLS / BITMAP */
|
#endif /* CHARCELLS / BITMAP */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue