mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-29 10:38:47 +08:00
progress bar support max property
This commit is contained in:
parent
26ec22e983
commit
3d0a59768a
@ -389,7 +389,7 @@
|
||||
#include "assets/inc/images/arrow_left_n.data"
|
||||
#include "assets/inc/images/edit_clear_p.data"
|
||||
#include "assets/inc/images/battery_2.data"
|
||||
#endif/*WITH_STB_IMAGE*/
|
||||
#endif /*WITH_STB_IMAGE*/
|
||||
#ifdef WITH_VGCANVAS
|
||||
#include "assets/inc/images/pointer_4.bsvg"
|
||||
#include "assets/inc/images/ball.bsvg"
|
||||
@ -397,13 +397,13 @@
|
||||
#include "assets/inc/images/pointer_1.bsvg"
|
||||
#include "assets/inc/images/pointer.bsvg"
|
||||
#include "assets/inc/images/girl.bsvg"
|
||||
#endif/*WITH_VGCANVAS*/
|
||||
#endif /*WITH_VGCANVAS*/
|
||||
#if defined(WITH_TRUETYPE_FONT)
|
||||
#include "assets/inc/fonts/default.res"
|
||||
#else/*WITH_TRUETYPE_FONT*/
|
||||
#else /*WITH_TRUETYPE_FONT*/
|
||||
#include "assets/inc/fonts/default.data"
|
||||
#endif/*WITH_TRUETYPE_FONT*/
|
||||
#endif/*WITH_FS_RES*/
|
||||
#endif /*WITH_TRUETYPE_FONT*/
|
||||
#endif /*WITH_FS_RES*/
|
||||
|
||||
ret_t assets_init(void) {
|
||||
assets_manager_t* am = assets_manager();
|
||||
@ -685,7 +685,7 @@ ret_t assets_init(void) {
|
||||
assets_manager_add(am, image_pointer_1);
|
||||
assets_manager_add(am, image_pointer);
|
||||
assets_manager_add(am, image_girl);
|
||||
#endif/*WITH_VGCANVAS*/
|
||||
#endif /*WITH_VGCANVAS*/
|
||||
#endif
|
||||
|
||||
tk_init_assets();
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
static inline ret_t on_timer(const timer_info_t* timer) {
|
||||
widget_t* progress_bar = (widget_t*)timer->ctx;
|
||||
uint8_t value = (PROGRESS_BAR(progress_bar)->value + 5) % 100;
|
||||
float_t value = ((int)(PROGRESS_BAR(progress_bar)->value + 5)) % 100;
|
||||
progress_bar_set_value(progress_bar, value);
|
||||
|
||||
return RET_REPEAT;
|
||||
@ -10,7 +10,7 @@ static inline ret_t on_timer(const timer_info_t* timer) {
|
||||
|
||||
static inline ret_t on_inc(void* ctx, event_t* e) {
|
||||
widget_t* progress_bar = (widget_t*)ctx;
|
||||
uint8_t value = (PROGRESS_BAR(progress_bar)->value + 10) % 100;
|
||||
float_t value = ((int)(PROGRESS_BAR(progress_bar)->value + 10)) % 100;
|
||||
progress_bar_set_value(progress_bar, value);
|
||||
(void)e;
|
||||
return RET_OK;
|
||||
@ -18,7 +18,7 @@ static inline ret_t on_inc(void* ctx, event_t* e) {
|
||||
|
||||
static inline ret_t on_dec(void* ctx, event_t* e) {
|
||||
widget_t* progress_bar = (widget_t*)ctx;
|
||||
uint8_t value = (PROGRESS_BAR(progress_bar)->value + 90) % 100;
|
||||
float_t value = ((int)(PROGRESS_BAR(progress_bar)->value + 90)) % 100;
|
||||
progress_bar_set_value(progress_bar, value);
|
||||
(void)e;
|
||||
return RET_OK;
|
||||
|
@ -5,6 +5,7 @@
|
||||
* edit/mledit 获得焦点时选中文本。
|
||||
* combo\_box 增加localize\_options选项
|
||||
* edit min/max/step/type支持脚本绑定。
|
||||
* progress bar支持max属性。
|
||||
|
||||
* 2019/09/26
|
||||
* rename stream\_socket to stream\_tcp。
|
||||
|
@ -62,16 +62,14 @@ ret_t time_clock_set_anchor_for_str(float_t max_size, const char* anchor, float_
|
||||
}
|
||||
|
||||
ret_t time_clock_set_hour_anchor(widget_t* widget, const char* anchor_x, const char* anchor_y) {
|
||||
ret_t ret = RET_OK;
|
||||
float_t tmp = 0.0f;
|
||||
time_clock_t* time_clock = TIME_CLOCK(widget);
|
||||
|
||||
return_value_if_fail(time_clock != NULL, RET_BAD_PARAMS);
|
||||
|
||||
if(anchor_x != NULL) {
|
||||
if (anchor_x != NULL) {
|
||||
time_clock->hour_anchor_x = tk_str_copy(time_clock->hour_anchor_x, anchor_x);
|
||||
}
|
||||
if(anchor_y != NULL) {
|
||||
if (anchor_y != NULL) {
|
||||
time_clock->hour_anchor_y = tk_str_copy(time_clock->hour_anchor_y, anchor_y);
|
||||
}
|
||||
|
||||
@ -79,16 +77,14 @@ ret_t time_clock_set_hour_anchor(widget_t* widget, const char* anchor_x, const c
|
||||
}
|
||||
|
||||
ret_t time_clock_set_minute_anchor(widget_t* widget, const char* anchor_x, const char* anchor_y) {
|
||||
ret_t ret = RET_OK;
|
||||
float_t tmp = 0.0f;
|
||||
time_clock_t* time_clock = TIME_CLOCK(widget);
|
||||
|
||||
return_value_if_fail(time_clock != NULL, RET_BAD_PARAMS);
|
||||
|
||||
if(anchor_x != NULL) {
|
||||
if (anchor_x != NULL) {
|
||||
time_clock->minute_anchor_x = tk_str_copy(time_clock->minute_anchor_x, anchor_x);
|
||||
}
|
||||
if(anchor_y != NULL) {
|
||||
if (anchor_y != NULL) {
|
||||
time_clock->minute_anchor_y = tk_str_copy(time_clock->minute_anchor_y, anchor_y);
|
||||
}
|
||||
|
||||
@ -96,16 +92,14 @@ ret_t time_clock_set_minute_anchor(widget_t* widget, const char* anchor_x, const
|
||||
}
|
||||
|
||||
ret_t time_clock_set_second_anchor(widget_t* widget, const char* anchor_x, const char* anchor_y) {
|
||||
ret_t ret = RET_OK;
|
||||
float_t tmp = 0.0f;
|
||||
time_clock_t* time_clock = TIME_CLOCK(widget);
|
||||
|
||||
return_value_if_fail(time_clock != NULL, RET_BAD_PARAMS);
|
||||
|
||||
if(anchor_x != NULL) {
|
||||
if (anchor_x != NULL) {
|
||||
time_clock->second_anchor_x = tk_str_copy(time_clock->second_anchor_x, anchor_x);
|
||||
}
|
||||
if(anchor_y != NULL) {
|
||||
if (anchor_y != NULL) {
|
||||
time_clock->second_anchor_y = tk_str_copy(time_clock->second_anchor_y, anchor_y);
|
||||
}
|
||||
|
||||
@ -255,17 +249,17 @@ static ret_t time_clock_set_prop(widget_t* widget, const char* name, const value
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_IMAGE)) {
|
||||
return time_clock_set_image(widget, value_str(v));
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_HOUR_ANCHOR_X)) {
|
||||
return time_clock_set_hour_anchor( widget, value_str(v), NULL);
|
||||
return time_clock_set_hour_anchor(widget, value_str(v), NULL);
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_HOUR_ANCHOR_Y)) {
|
||||
return time_clock_set_hour_anchor( widget, NULL, value_str(v));
|
||||
return time_clock_set_hour_anchor(widget, NULL, value_str(v));
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_MINUTE_ANCHOR_X)) {
|
||||
return time_clock_set_minute_anchor( widget, value_str(v), NULL);
|
||||
return time_clock_set_minute_anchor(widget, value_str(v), NULL);
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_MINUTE_ANCHOR_Y)) {
|
||||
return time_clock_set_minute_anchor( widget, NULL, value_str(v));
|
||||
return time_clock_set_minute_anchor(widget, NULL, value_str(v));
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_SECOND_ANCHOR_X)) {
|
||||
return time_clock_set_second_anchor( widget, value_str(v), NULL);
|
||||
return time_clock_set_second_anchor(widget, value_str(v), NULL);
|
||||
} else if (tk_str_eq(name, TIME_CLOCK_PROP_SECOND_ANCHOR_Y)) {
|
||||
return time_clock_set_second_anchor( widget, NULL, value_str(v));
|
||||
return time_clock_set_second_anchor(widget, NULL, value_str(v));
|
||||
}
|
||||
|
||||
return RET_NOT_FOUND;
|
||||
@ -360,7 +354,6 @@ static ret_t time_clock_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
if (time_clock_load_image(widget, time_clock->hour_image, &bitmap) == RET_OK &&
|
||||
time_clock_set_anchor_for_str(bitmap.w, time_clock->hour_anchor_x, &anchor_x) == RET_OK &&
|
||||
time_clock_set_anchor_for_str(bitmap.h, time_clock->hour_anchor_y, &anchor_y) == RET_OK) {
|
||||
|
||||
float_t dx = dst.w / 2 - anchor_x;
|
||||
float_t dy = dst.h / 2 - anchor_y;
|
||||
float_t hour = time_clock->hour + time_clock->minute / 60.0f;
|
||||
@ -372,8 +365,7 @@ static ret_t time_clock_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
|
||||
if (time_clock_load_image(widget, time_clock->minute_image, &bitmap) == RET_OK &&
|
||||
time_clock_set_anchor_for_str(bitmap.w, time_clock->minute_anchor_x, &anchor_x) == RET_OK &&
|
||||
time_clock_set_anchor_for_str(bitmap.h, time_clock->minute_anchor_y, &anchor_y) == RET_OK ) {
|
||||
|
||||
time_clock_set_anchor_for_str(bitmap.h, time_clock->minute_anchor_y, &anchor_y) == RET_OK) {
|
||||
float_t dx = dst.w / 2 - anchor_x;
|
||||
float_t dy = dst.h / 2 - anchor_y;
|
||||
float_t minute = time_clock->minute + time_clock->second / 60.0f;
|
||||
@ -386,7 +378,6 @@ static ret_t time_clock_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
if (time_clock_load_image(widget, time_clock->second_image, &bitmap) == RET_OK &&
|
||||
time_clock_set_anchor_for_str(bitmap.w, time_clock->second_anchor_x, &anchor_x) == RET_OK &&
|
||||
time_clock_set_anchor_for_str(bitmap.h, time_clock->second_anchor_y, &anchor_y) == RET_OK) {
|
||||
|
||||
float_t dx = dst.w / 2 - anchor_x;
|
||||
float_t dy = dst.h / 2 - anchor_y;
|
||||
|
||||
@ -403,11 +394,19 @@ static ret_t time_clock_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
}
|
||||
|
||||
static const char* s_time_clock_properties[] = {
|
||||
TIME_CLOCK_PROP_HOUR, TIME_CLOCK_PROP_MINUTE, TIME_CLOCK_PROP_SECOND,
|
||||
TIME_CLOCK_PROP_IMAGE, TIME_CLOCK_PROP_BG_IMAGE, TIME_CLOCK_PROP_HOUR_IMAGE,
|
||||
TIME_CLOCK_PROP_MINUTE_IMAGE, TIME_CLOCK_PROP_SECOND_IMAGE, TIME_CLOCK_PROP_HOUR_ANCHOR_X
|
||||
TIME_CLOCK_PROP_HOUR_ANCHOR_Y, TIME_CLOCK_PROP_MINUTE_ANCHOR_X, TIME_CLOCK_PROP_MINUTE_ANCHOR_Y
|
||||
TIME_CLOCK_PROP_SECOND_ANCHOR_X, TIME_CLOCK_PROP_SECOND_ANCHOR_Y, NULL};
|
||||
TIME_CLOCK_PROP_HOUR,
|
||||
TIME_CLOCK_PROP_MINUTE,
|
||||
TIME_CLOCK_PROP_SECOND,
|
||||
TIME_CLOCK_PROP_IMAGE,
|
||||
TIME_CLOCK_PROP_BG_IMAGE,
|
||||
TIME_CLOCK_PROP_HOUR_IMAGE,
|
||||
TIME_CLOCK_PROP_MINUTE_IMAGE,
|
||||
TIME_CLOCK_PROP_SECOND_IMAGE,
|
||||
TIME_CLOCK_PROP_HOUR_ANCHOR_X TIME_CLOCK_PROP_HOUR_ANCHOR_Y,
|
||||
TIME_CLOCK_PROP_MINUTE_ANCHOR_X,
|
||||
TIME_CLOCK_PROP_MINUTE_ANCHOR_Y TIME_CLOCK_PROP_SECOND_ANCHOR_X,
|
||||
TIME_CLOCK_PROP_SECOND_ANCHOR_Y,
|
||||
NULL};
|
||||
|
||||
TK_DECL_VTABLE(time_clock) = {.size = sizeof(time_clock_t),
|
||||
.type = WIDGET_TYPE_TIME_CLOCK,
|
||||
|
@ -114,7 +114,7 @@ typedef struct _time_clock_t {
|
||||
*/
|
||||
char* second_image;
|
||||
|
||||
/**
|
||||
/**
|
||||
* @property {float_t} anchor_x
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 时针图片旋转锚点x坐标。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
@ -128,7 +128,7 @@ typedef struct _time_clock_t {
|
||||
*/
|
||||
char* hour_anchor_y;
|
||||
|
||||
/**
|
||||
/**
|
||||
* @property {float_t} anchor_x
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 分针图片旋转锚点x坐标。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
@ -142,7 +142,7 @@ typedef struct _time_clock_t {
|
||||
*/
|
||||
char* minute_anchor_y;
|
||||
|
||||
/**
|
||||
/**
|
||||
* @property {float_t} anchor_x
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 秒针图片旋转锚点x坐标。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
@ -275,8 +275,10 @@ ret_t time_clock_set_image(widget_t* widget, const char* image);
|
||||
* 设置小时指针的旋转锚点。
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {const char*} anchor_x 指针的锚点坐标x。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_y 指针的锚点坐标y。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_x
|
||||
* 指针的锚点坐标x。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_y
|
||||
* 指针的锚点坐标y。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
@ -287,8 +289,10 @@ ret_t time_clock_set_hour_anchor(widget_t* widget, const char* anchor_x, const c
|
||||
* 设置分钟指针的旋转锚点。
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {const char*} anchor_x 指针的锚点坐标x。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_y 指针的锚点坐标y。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_x
|
||||
* 指针的锚点坐标x。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_y
|
||||
* 指针的锚点坐标y。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
@ -299,8 +303,10 @@ ret_t time_clock_set_minute_anchor(widget_t* widget, const char* anchor_x, const
|
||||
* 设置秒钟指针的旋转锚点。
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {const char*} anchor_x 指针的锚点坐标x。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_y 指针的锚点坐标y。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_x
|
||||
* 指针的锚点坐标x。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
* @param {const char*} anchor_y
|
||||
* 指针的锚点坐标y。(后面加上px为像素点,不加px为相对百分比坐标0.0f到1.0f)
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
@ -332,7 +338,6 @@ ret_t time_clock_set_second_anchor(widget_t* widget, const char* anchor_x, const
|
||||
/*public for subclass and runtime type check*/
|
||||
TK_EXTERN_VTABLE(time_clock);
|
||||
|
||||
|
||||
/*public for test*/
|
||||
ret_t time_clock_set_anchor_for_str(float_t max_size, const char* anchor, float_t* image_anchor);
|
||||
|
||||
|
@ -21,9 +21,25 @@
|
||||
|
||||
#include "tkc/mem.h"
|
||||
#include "tkc/utils.h"
|
||||
#include "widgets/progress_bar.h"
|
||||
#include "base/widget_vtable.h"
|
||||
#include "base/image_manager.h"
|
||||
#include "widgets/progress_bar.h"
|
||||
|
||||
static float_t progress_bar_get_progress(widget_t* widget) {
|
||||
progress_bar_t* progress_bar = PROGRESS_BAR(widget);
|
||||
return_value_if_fail(progress_bar != NULL, 0);
|
||||
float_t range = progress_bar->max > 0 ? progress_bar->max : 100;
|
||||
|
||||
range = tk_max(range, progress_bar->value);
|
||||
|
||||
return progress_bar->value / range;
|
||||
}
|
||||
|
||||
uint32_t progress_bar_get_percent(widget_t* widget) {
|
||||
float_t percent = progress_bar_get_progress(widget) * 100;
|
||||
|
||||
return tk_roundi(percent);
|
||||
}
|
||||
|
||||
static ret_t progress_bar_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
rect_t r;
|
||||
@ -32,16 +48,19 @@ static ret_t progress_bar_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
uint32_t radius = style_get_int(style, STYLE_ID_ROUND_RADIUS, 0);
|
||||
const char* bg_image = style_get_str(style, STYLE_ID_BG_IMAGE, NULL);
|
||||
image_draw_type_t draw_type = progress_bar->vertical ? IMAGE_DRAW_PATCH3_Y : IMAGE_DRAW_PATCH3_X;
|
||||
float_t progress = progress_bar_get_progress(widget);
|
||||
uint32_t progress_w = widget->w * progress;
|
||||
uint32_t progress_h = widget->h * progress;
|
||||
|
||||
if (progress_bar->vertical) {
|
||||
r.x = 0;
|
||||
r.y = 0;
|
||||
r.w = widget->w;
|
||||
r.h = widget->h - (widget->h * progress_bar->value) / 100;
|
||||
r.h = widget->h - progress_h;
|
||||
} else {
|
||||
r.y = 0;
|
||||
r.h = widget->h;
|
||||
r.w = widget->w - (widget->w * progress_bar->value) / 100;
|
||||
r.w = widget->w - progress_w;
|
||||
r.x = widget->w - r.w;
|
||||
}
|
||||
|
||||
@ -54,11 +73,11 @@ static ret_t progress_bar_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
if (progress_bar->vertical) {
|
||||
r.x = 0;
|
||||
r.w = widget->w;
|
||||
r.h = (widget->h * progress_bar->value) / 100;
|
||||
r.h = progress_h;
|
||||
r.y = widget->h - r.h;
|
||||
} else {
|
||||
r.h = widget->h;
|
||||
r.w = (widget->w * progress_bar->value) / 100;
|
||||
r.w = progress_w;
|
||||
r.y = 0;
|
||||
r.x = 0;
|
||||
}
|
||||
@ -74,9 +93,9 @@ static ret_t progress_bar_on_paint_self(widget_t* widget, canvas_t* c) {
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
ret_t progress_bar_set_value(widget_t* widget, uint8_t value) {
|
||||
ret_t progress_bar_set_value(widget_t* widget, float_t value) {
|
||||
progress_bar_t* progress_bar = PROGRESS_BAR(widget);
|
||||
return_value_if_fail(progress_bar != NULL && value <= 100, RET_BAD_PARAMS);
|
||||
return_value_if_fail(progress_bar != NULL, RET_BAD_PARAMS);
|
||||
|
||||
if (progress_bar->value != value) {
|
||||
char str[TK_NUM_MAX_LEN + 1];
|
||||
@ -88,7 +107,7 @@ ret_t progress_bar_set_value(widget_t* widget, uint8_t value) {
|
||||
widget_dispatch(widget, &e);
|
||||
widget_invalidate(widget, NULL);
|
||||
|
||||
tk_snprintf(str, TK_NUM_MAX_LEN, "%d%%", progress_bar->value);
|
||||
tk_snprintf(str, TK_NUM_MAX_LEN, "%d%%", progress_bar_get_percent(widget));
|
||||
widget_set_text_utf8(widget, str);
|
||||
}
|
||||
|
||||
@ -120,6 +139,9 @@ static ret_t progress_bar_get_prop(widget_t* widget, const char* name, value_t*
|
||||
if (tk_str_eq(name, WIDGET_PROP_VALUE)) {
|
||||
value_set_uint8(v, progress_bar->value);
|
||||
return RET_OK;
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_MAX)) {
|
||||
value_set_uint32(v, progress_bar->max);
|
||||
return RET_OK;
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_VERTICAL)) {
|
||||
value_set_bool(v, progress_bar->vertical);
|
||||
return RET_OK;
|
||||
@ -136,6 +158,8 @@ static ret_t progress_bar_set_prop(widget_t* widget, const char* name, const val
|
||||
|
||||
if (tk_str_eq(name, WIDGET_PROP_VALUE)) {
|
||||
return progress_bar_set_value(widget, value_int(v));
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_MAX)) {
|
||||
return progress_bar_set_max(widget, value_float(v));
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_VERTICAL)) {
|
||||
return progress_bar_set_vertical(widget, value_bool(v));
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_SHOW_TEXT)) {
|
||||
@ -145,8 +169,8 @@ static ret_t progress_bar_set_prop(widget_t* widget, const char* name, const val
|
||||
return RET_NOT_FOUND;
|
||||
}
|
||||
|
||||
static const char* s_progress_bar_clone_properties[] = {WIDGET_PROP_VALUE, WIDGET_PROP_VERTICAL,
|
||||
WIDGET_PROP_SHOW_TEXT, NULL};
|
||||
static const char* s_progress_bar_clone_properties[] = {
|
||||
WIDGET_PROP_VALUE, WIDGET_PROP_MAX, WIDGET_PROP_VERTICAL, WIDGET_PROP_SHOW_TEXT, NULL};
|
||||
TK_DECL_VTABLE(progress_bar) = {.size = sizeof(progress_bar_t),
|
||||
.type = WIDGET_TYPE_PROGRESS_BAR,
|
||||
.clone_properties = s_progress_bar_clone_properties,
|
||||
@ -162,6 +186,7 @@ widget_t* progress_bar_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h)
|
||||
progress_bar_t* progress_bar = PROGRESS_BAR(widget);
|
||||
return_value_if_fail(progress_bar != NULL, NULL);
|
||||
|
||||
progress_bar->max = 100;
|
||||
progress_bar->value = 0;
|
||||
progress_bar->vertical = FALSE;
|
||||
progress_bar->show_text = FALSE;
|
||||
@ -174,3 +199,12 @@ widget_t* progress_bar_cast(widget_t* widget) {
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
||||
ret_t progress_bar_set_max(widget_t* widget, float_t max) {
|
||||
progress_bar_t* progress_bar = PROGRESS_BAR(widget);
|
||||
return_value_if_fail(progress_bar != NULL, RET_BAD_PARAMS);
|
||||
|
||||
progress_bar->max = max;
|
||||
|
||||
return widget_invalidate(widget, NULL);
|
||||
}
|
||||
|
@ -71,11 +71,17 @@ BEGIN_C_DECLS
|
||||
typedef struct _progress_bar_t {
|
||||
widget_t widget;
|
||||
/**
|
||||
* @property {uint8_t} value
|
||||
* @property {float_t} value
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 进度条的值[0-100]。
|
||||
*/
|
||||
uint8_t value;
|
||||
float_t value;
|
||||
/**
|
||||
* @property {float_t} max
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 最大值(缺省为100)。
|
||||
*/
|
||||
float_t max;
|
||||
/**
|
||||
* @property {bool_t} vertical
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
@ -129,11 +135,23 @@ widget_t* progress_bar_cast(widget_t* widget);
|
||||
* 设置进度条的进度。
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {uint8_t} value 进度
|
||||
* @param {float_t} value 进度
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t progress_bar_set_value(widget_t* widget, uint8_t value);
|
||||
ret_t progress_bar_set_value(widget_t* widget, float_t value);
|
||||
|
||||
/**
|
||||
* @method progress_bar_set_max
|
||||
* 设置最大值。
|
||||
*
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
* @param {uint32_t} max 最大值。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t progress_bar_set_max(widget_t* widget, float_t max);
|
||||
|
||||
/**
|
||||
* @method progress_bar_set_vertical
|
||||
@ -157,6 +175,18 @@ ret_t progress_bar_set_vertical(widget_t* widget, bool_t vertical);
|
||||
*/
|
||||
ret_t progress_bar_set_show_text(widget_t* widget, bool_t show_text);
|
||||
|
||||
/**
|
||||
* @method progress_bar_get_percent
|
||||
* 获取进度百分比。
|
||||
*
|
||||
* > 当max为100时,percent和value取整后一致。
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget 控件对象。
|
||||
*
|
||||
* @return {uint32_t} 返回百分比。
|
||||
*/
|
||||
uint32_t progress_bar_get_percent(widget_t* widget);
|
||||
|
||||
#define PROGRESS_BAR(widget) ((progress_bar_t*)(progress_bar_cast(WIDGET(widget))))
|
||||
|
||||
/*public for subclass and runtime type check*/
|
||||
|
@ -19,6 +19,24 @@ TEST(progress_bar, basic) {
|
||||
widget_destroy(s);
|
||||
}
|
||||
|
||||
TEST(progress_bar, max) {
|
||||
value_t v1;
|
||||
value_t v2;
|
||||
widget_t* s = progress_bar_create(NULL, 10, 20, 30, 40);
|
||||
|
||||
ASSERT_EQ(widget_get_prop_int(s, WIDGET_PROP_MAX, 0), 100);
|
||||
|
||||
value_set_int(&v1, 1000);
|
||||
ASSERT_EQ(widget_set_prop(s, WIDGET_PROP_MAX, &v1), RET_OK);
|
||||
ASSERT_EQ(widget_get_prop(s, WIDGET_PROP_MAX, &v2), RET_OK);
|
||||
ASSERT_EQ(value_int(&v1), value_int(&v2));
|
||||
|
||||
ASSERT_EQ(progress_bar_set_value(s, 500), RET_OK);
|
||||
ASSERT_EQ(progress_bar_get_percent(s), 50);
|
||||
|
||||
widget_destroy(s);
|
||||
}
|
||||
|
||||
#include "log_change_events.inc"
|
||||
|
||||
TEST(ProgressBar, event) {
|
||||
|
@ -96,7 +96,6 @@ TEST(TimeClock, basic) {
|
||||
ASSERT_EQ(string(value_str(&v1)), string(value_str(&v2)));
|
||||
ASSERT_EQ(string(value_str(&v1)), string(t->second_anchor_y));
|
||||
|
||||
|
||||
widget_destroy(w);
|
||||
}
|
||||
|
||||
@ -138,5 +137,4 @@ TEST(TimeClock, set_anchor_for_str) {
|
||||
|
||||
ASSERT_EQ(time_clock_set_anchor_for_str(100.0f, "20", &image_anchor), RET_BAD_PARAMS);
|
||||
ASSERT_EQ(image_anchor, 0.0f);
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user