高通字库
版本 V2.0 · 更新于 2026-05-25

2B. 基类对象 API

概念说明

在 GT-HMI Engine 中,所有控件(屏幕、按钮、标签、滑动条……)共享一套通用能力:位置、尺寸、透明度、背景色、滚动、焦点等。Engine 将这些共性抽到一个基础结构体 gt_obj_st 中(定义于 src/widgets/gt_obj.h),控件在此基础上扩展各自的功能。

Engine 用 C 语言的 struct 嵌套实现继承——每个控件结构体的第一个成员就是 gt_obj_st

// 以按钮为例(src/widgets/gt_btn.c)
typedef struct _gt_btn_s {
    gt_obj_st base;             // 基类对象(第一个成员)
    _gt_vector_st * contents;   // 按钮特有:状态文本列表
    gt_color_t color_pressed;   // 按钮特有:按下颜色
    gt_color_t font_color;      // 按钮特有:字体颜色
    // ... 其他按钮专有字段
} _gt_btn_st;

由于 base 是结构体第一个成员,指向 _gt_btn_st 的指针可以直接转为 gt_obj_st *,因此所有基类函数(gt_obj_set_posgt_obj_set_opa 等)都能作用于任何控件类型。

控件通过 gt_obj_class_create() 统一创建,每个控件注册一个类描述表 gt_obj_class_st(定义于 src/widgets/gt_obj_class.h),其中包含初始化回调、事件回调、类型枚举和控件专属尺寸:

// 按钮的类描述表(src/widgets/gt_btn.c)
static const gt_obj_class_st gt_btn_class = {
    ._init_cb   = _btn_init_cb,        // 初始化时调用
    ._event_cb  = _btn_event_cb,       // 事件处理时调用
    .type       = GT_TYPE_BTN,         // 控件类型标识
    .size_style = sizeof(_gt_btn_st)   // 控件专属结构体的内存大小
};

一句话总结gt_obj_st 是所有控件的公共部分,基类 API 就是操作这些公共部分的函数。你可以在任何控件上使用它们,因为任何控件都以 gt_obj_st 开头。

如何使用本页

以下函数按功能分组列出,所有函数对一切控件通用。例如 gt_obj_set_pos(obj, 100, 200) 可以设置按钮的坐标,也可以设置标签的坐标——传入对应控件对象即可。


创建与销毁

对象生命周期的起点和终点。"创建"产生一个新控件,"销毁"将其从界面移除。

函数说明
gt_obj_st * gt_obj_create(gt_obj_st * parent)创建对象。parent 为 NULL 时创建屏幕
void gt_obj_destroy(gt_obj_st * obj)[安全] 销毁对象(延迟释放,避免回调中释放自身)
void gt_obj_destroy_immediately(gt_obj_st * obj)[不安全] 立即销毁对象

父子关系

对象以树状结构组织:一个屏幕可以包含按钮、标签,按钮又可以包含图标。这些函数用来查询和操作对象的归属关系。

函数说明
gt_obj_st * gt_obj_get_parent(gt_obj_st * obj)获取父对象
gt_obj_st * gt_obj_change_parent(gt_obj_st * obj, gt_obj_st * to)更换父对象(to 不能为 NULL)
bool gt_obj_is_child(gt_obj_st * obj, gt_obj_st * parent)判断是否为指定父对象的子对象
uint16_t gt_obj_get_child_index(gt_obj_st * parent, gt_obj_st * obj)获取子对象索引,失败返回 0xFFFF
gt_obj_st * gt_obj_search_child_by_type(gt_obj_st * parent, gt_obj_type_et type)按类型搜索子对象
gt_obj_st * gt_obj_search_child_by_id(gt_obj_st * parent, gt_id_t id)按 ID 搜索子对象
gt_res_t gt_obj_bring_to_front(gt_obj_st * obj)将对象移到父容器最上层
gt_obj_st * gt_obj_within_which_scr(gt_obj_st * obj)获取对象所属的屏幕对象

ID 管理

函数说明
void gt_obj_register_id(gt_obj_st * obj, gt_id_t id)注册对象 ID(id >= 0),默认值为 -1(无效)
gt_id_t gt_obj_get_id(gt_obj_st * obj)获取对象 ID
gt_obj_st * gt_obj_find_by_id(gt_id_t widget_id)按 ID 查找全局对象

坐标与尺寸

设置和获取对象的位置(x, y)与大小(宽, 高)。支持绝对坐标、相对坐标、动画移动、按步进调整等多种方式。

函数说明默认值
void gt_obj_set_pos(gt_obj_st * obj, gt_size_t x, gt_size_t y)设置坐标
void gt_obj_set_pos_anim(gt_obj_st * obj, gt_size_t x, gt_size_t y)带动画设置坐标
void gt_obj_set_pos_step(gt_obj_st * obj, gt_size_t step_x, gt_size_t step_y)按步进值调整坐标
void gt_obj_set_pos_relative(gt_obj_st * obj, gt_obj_st * target, gt_size_t diff_x, gt_size_t diff_y)相对目标对象设置坐标。target=NULL 时相对于父对象
void gt_obj_set_x(gt_obj_st * obj, gt_size_t x)设置 X 坐标
void gt_obj_set_y(gt_obj_st * obj, gt_size_t y)设置 Y 坐标
void gt_obj_set_size(gt_obj_st * obj, uint16_t w, uint16_t h)设置宽度和高度
void gt_obj_set_size_anim(gt_obj_st * obj, uint16_t w, uint16_t h)带动画设置尺寸
void gt_obj_set_w(gt_obj_st * obj, uint16_t w)设置宽度
void gt_obj_set_h(gt_obj_st * obj, uint16_t h)设置高度
gt_size_t gt_obj_get_x(gt_obj_st * obj)获取 X 坐标
gt_size_t gt_obj_get_y(gt_obj_st * obj)获取 Y 坐标
uint16_t gt_obj_get_w(gt_obj_st * obj)获取宽度
uint16_t gt_obj_get_h(gt_obj_st * obj)获取高度

外观

控制对象视觉呈现:透明度(可实现淡入淡出)、圆角半径、背景色等。

函数说明默认值
void gt_obj_set_opa(gt_obj_st * obj, gt_opa_t opa)设置透明度。范围 0(全透明)~ 255(不透明)255
gt_anim_st * gt_obj_set_opa_anim(gt_obj_st * obj, gt_opa_t opa)带动画设置透明度,返回动画对象
void gt_obj_set_radius(gt_obj_st * obj, gt_radius_t radius)设置圆角半径(像素)0
void gt_obj_set_radius_anim(gt_obj_st * obj, gt_radius_t radius)带动画设置圆角
void gt_obj_set_bgcolor(gt_obj_st * obj, gt_color_t color)设置背景颜色
gt_color_t gt_obj_get_bgcolor(gt_obj_st * obj)获取背景颜色
void gt_obj_show_bg(gt_obj_st * obj, bool show)是否显示背景颜色。false 时 bgcolor 不可见false
bool gt_obj_is_show_bg(gt_obj_st * obj)获取背景显示状态
void gt_screen_set_bgcolor(gt_obj_st * obj, gt_color_t color)设置屏幕背景颜色(仅屏幕对象)
gt_color_t gt_screen_get_bgcolor(gt_obj_st * obj)获取屏幕背景颜色

可见性与交互

控制对象是否在屏幕上显示(可见/隐藏)、是否响应用户操作(启用/禁用)、是否可触摸,以及触摸事件是否传递给父对象。

函数说明默认值
void gt_obj_set_visible(gt_obj_st * obj, gt_visible_et is_visible)设置可见性:GT_VISIBLEGT_INVISIBLEGT_VISIBLE
gt_visible_et gt_obj_get_visible(gt_obj_st * obj)获取可见状态
void gt_obj_set_disabled(gt_obj_st * obj, gt_disabled_et is_disabled)启用/禁用控件:GT_ENABLEDGT_DISABLEDGT_ENABLED
bool gt_obj_is_disabled(gt_obj_st * obj)获取禁用状态
void gt_obj_set_untouchability(gt_obj_st * obj, bool is_untouchability)设置控件是否可触摸。true=不可触摸false
bool gt_obj_is_untouchability(gt_obj_st * obj)获取不可触摸状态
void gt_obj_set_touch_parent(gt_obj_st * obj, bool is_touch_parent)触摸事件传递给父对象false
bool gt_obj_get_touch_parent(gt_obj_st * obj)获取触摸传递状态

状态

控件的交互状态管理:选中/未选中、触发模式(按住触发 vs 点击切换)、遮罩效果等。

函数说明默认值
void gt_obj_set_state(gt_obj_st * obj, gt_state_et state)设置选中状态:GT_STATE_NONEGT_STATE_PRESSEDGT_STATE_NONE
gt_state_et gt_obj_get_state(gt_obj_st * obj)获取选中状态
void gt_obj_set_trigger_mode(gt_obj_st * obj, gt_obj_trigger_mode_et mode)状态切换模式:GT_OBJ_TRIGGER_MODE_HOLD_ON(按住)或 GT_OBJ_TRIGGER_MODE_SWITCH(切换)HOLD_ON
void gt_obj_set_mask_effect(gt_obj_st * obj, bool is_keep_alive)选中状态时启用遮罩效果false
bool gt_obj_get_mask_effect(gt_obj_st * obj)获取遮罩效果状态

滚动

当对象内容超出可视区域时,控制滚动行为:滚动方向、对齐方式、惯性效果、滚动提示条等。

函数说明默认值
void gt_obj_set_scroll_dir(gt_obj_st * obj, gt_scroll_dir_et dir)滚动方向:GT_SCROLL_DISABLE / GT_SCROLL_HORIZONTAL / GT_SCROLL_VERTICAL / GT_SCROLL_ALLGT_SCROLL_ALL
gt_scroll_dir_et gt_obj_get_scroll_dir(gt_obj_st * obj)获取滚动方向
void gt_obj_set_scroll_snap_x(gt_obj_st * obj, gt_scroll_snap_em snap)水平滚动对齐:GT_SCROLL_SNAP_NONE / START / END / CENTERGT_SCROLL_SNAP_NONE
void gt_obj_set_scroll_snap_y(gt_obj_st * obj, gt_scroll_snap_em snap)垂直滚动对齐:同上可选值GT_SCROLL_SNAP_NONE
void gt_obj_set_scroll_lr(gt_obj_st * obj, bool is_scroll_right)设置水平滚动方向:false=左滚,true=右滚
void gt_obj_set_scroll_ud(gt_obj_st * obj, bool is_scroll_down)设置垂直滚动方向:false=上滚,true=下滚
void gt_obj_set_scroll_tip(gt_obj_st * obj, gt_scroll_tip_et mode)滚动提示条位置:GT_SCROLL_TIP_NONE / LEFT / RIGHT / TOP / BOTTOMGT_SCROLL_TIP_NONE
void gt_obj_set_scroll_tip_always(gt_obj_st * obj, bool always)滚动提示条常显。false=自动隐藏false
void gt_obj_set_rebound(gt_obj_st * obj, bool enabled)滚动回弹效果false
void gt_obj_set_ignore_throw(gt_obj_st * obj, bool is_ignore_throw)忽略滚动惯性(立即停止)false

布局相关

控制对象在父容器中的布局行为:是否固定在屏幕上(不跟随滚动)、是否裁剪超出内容、子控件横向排列等。

函数说明默认值
void gt_obj_set_fixed(gt_obj_st * obj, bool is_fixed)锁定对象位置。锁定后不跟随父容器滚动false
bool gt_obj_get_fixed(gt_obj_st * obj)获取锁定状态
void gt_obj_set_overflow(gt_obj_st * obj, bool is_overflow)允许控件尺寸超出屏幕范围独立滑动false
bool gt_obj_get_overflow(gt_obj_st * obj)获取溢出状态
void gt_obj_set_inside(gt_obj_st * obj, bool is_inside)控件仅在父区域内显示(裁剪)false
bool gt_obj_get_inside(gt_obj_st * obj)获取裁剪状态
void gt_obj_set_virtual(gt_obj_st * obj, bool is_virtual)虚拟控件标志。true=不可接收触摸false
void gt_obj_set_row_layout(gt_obj_st * obj, bool is_row_layout)子控件横向排列false
void gt_obj_set_grow_invert(gt_obj_st * obj, bool is_grow_invert)横向排列时反向增长false

焦点相关

焦点是当前被选中的对象(通常用物理按键或触摸切换)。焦点框是一个高亮边框,指示当前活跃控件。

函数说明默认值
void gt_obj_set_focus(gt_obj_st * obj, bool is_focus)设置焦点状态false
bool gt_obj_is_focus(gt_obj_st * obj)获取焦点状态
void gt_obj_set_focus_disabled(gt_obj_st * obj, gt_disabled_et is_disabled)禁用焦点GT_ENABLED
void gt_obj_set_focus_skip(gt_obj_st * obj, bool is_skip)焦点跳过当前对象直接到子对象false
void gt_obj_set_focus_w(gt_obj_st * obj, uint8_t focus_w)焦点框边框宽度(像素)2
void gt_obj_set_focus_gap(gt_obj_st * obj, uint8_t focus_gap)焦点框与控件间距(像素)0

事件通知

事件冒泡:子对象的触摸事件是否向上传递给父对象。手势滑动方向事件:检测用户的滑动方向。

函数说明默认值
void gt_obj_set_bubble_notify(gt_obj_st * obj, bool is_bubble_notify)对象事件冒泡通知父对象false
bool gt_obj_is_bubble_notify(gt_obj_st * obj)获取冒泡通知状态
void gt_obj_set_swipe_dir(gt_obj_st * obj, bool enabled)启用手势滑动方向事件(需配合 GT_EVENT_TYPE_SWIPE_*false

条件编译特性

以下 API 仅在对应宏定义开启时可用。

条件宏API说明
GT_USE_CUSTOM_TOUCH_EXPAND_SIZEvoid gt_obj_set_touch_expand_area(gt_obj_st * obj, gt_size_t hor, gt_size_t ver)设置触摸扩展区域
GT_USE_WIDGET_DYNAMIC_FRAME_RATEvoid gt_obj_set_frame_rate(gt_obj_st * obj, gt_obj_frame_rate_et frame_rate)设置动态帧率:GT_OBJ_FRAME_RATE_HIGH / MIDDLE / LOW

获取滚动限制

函数说明
gt_size_t gt_obj_get_limit_right(gt_obj_st * obj)获取子对象最大右边界
gt_size_t gt_obj_get_limit_bottom(gt_obj_st * obj)获取子对象最大下边界
gt_point_st gt_obj_calc_scroll_limit(gt_obj_st * parent)计算可滚动的最大距离

颜色透明度常量

定义于 gt_color.h,配合 gt_obj_set_opa() 使用。

常量说明
GT_OPA_00全透明
GT_OPA_102510% 不透明
GT_OPA_205120%
GT_OPA_307630%
GT_OPA_4010240%
GT_OPA_5012750%
GT_OPA_6015360%
GT_OPA_7017870%
GT_OPA_8020480%
GT_OPA_9022990%
GT_OPA_COVER255完全不透明