#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; inum_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; ipage_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; inum_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); }