107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
#include "include.h"
|
|
|
|
#define TRACE_EN 1
|
|
|
|
#if TRACE_EN
|
|
#define TRACE(...) printf(__VA_ARGS__)
|
|
#else
|
|
#define TRACE(...)
|
|
#endif
|
|
|
|
//根据数字图像资源创建一个数字, num_cnt表示该数字最大位数
|
|
compo_number_t *compo_number_create(compo_form_t *frm, u32 res_addr, int num_cnt)
|
|
{
|
|
int i;
|
|
if (num_cnt <= 0 || num_cnt > MAX_NUMBER_CNT) {
|
|
halt(HALT_GUI_COMPO_NUMBER_CNT);
|
|
}
|
|
compo_number_t *num = compo_create(frm, COMPO_TYPE_NUMBER);
|
|
widget_page_t *page = widget_page_create(frm->page);
|
|
num->flag_zfill = false;
|
|
num->page = page;
|
|
num->num_cnt = num_cnt;
|
|
num->max_val = 1;
|
|
for (i=0; i<num_cnt; i++) {
|
|
widget_page_t *page_num = widget_page_create(page);
|
|
widget_set_align_center(page_num, false);
|
|
widget_image_t *img = widget_image_create(page_num, res_addr);
|
|
widget_set_align_center(img, false);
|
|
if (num->num_wid == 0) {
|
|
area_t area = widget_image_get_size(img);
|
|
num->num_wid = area.wid;
|
|
num->num_hei = area.hei / 10;
|
|
}
|
|
widget_set_size(page_num, num->num_wid, num->num_hei);
|
|
num->page_num[i] = page_num;
|
|
num->max_val *= 10;
|
|
}
|
|
num->max_val--;
|
|
compo_number_set_margin(num, num->num_wid / 8);
|
|
return num;
|
|
}
|
|
|
|
//设置数字值
|
|
void compo_number_set(compo_number_t *num, int val)
|
|
{
|
|
int i, znum;
|
|
if (val < 0 || val > num->max_val) {
|
|
halt(HALT_GUI_COMPO_NUMBER_VALUE);
|
|
}
|
|
num->value = val;
|
|
znum = num->num_cnt - 1;
|
|
for (i=znum; i>=0; i--) {
|
|
int v = val % 10;
|
|
val /= 10;
|
|
widget_page_set_client(num->page_num[i], 0, -v * num->num_hei);
|
|
widget_set_visible(num->page_num[i], true);
|
|
if (v > 0) {
|
|
znum = i;
|
|
}
|
|
}
|
|
if (!num->flag_zfill) {
|
|
for (i=0; i<znum; i++) {
|
|
widget_set_visible(num->page_num[i], false);
|
|
}
|
|
}
|
|
}
|
|
|
|
//设置坐标及大小
|
|
void compo_number_set_location(compo_number_t *num, s16 x, s16 y, s16 width, s16 height)
|
|
{
|
|
widget_set_location(num->page, x, y, width, height);
|
|
}
|
|
|
|
//设置坐标
|
|
void compo_number_set_pos(compo_number_t *num, s16 x, s16 y)
|
|
{
|
|
widget_set_pos(num->page, x, y);
|
|
}
|
|
|
|
//设置透明度
|
|
void compo_number_set_alpha(compo_number_t *num, u8 alpha)
|
|
{
|
|
widget_set_alpha(num->page, alpha);
|
|
}
|
|
|
|
//设置字间距
|
|
void compo_number_set_margin(compo_number_t *num, int margin)
|
|
{
|
|
int i, x;
|
|
x = 0;
|
|
for (i=0; i<num->num_cnt; i++) {
|
|
if (i != 0) {
|
|
x += margin;
|
|
}
|
|
widget_set_pos(num->page_num[i], x, 0);
|
|
x += num->num_wid;
|
|
}
|
|
widget_set_size(num->page, x, num->num_hei);
|
|
}
|
|
|
|
//设置高位是否填0
|
|
void compo_number_set_zfill(compo_number_t *num, bool flag)
|
|
{
|
|
num->flag_zfill = flag;
|
|
compo_number_set(num, num->value);
|
|
}
|