mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
scroll bar mobile support auto scroll
This commit is contained in:
parent
3a51a17749
commit
319b391b4a
1
.gitignore
vendored
1
.gitignore
vendored
@ -35,3 +35,4 @@ dllexports/awtk.def
|
||||
dllexports/tkc.def
|
||||
tools/idl_gen/idl.json
|
||||
tools/idl_gen/tkc.json
|
||||
t.*
|
||||
|
@ -1,5 +1,7 @@
|
||||
# 最新动态
|
||||
|
||||
2021/06/04
|
||||
* scroll bar mobile支持auto\_hide属性。
|
||||
2021/06/03
|
||||
* 完善 scroll bar。
|
||||
* 完善 menu layout。
|
||||
|
@ -737,6 +737,12 @@ BEGIN_C_DECLS
|
||||
*/
|
||||
#define WIDGET_PROP_ANIMATABLE "animatable"
|
||||
|
||||
/**
|
||||
* @const WIDGET_PROP_AUTO_HIDE
|
||||
* 是否自动隐藏。
|
||||
*/
|
||||
#define WIDGET_PROP_AUTO_HIDE "auto_hide"
|
||||
|
||||
/**
|
||||
* @const WIDGET_PROP_AUTO_HIDE_SCROLL_BAR
|
||||
* 是否自动隐藏滚动条。
|
||||
|
@ -359,7 +359,10 @@ static ret_t children_layouter_list_view_for_list_view_set_scroll_bar_info(widge
|
||||
if (widget->h > virtual_h) {
|
||||
scroll_bar_set_params(widget, widget->h, item_height);
|
||||
}
|
||||
widget_set_visible_only(widget, FALSE);
|
||||
|
||||
if (SCROLL_BAR(widget)->auto_hide) {
|
||||
widget_set_visible_only(widget, FALSE);
|
||||
}
|
||||
} else {
|
||||
if (scroll_view->h >= virtual_h) {
|
||||
scroll_bar_set_value(widget, 0);
|
||||
|
@ -477,6 +477,9 @@ static ret_t scroll_bar_get_prop(widget_t* widget, const char* name, value_t* v)
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_VALUE)) {
|
||||
value_set_int(v, scroll_bar->value);
|
||||
return RET_OK;
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_AUTO_HIDE)) {
|
||||
value_set_bool(v, scroll_bar->auto_hide);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
return RET_NOT_FOUND;
|
||||
@ -499,6 +502,9 @@ static ret_t scroll_bar_set_prop(widget_t* widget, const char* name, const value
|
||||
scroll_bar_set_value(widget, value_int(v));
|
||||
scroll_bar_update_dragger(widget);
|
||||
return RET_OK;
|
||||
} else if (tk_str_eq(name, WIDGET_PROP_AUTO_HIDE)) {
|
||||
scroll_bar_set_auto_hide(widget, value_bool(v));
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
return RET_NOT_FOUND;
|
||||
@ -661,6 +667,8 @@ static widget_t* scroll_bar_create_internal(widget_t* parent, xy_t x, xy_t y, wh
|
||||
return_value_if_fail(scroll_bar != NULL, NULL);
|
||||
|
||||
scroll_bar->animatable = TRUE;
|
||||
scroll_bar->auto_hide = scroll_bar_is_mobile(widget);
|
||||
|
||||
widget_set_state(widget, WIDGET_STATE_NORMAL);
|
||||
|
||||
return widget;
|
||||
@ -703,6 +711,10 @@ ret_t scroll_bar_hide_by_opacity_animation(widget_t* widget, int32_t duration, i
|
||||
scroll_bar_t* scroll_bar = SCROLL_BAR(widget);
|
||||
return_value_if_fail(scroll_bar != NULL, RET_BAD_PARAMS);
|
||||
|
||||
if (!scroll_bar->auto_hide) {
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
#ifndef WITHOUT_WIDGET_ANIMATORS
|
||||
if (scroll_bar->wa_opactiy != NULL) {
|
||||
widget_animator_destroy(scroll_bar->wa_opactiy);
|
||||
@ -735,5 +747,19 @@ ret_t scroll_bar_show_by_opacity_animation(widget_t* widget, int32_t duration, i
|
||||
scroll_bar);
|
||||
widget_animator_opacity_set_params(scroll_bar->wa_opactiy, widget->opacity, 0xff);
|
||||
widget_animator_start(scroll_bar->wa_opactiy);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
ret_t scroll_bar_set_auto_hide(widget_t* widget, bool_t auto_hide) {
|
||||
scroll_bar_t* scroll_bar = SCROLL_BAR(widget);
|
||||
return_value_if_fail(scroll_bar != NULL, RET_BAD_PARAMS);
|
||||
assert(scroll_bar_is_mobile(widget));
|
||||
|
||||
scroll_bar->auto_hide = auto_hide;
|
||||
if (!auto_hide) {
|
||||
widget_set_visible(widget, TRUE);
|
||||
}
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
@ -95,6 +95,12 @@ typedef struct _scroll_bar_t {
|
||||
* 滚动时是否启用动画。
|
||||
*/
|
||||
bool_t animatable;
|
||||
/**
|
||||
* @property {bool_t} auto_hide
|
||||
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
|
||||
* 是否自动隐藏(仅对mobile风格的滚动条有效)。
|
||||
*/
|
||||
bool_t auto_hide;
|
||||
|
||||
/*private*/
|
||||
widget_t* dragger;
|
||||
@ -235,6 +241,20 @@ ret_t scroll_bar_scroll_delta(widget_t* widget, int32_t delta);
|
||||
*/
|
||||
ret_t scroll_bar_set_value_only(widget_t* widget, int32_t value);
|
||||
|
||||
/**
|
||||
* @method scroll_bar_set_auto_hide
|
||||
* 设置auto_hide属性。
|
||||
*
|
||||
*>仅对mobile风格的滚动条有效
|
||||
*
|
||||
* @annotation ["scriptable"]
|
||||
* @param {widget_t*} widget scroll_bar控件。
|
||||
* @param {bool_t} auto_hide 值。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t scroll_bar_set_auto_hide(widget_t* widget, bool_t auto_hide);
|
||||
|
||||
/**
|
||||
* @method scroll_bar_is_mobile
|
||||
* 判断是否是mobile风格的滚动条。
|
||||
|
@ -64,3 +64,17 @@ TEST(ScrollBar, cast) {
|
||||
|
||||
widget_destroy(w);
|
||||
}
|
||||
|
||||
TEST(ScrollBar, auto_hide) {
|
||||
widget_t* w = scroll_bar_create_mobile(NULL, 10, 20, 30, 40);
|
||||
|
||||
ASSERT_EQ(SCROLL_BAR(w)->auto_hide, TRUE);
|
||||
scroll_bar_set_auto_hide(w, FALSE);
|
||||
ASSERT_EQ(SCROLL_BAR(w)->auto_hide, FALSE);
|
||||
|
||||
ASSERT_EQ(widget_set_prop_bool(w, WIDGET_PROP_AUTO_HIDE, TRUE), RET_OK);
|
||||
ASSERT_EQ(SCROLL_BAR(w)->auto_hide, TRUE);
|
||||
ASSERT_EQ(widget_get_prop_bool(w, WIDGET_PROP_AUTO_HIDE, FALSE), TRUE);
|
||||
|
||||
widget_destroy(w);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user