mirror of
https://github.com/markqvist/OpenModem.git
synced 2025-05-02 14:36:20 -04:00
Working
This commit is contained in:
commit
c898b090dd
1049 changed files with 288572 additions and 0 deletions
105
bertos/gui/levelbar.c
Normal file
105
bertos/gui/levelbar.c
Normal file
|
@ -0,0 +1,105 @@
|
|||
/**
|
||||
* \file
|
||||
* Copyright 2004, 2006 Develer S.r.l. (http://www.develer.com/)
|
||||
*
|
||||
*
|
||||
* \brief Graphics user interface element to display a level bar.
|
||||
*
|
||||
* \author Stefano Fedrigo <aleph@develer.com>
|
||||
*/
|
||||
|
||||
#include "levelbar.h"
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the LevelBar widget with the bitmap associated,
|
||||
* the value range and the coordinates in the bitmap.
|
||||
* \note The levelbar should be at least 5 pixels wide and high
|
||||
* for correct borders drawing. No check is done on this.
|
||||
*/
|
||||
void lbar_init(struct LevelBar *lb, struct Bitmap *bmp, int type, int min, int max, int pos,
|
||||
coord_t x1, coord_t y1, coord_t x2, coord_t y2)
|
||||
{
|
||||
lb->bitmap = bmp;
|
||||
lb->type = type;
|
||||
lb->min = min;
|
||||
lb->max = max;
|
||||
lb->pos = pos;
|
||||
lb->x1 = x1;
|
||||
lb->y1 = y1;
|
||||
lb->x2 = x2;
|
||||
lb->y2 = y2;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the level.
|
||||
*/
|
||||
void lbar_setLevel(struct LevelBar *lb, int level)
|
||||
{
|
||||
if (level < lb->min)
|
||||
level = lb->min;
|
||||
if (level > lb->max)
|
||||
level = lb->max;
|
||||
|
||||
lb->pos = level;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get current level.
|
||||
*/
|
||||
int lbar_getLevel(struct LevelBar *lb)
|
||||
{
|
||||
return lb->pos;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change level with respect to previous value
|
||||
* (delta can be negative).
|
||||
*/
|
||||
void lbar_changeLevel(struct LevelBar *lb, int delta)
|
||||
{
|
||||
lbar_setLevel(lb, lb->pos + delta);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change the top limit.
|
||||
*/
|
||||
void lbar_setMax(struct LevelBar *lb, int max)
|
||||
{
|
||||
lb->max = max;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Render the LevelBar on the bitmap.
|
||||
*/
|
||||
void lbar_draw(struct LevelBar *lb)
|
||||
{
|
||||
#define BORDERW 1
|
||||
#define BORDERH 1
|
||||
|
||||
/* Compute filled bar length in pixels */
|
||||
int totlen = (lb->type & LBAR_HORIZONTAL) ? lb->x2 - lb->x1 - BORDERW*4 : lb->y2 - lb->y1 - BORDERH*4;
|
||||
int range = lb->max - lb->min;
|
||||
int barlen = ((long)(lb->pos - lb->min) * (long)totlen + range - 1) / range;
|
||||
|
||||
// Draw border
|
||||
gfx_rectDraw(lb->bitmap, lb->x1, lb->y1, lb->x2, lb->y2);
|
||||
|
||||
// Clear inside
|
||||
gfx_rectClear(lb->bitmap, lb->x1 + BORDERW, lb->y1 + BORDERH, lb->x2 - BORDERW, lb->y2 - BORDERH);
|
||||
|
||||
// Draw bar
|
||||
if (lb->type & LBAR_HORIZONTAL)
|
||||
gfx_rectFill(lb->bitmap,
|
||||
lb->x1 + BORDERW*2, lb->y1 + BORDERH*2,
|
||||
lb->x1 + BORDERW*2 + barlen, lb->y2 - BORDERH*2);
|
||||
else
|
||||
gfx_rectFill(lb->bitmap,
|
||||
lb->x1 + BORDERW*2, lb->y2 - BORDERH*2 - barlen,
|
||||
lb->x2 - BORDERW*2, lb->y2 - BORDERH*2);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue