对象控件


对象控件实现了屏幕上控件的基本属性。屏幕控件是控件树的根节点。极坐标的原点在 Y 轴的负方向,极坐标的正方向为顺时针方向,屏幕坐标系设置如下所示。

用法

描述

API

构建控件

gui_obj_ctor(gui_obj_t *this, gui_obj_t *parent, const char *name, int16_t x, int16_t y, int16_t w, int16_t h)

创建控件

gui_obj_create(void *parent, const char *name, int16_t x, int16_t y, int16_t w, int16_t h)

添加事件

gui_obj_add_event_cb(void *obj, gui_event_cb_t event_cb, gui_event_t filter, void *user_data)

设置事件

gui_obj_event_set(gui_obj_t *obj, gui_event_t event_code)

释放树(从根节点到叶节点,递归地释放控件树)

gui_obj_tree_free(void *obj)

打印树(从根节点到叶节点,递归地打印控件树)

gui_obj_tree_print(gui_obj_t *obj)

获取树中某种类型小部件的数量

gui_obj_tree_count_by_type(gui_obj_t *obj, T_OBJ_TYPE type, int *count)

隐藏/显示

gui_obj_tree_show(gui_obj_t *obj)gui_tree_not_show(gui_obj_t *obj, bool enable)

能否显示

gui_obj_show(void *obj, bool show_info)

获取根节点

gui_obj_t *gui_obj_tree_get_root(gui_obj_t *obj)

获取子节点

gui_obj_get_child_handle(gui_obj_t *obj, T_OBJ_TYPE child_type)

判断是否在矩形范围内

gui_obj_in_rect(gui_obj_t *obj, int16_t x,int16_t y,int16_t w,int16_t h)

跳过父对象控件的所有操作(左/右/下/上拖动保持动作)

gui_obj_skip_all_parent_left_hold(gui_obj_t *obj),
gui_obj_skip_all_parent_right_hold(gui_obj_t *obj),
gui_obj_skip_all_parent_down_hold(gui_obj_t *obj),
gui_obj_skip_all_parent_up_hold(gui_obj_t *obj)

跳过子对象控件的所有操作(左/右/下/上拖动保持动作)

gui_obj_skip_all_child_left_hold(gui_obj_t *obj),
gui_obj_skip_all_child_right_hold(gui_obj_t *obj),
gui_obj_skip_all_child_down_hold(gui_obj_t *obj),
gui_obj_skip_all_child_up_hold(gui_obj_t *obj)

跳过其他对象控件的所有操作(左/右/下/上拖动保持动作)

gui_obj_skip_other_left_hold(gui_obj_t *obj),
gui_obj_skip_other_right_hold(gui_obj_t *obj),
gui_obj_skip_other_down_hold(gui_obj_t *obj),
gui_obj_skip_other_up_hold(gui_obj_t *obj)

获取显示区域

gui_obj_get_area(gui_obj_t *obj, int16_t *x, int16_t *y, int16_t *w, int16_t *h)

矩形范围内的点检测

gui_obj_point_in_obj_rect(gui_obj_t *obj, int16_t x, int16_t y)

CRC校验

gui_obj_checksum(uint8_t seed, uint8_t *data, uint8_t len)

通过名称在树中获取小部件

gui_obj_tree_get_widget_by_name(gui_obj_t *obj, const char *name, gui_obj_t **output)

通过类型在树中获取小部件

gui_obj_tree_get_widget_by_type(gui_obj_t *root, T_OBJ_TYPE type, gui_obj_t **output)

刷新动画效果

animate_frame_update(gui_animate_t *animate, gui_obj_t *obj)

设定动画效果

gui_obj_set_animate(gui_animate_t *animate, uint32_t dur, int repeat_count, void *callback,void *p)

以广度优先搜索的方式打印树

gui_obj_tree_print_bfs(gui_obj_t *root)


API

Enums

enum T_OBJ_TYPE

Values:

enumerator SCREEN
enumerator WINDOW
enumerator TABVIEW
enumerator TAB
enumerator CURTAINVIEW
enumerator CURTAIN
enumerator IMAGE
enumerator BUTTON
enumerator ICONLIST
enumerator ICON
enumerator IMAGE_FROM_MEM
enumerator TEXTBOX
enumerator SCROLLTEXTBOX
enumerator SEEKBAR
enumerator PROGRESSBAR
enumerator CLICKSWITCH
enumerator PAGE
enumerator SCROLL_WHEEL
enumerator PAGEBAR
enumerator RETURNWIDGET
enumerator RECTANGLE
enumerator WINDOWWITHBORDER
enumerator CANVAS
enumerator VG_LITE_CLOCK
enumerator VG_LITE_CUBE
enumerator GRID
enumerator RADIO
enumerator RADIOSWITCH
enumerator ARC
enumerator JAVASCRIPT
enumerator MOVIE
enumerator IMAGE_SCOPE
enumerator CARDVIEW
enumerator CARD
enumerator PAGELIST
enumerator PAGELISTVIEW
enumerator MACRO_ANIMATETRANSFORM
enumerator HONEYCOMB_LIST
enumerator WHEEL_LIST
enumerator QRCODE
enumerator GALLERY
enumerator TURN_TABLE
enumerator KEYBOARD
enumerator MACRO_MOTORIZED_CURTAIN
enumerator MULTI_LEVEL
enumerator U8G2
enumerator MACRO_ONCLICK
enumerator MACRO_BACKICON
enumerator CANVAS_IMG
enum T_OBJ_CB_TYPE

Values:

enumerator OBJ_INPUT_PREPARE
enumerator OBJ_PREPARE
enumerator OBJ_DRAW
enumerator OBJ_END
enumerator OBJ_DESTORY

Functions

void gui_obj_ctor(gui_obj_t *this_widget, gui_obj_t *parent, const char *name, int16_t x, int16_t y, int16_t w, int16_t h)
参数:
  • this_widget

  • parent – switching events

  • filename – how to trigger events

  • x – left

  • y – top

  • w – width

  • h – height

返回:

void Example usage

static void app_main_task(void *parent, const char *name, int16_t x,
                           int16_t y, int16_t w, int16_t h)
{
   gui_obj_t *base = (gui_obj_t *)this_widget;
   gui_obj_ctor(base, parent, name, x, y, w, h);

}

gui_obj_t *gui_obj_create(void *parent, const char *name, int16_t x, int16_t y, int16_t w, int16_t h)
参数:
  • parent

  • filename

  • x

  • y

  • w

  • h

返回:

gui_obj_t*

void gui_obj_add_event_cb(void *obj, gui_event_cb_t event_cb, gui_event_t filter, void *user_data)

create event widget

参数:
  • obj

  • event_cb – switching events

  • filter – how to trigger events

  • user_data

返回:

void Example usage

static void app_main_task(void *parent)
{
   gui_win_t *clock = gui_win_create(parent, "clock", 0, 84, 320, 300);
   gui_obj_add_event_cb(clock, (gui_event_cb_t)show_clock, GUI_EVENT_TOUCH_CLICKED, NULL);

}

void gui_obj_event_set(gui_obj_t *obj, gui_event_t event_code)

this_widget API only for Widget, not for Application

参数:
  • obj

  • event_code

返回:

void Example usage

static void app_main_task(gui_obj_t *obj)
{
   gui_obj_event_set(obj, GUI_EVENT_TOUCH_CLICKED);

}

void gui_obj_tree_free(void *obj)

free the widget tree recursively,from the root to the leaves.Preorder traversal.

参数:
  • obj – the root of the widget tree.

返回:

void Example usage

static void app_main_task(gui_app_t *app)
{
   gui_obj_tree_free(&app->screen);

}

void gui_obj_tree_print(gui_obj_t *obj)

print the widget tree recursively,from the root to the leaves.Preorder traversal.

参数:
  • obj – the root of the widget tree.

返回:

void Example usage

static void app_main_task(gui_app_t *app)
{
   gui_obj_tree_print(&app->screen);

}

void gui_obj_tree_count_by_type(gui_obj_t *obj, T_OBJ_TYPE type, int *count)

get count of one type on tree

参数:
  • obj – the root of the widget tree.

  • type – widget type.

  • count – count result.

返回:

void

void gui_obj_tree_show(gui_obj_t *obj, bool enable)

show or hide the widget

参数:
  • obj – the root of the widget tree.

  • enable – true for show, false for hide.

返回:

void

void gui_obj_show(void *obj, bool enable)

object show or not

参数:
  • obj

  • enable

返回:

void

  • Example usage

    static void app_main_task(gui_app_t *app)
    {
        gui_img_t *hour;
        gui_obj_show(hour,false);
        gui_obj_show(hour,true);
    
    }
    

gui_obj_t *gui_obj_tree_get_root(gui_obj_t *obj)

show the root of this_widget tree

参数:
  • obj – the root of the widget tree.

返回:

gui_obj_t*

gui_obj_t *gui_obj_get_child_handle(gui_obj_t *obj, T_OBJ_TYPE child_type)

get child type

参数:
  • obj – the root of the widget tree.

  • child_type

返回:

gui_obj_t*

bool gui_obj_in_rect(gui_obj_t *obj, int16_t x, int16_t y, int16_t w, int16_t h)

judge the obj if in range of this_widget rect

参数:
  • obj

  • x

  • y

  • w

  • h

返回:

true

返回:

false

void gui_obj_skip_all_parent_left_hold(gui_obj_t *obj)

skip all left slide hold actions of the parent object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_child_left_hold(gui_obj_t *obj)

skip all left slide hold actions of the child object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_other_left_hold(gui_obj_t *obj)

skip all left slide hold actions of the other object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_parent_right_hold(gui_obj_t *obj)

skip all right slide hold actions of the parent object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_child_right_hold(gui_obj_t *obj)

skip all right slide hold actions of the child object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_other_right_hold(gui_obj_t *obj)

skip all right slide hold actions of the other object

参数:
  • obj

void gui_obj_skip_all_parent_down_hold(gui_obj_t *obj)

skip all down slide hold actions of the parent object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_child_down_hold(gui_obj_t *obj)

skip all down slide hold actions of the child object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_other_down_hold(gui_obj_t *obj)

skip all down slide hold actions of the other object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_parent_up_hold(gui_obj_t *obj)

skip all up slide hold actions of the parent object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_child_up_hold(gui_obj_t *obj)

skip all up slide hold actions of the child object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_other_up_hold(gui_obj_t *obj)

skip all up slide hold actions of the other object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_all_child_short(gui_obj_t *obj)

skip all short click actions of the child object

参数:
  • obj – the root of the widget tree.

void gui_obj_skip_other_short(gui_obj_t *obj)

skip all short click actions of the other object

参数:
  • obj – the root of the widget tree.

void gui_obj_get_area(gui_obj_t *obj, int16_t *x, int16_t *y, int16_t *w, int16_t *h)

get the area of this_widget obj

参数:
  • obj

  • x

  • y

  • w

  • h

bool gui_obj_point_in_obj_rect(gui_obj_t *obj, int16_t x, int16_t y)

judge the point if in range of this_widget obj rect

参数:
  • obj

  • x

  • y

返回:

true

返回:

false

uint8_t gui_obj_checksum(uint8_t seed, uint8_t *data, uint8_t len)
参数:
  • seed

  • data

  • len

返回:

uint8_t

void gui_obj_tree_get_widget_by_name(gui_obj_t *obj, const char *name, gui_obj_t **output)

get widget in tree by name

参数:
  • obj – tree

  • name – widget name

  • output – widget

返回:

uint8_t

void gui_obj_tree_get_widget_by_type(gui_obj_t *root, T_OBJ_TYPE type, gui_obj_t **output)

get widget in tree by type

参数:
  • obj – tree

  • type – widget type

  • output – widget

返回:

uint8_t

void animate_frame_update(gui_animate_t *animate, gui_obj_t *obj)

update animate on every frame

参数:
  • animate

  • obj – widget

gui_animate_t *gui_obj_set_animate(gui_animate_t *animate, uint32_t dur, int repeat_count, void *callback, void *p)

set animate

参数:
  • animate – pointer

  • dur – animation time cost in ms

  • repeat_count – rounds to repeat

  • callback – every frame callback

  • p – callback’s parameter

void gui_obj_tree_print_bfs(gui_obj_t *root)

print name by bfs order

参数:
  • root

gui_obj_t *gui_get_root(gui_obj_t *object)

print name by bfs order

参数:
  • object – widget pointer

返回:

gui_obj_t * root

struct gui_obj_t
#include <gui_obj.h>

Public Members

const char *name
struct _gui_obj_t *parent
int16_t x
int16_t y
int16_t w
int16_t h
gui_list_t child_list
gui_list_t brother_list
void (*obj_cb)(struct _gui_obj_t *obj, T_OBJ_CB_TYPE cb_type)
T_OBJ_TYPE type
uint32_t active
uint32_t not_show
uint32_t skip_tp_left_hold
uint32_t skip_tp_right_hold
uint32_t skip_tp_up_hold
uint32_t skip_tp_down_hold
uint32_t skip_tp_short
uint32_t create_done
uint32_t flag_3d
uint32_t gesture
uint32_t event_dsc_cnt
uint32_t opacity_value
uint32_t has_input_prepare_cb
uint32_t has_prepare_cb
uint32_t has_draw_cb
uint32_t has_end_cb
uint32_t has_destroy_cb
gui_event_dsc_t *event_dsc
gui_matrix_t *matrix