linuxOS_D21X/source/artinchip/awtk-ui/awtk/src/widgets/slider.h

303 lines
8.5 KiB
C
Raw Normal View History

2024-11-29 08:23:11 +00:00
/**
* File: slider.h
* Author: AWTK Develop Team
* Brief: slider
*
* Copyright (c) 2018 - 2023 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2018-04-02 Li XianJing <xianjimli@hotmail.com> created
*
*/
#ifndef TK_SLIDER_H
#define TK_SLIDER_H
#include "base/widget.h"
BEGIN_C_DECLS
/**
* @class slider_t
* @parent widget_t
* @annotation ["scriptable","design","widget"]
*
*
* slider\_t是[widget\_t](widget_t.md)widget\_t的函数均适用于slider\_t控件
*
* xml中使用"slider"
*
* ```xml
* <slider x="center" y="10" w="80%" h="20" value="10"/>
* <slider style="img" x="center" y="50" w="80%" h="30" value="20" />
* <slider style="img" x="center" y="90" w="80%" h="30" value="30" min="5" max="50" step="5"/>
* ```
*
* >
* [basic](https://github.com/zlgopen/awtk/blob/master/design/default/ui/basic.xml)
*
* c代码中使用函数slider\_create创建滑块控件
*
* ```c
* widget_t* slider = slider_create(win, 10, 10, 200, 30);
* widget_on(slider, EVT_VALUE_CHANGED, on_changed, NULL);
* widget_on(slider, EVT_VALUE_CHANGING, on_changing, NULL);
* ```
*
* >
* [slider demo](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/slider.c)
*
* style来设置控件的显示风格
*
* ```xml
* <style name="img" bg_image="slider_bg" fg_image="slider_fg">
* <normal icon="slider_drag"/>
* <pressed icon="slider_drag_p"/>
* <over icon="slider_drag_o"/>
* </style>
* ```
*
* >
* [theme
* default](https://github.com/zlgopen/awtk/blob/master/design/default/styles/default.xml#L179)
*
*/
typedef struct _slider_t {
widget_t widget;
/**
* @property {double} value
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*/
double value;
/**
* @property {double} min
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*/
double min;
/**
* @property {double} max
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*/
double max;
/**
* @property {double} step
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*/
double step;
/**
* @property {uint32_t} bar_size
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* 00
*/
uint32_t bar_size;
/**
* @property {uint32_t} dragger_size
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* bar_size * 1.5
*/
uint32_t dragger_size;
/**
* @property {char*} line_cap
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* 线butt|round, 使 "round"
*/
char* line_cap;
/**
* @property {bool_t} vertical
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*/
bool_t vertical;
/**
* @property {bool_t} dragger_adapt_to_icon
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* icon适应true
*/
bool_t dragger_adapt_to_icon;
/**
* @property {bool_t} slide_with_bar
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* FALSE
*/
bool_t slide_with_bar;
/*private*/
bool_t pressed;
bool_t dragging;
bool_t no_dragger_icon;
bool_t auto_get_dragger_size;
double saved_value;
point_t down;
rect_t dragger_rect;
} slider_t;
/**
* @event {value_change_event_t} EVT_VALUE_WILL_CHANGE
*
*/
/**
* @event {value_change_event_t} EVT_VALUE_CHANGING
* ()
*/
/**
* @event {value_change_event_t} EVT_VALUE_CHANGED
*
*/
/**
* @method slider_create
* slider对象
* @annotation ["constructor", "scriptable"]
* @param {widget_t*} parent
* @param {xy_t} x x坐标
* @param {xy_t} y y坐标
* @param {wh_t} w
* @param {wh_t} h
*
* @return {widget_t*}
*/
widget_t* slider_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
/**
* @method slider_cast
* slider对象(使)
* @annotation ["cast", "scriptable"]
* @param {widget_t*} widget slider对象
*
* @return {widget_t*} slider对象
*/
widget_t* slider_cast(widget_t* widget);
/**
* @method slider_set_value
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {double} value
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_value(widget_t* widget, double value);
/**
* @method slider_set_min
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {double} min
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_min(widget_t* widget, double min);
/**
* @method slider_set_max
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {double} max
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_max(widget_t* widget, double max);
/**
* @method slider_set_line_cap
* 线使 "round"
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {const char*} line_cap 线butt|round
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_line_cap(widget_t* widget, const char* line_cap);
/**
* @method slider_set_step
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {double} step
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_step(widget_t* widget, double step);
/**
* @method slider_set_bar_size
* bar的宽度或高度
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {uint32_t} bar_size bar的宽度或高度
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_bar_size(widget_t* widget, uint32_t bar_size);
/**
* @method slider_set_vertical
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {bool_t} vertical
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_vertical(widget_t* widget, bool_t vertical);
#define SLIDER_PROP_DRAGGER_SIZE "dragger_size"
#define SLIDER_PROP_DRAGGER_ADAPT_TO_ICON "dragger_adapt_to_icon"
#define SLIDER_PROP_SLIDE_WITH_BAR "slide_with_bar"
#define SLIDER_PROP_SLIDE_LINE_CAP "line_cap"
#define SLIDER(widget) ((slider_t*)(slider_cast(WIDGET(widget))))
/*public for subclass and runtime type check*/
TK_EXTERN_VTABLE(slider);
/*public for test*/
ret_t slider_dec(widget_t* widget);
ret_t slider_inc(widget_t* widget);
/**
* @method slider_set_value_internal
* (public for test)
*
* @param {widget_t*} widget
* @param {double} value
* @param {event_type_t} etype
* @param {bool_t} force
*
* @return {ret_t} RET_OK表示成功
*/
ret_t slider_set_value_internal(widget_t* widget, double value, event_type_t etype, bool_t force);
END_C_DECLS
#endif /*TK_SLIDER_H*/