上一篇我們說明了 RTGUI 是如何透過 C 實現物件導向的設計邏輯,這篇將會說明在 RTGUI 中的最小物件 “widget” 是如何創建、運行及刪除的。
結構#
File: widget.h
86 | /* |
記錄包含他的 widget、所在的 window、一些屬性等
四方形結構體#
File: rtgui.h
79 | /** |
對角線 (x1,y1)、(x2,y2)
定義物件類型#
File: widget.c
93 | DEFINE_CLASS_TYPE(widget, "widget", |
建立 widget#
功能 | 回傳值 | *widget_type |
---|---|---|
建立 widget | widget 指標 | 欲建立的 widget 種類 |
100 | rtgui_widget_t *rtgui_widget_create(const rtgui_type_t *widget_type) |
呼叫 rtgui_object_create
,型態為 widget 完成,並透過 RTGUI_WIDGET
檢查正確性
刪除 widget#
功能 | 回傳值 | *widget |
---|---|---|
刪除 widget | void | 欲刪除的 widget |
110 | void rtgui_widget_destroy(rtgui_widget_t *widget) |
一樣透過 rtgui_object_destroy
來完成
設定 widget#
RTT GUI 提供一些 API 給使用者去設定 widget 的樣式與行為
大小#
功能 | 回傳值 |
---|---|
設定 widget 的大小 | void |
*widget |
x |
y |
width |
height |
---|---|---|---|---|
欲設定的 widget | 起始座標 x | y | 寬度 | 高度 |
168 | void rtgui_widget_set_rectangle(rtgui_widget_t *widget, int x, int y, int width, int height) |
填入正確的 (x1,y1)、(x2,y2)
Parent#
功能 | 回傳值 |
---|---|
設定 widget 的上層元素 | void |
*widget |
parent |
---|---|
欲設定的 widget | 上層元素 (widget) |
181 | void rtgui_widget_set_parent(rtgui_widget_t *widget, rtgui_widget_t *parent) |
大小下界#
功能 | 回傳值 |
---|---|
設定 widget 的大小下界 | void |
*widget |
width |
height |
---|---|---|
欲設定的 widget | 寬度 | 高度 |
197 | void rtgui_widget_set_minsize(rtgui_widget_t *widget, int width, int height) |
寬度下界#
功能 | 回傳值 |
---|---|
設定 widget 的寬度下界 | void |
*widget |
width |
---|---|
欲設定的 widget | 寬度 |
205 | void rtgui_widget_set_minwidth(rtgui_widget_t *widget, int width) |
高度下界#
功能 | 回傳值 |
---|---|
設定 widget 的高度下界 | void |
*widget |
height |
---|---|
欲設定的 widget | 高度 |
213 | void rtgui_widget_set_minheight(rtgui_widget_t *widget, int height) |
邊框風格#
功能 | 回傳值 |
---|---|
設定 widget 的邊框風格 | void |
*widget |
style |
---|---|
欲設定的 widget | 風格 |
302 | /** |
Focus 函式#
功能 | 回傳值 |
---|---|
設定 widget 的 focus func | void |
*widget |
handler |
---|---|
欲設定的 widget | focus func |
334 | void rtgui_widget_set_onfocus(rtgui_widget_t *widget, rtgui_event_handler_ptr handler) |
Unfocus 函式#
功能 | 回傳值 |
---|---|
設定 widget 的 unfocus func | void |
*widget |
handler |
---|---|
欲設定的 widget | focus func |
342 | void rtgui_widget_set_onunfocus(rtgui_widget_t *widget, rtgui_event_handler_ptr handler) |
這裡是用指標函數的方式將行為函式填入結構中,要使用時可直接呼叫結構中的元素使用。
Widget 的行為#
上一節整理了設定 widget 的風格,接下來整理 widget 的行為
移動到相對位置#
功能 | 回傳值 |
---|---|
移動 widget 到相對位置 | void |
*widget |
dx |
dy |
---|---|---|
欲移動的 widget | 位移量 x | y |
251 | /* |
移動 widget#
功能 | 回傳值 |
---|---|
移動 widget | void |
*widget |
dx |
dy |
---|---|---|
欲移動的 widget | 位移量 x | y |
221 | static void _widget_move(struct rtgui_widget* widget, int dx, int dy) |
Focus widget#
功能 | 回傳值 | *widget |
---|---|---|
focus widget | void | 欲 focus 的 widget |
350 | /** |
Unfocus widget#
功能 | 回傳值 | *widget |
---|---|---|
focus widget | void | 欲 unfocus 的 widget |
383 | /** |
位移 widget#
點向上位移#
功能 | 回傳值 |
---|---|
點向上位移 | void |
*widget |
*point |
---|---|
目標 widget | 目標點 |
416 | void rtgui_widget_point_to_device(rtgui_widget_t *widget, rtgui_point_t *point) |
點向下位移#
功能 | 回傳值 |
---|---|
點向上位移 | void |
*widget |
*point |
---|---|
目標 widget | 目標點 |
443 | void rtgui_widget_point_to_logic(rtgui_widget_t *widget, rtgui_point_t *point) |
矩形向上位移#
功能 | 回傳值 |
---|---|
點向上位移 | void |
*widget |
*rect |
---|---|
目標 widget | 目標矩形 |
428 | void rtgui_widget_rect_to_device(rtgui_widget_t *widget, rtgui_rect_t *rect) |
矩形向下位移#
功能 | 回傳值 |
---|---|
點向上位移 | void |
*widget |
*rect |
---|---|
目標 widget | 目標矩形 |
455 | void rtgui_widget_rect_to_logic(rtgui_widget_t *widget, rtgui_rect_t *rect) |
更新重疊區域#
功能 | 回傳值 | *widget |
---|---|---|
更新重疊區域 | void | 目標 widget |
531 | /* |
顯示 widget#
功能 | 回傳值 | *widget |
---|---|---|
顯示 widget | void | 目標 widget |
590 | void rtgui_widget_show(struct rtgui_widget *widget) |
隱藏 widget#
功能 | 回傳值 | *widget |
---|---|---|
隱藏 widget | void | 目標 widget |
613 | void rtgui_widget_hide(struct rtgui_widget *widget) |
取得 widget 資訊#
最後整理一些取得 widget 資訊的 API
Top Level#
功能 | 回傳值 | *widget |
---|---|---|
取得 top level | 所在 window | 目標 widget |
470 | struct rtgui_win *rtgui_widget_get_toplevel(rtgui_widget_t *widget) |
上層前景#
功能 | 回傳值 | *widget |
---|---|---|
取得上層前景 | 顏色 | 目標 widget |
667 | rtgui_color_t rtgui_widget_get_parent_foreground(rtgui_widget_t *widget) |
上層背景#
功能 | 回傳值 | *widget |
---|---|---|
取得上層背景 | 顏色 | 目標 widget |
684 | rtgui_color_t rtgui_widget_get_parent_background(rtgui_widget_t *widget) |
下一個兄弟#
功能 | 回傳值 | *widget |
---|---|---|
取得下一個兄弟 | void | 目標 widget |
744 | rtgui_widget_t *rtgui_widget_get_next_sibling(rtgui_widget_t *widget) |
上一個兄弟#
功能 | 回傳值 | *widget |
---|---|---|
取得上一個兄弟 | void | 目標 widget |
757 | rtgui_widget_t *rtgui_widget_get_prev_sibling(rtgui_widget_t *widget) |