mcu_ab568x/app/platform/gui/components/compo_rowbox.h
2025-05-30 18:03:10 +08:00

131 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _COMPO_ROWBOX_H
#define _COMPO_ROWBOX_H
#define IMG_MAX 7
enum COMPO_ROWBOX_STYLE {
COMPO_ROWBOX_STYLE_NORMAL, //普通样式
COMPO_ROWBOX_STYLE_PREVIEW, //预览图
};
typedef struct compo_rowbox_move_cb_t_ {
u32 tick;
s32 focus_x;
s32 focus_dx;
s32 focus_xstep;
int moveto_idx; //设定自动移到的目标菜单
s32 moveto_x; //设定自动移到的y坐标
s32 first_x; //首图标坐标
s32 last_x; //尾图标坐标
bool flag_drag; //开始拖动
bool flag_move_auto; //自动移到坐标
} compo_rowbox_move_cb_t;
typedef struct compo_rowbox_t_ {
COMPO_STRUCT_COMMON;
compo_rowbox_move_cb_t *mcb; //移动控制
widget_page_t *page;
widget_image_t *img[IMG_MAX]; //记录图片地址
s16 img_idx[IMG_MAX]; //记录图片对应的idx
const u32 *res_tbl; //记录图片资源的地址
u8 style; //样式
area_t img_area; //记录图像原始的大小
u8 img_cnt; //图片总计数
u16 row_space; //空白间隙
u16 row_width; //图片宽度
u16 row_center_x; //图片x轴中心位置
u16 row_width_total; //图片+空白
u16 cycle_width; //滑动一圈回到原点经过的距离
u16 total_width; //图片拼接总长度
s16 ofs_x; //x偏移值
s16 focus_icon_idx; //焦点的图标编号
bool flag_cycle; //是否循环滑动
} compo_rowbox_t;
/**
* @brief 创建一个列表(横向)控件
* @param[in] frm : 窗体指针
* @return 返回列表(横向)指针
**/
compo_rowbox_t *compo_rowbox_create(compo_form_t *frm);
/**
* @brief 设置列表(横向)控件内容
* @param[in] rowbox : 列表(横向)指针
* @param[in] *res_tbl : 存放图像资源的地址
* @param[in] img_cnt : 图像数量
**/
void compo_rowbox_set(compo_rowbox_t *rowbox, const u32 *res_tbl, u8 img_cnt);
/**
* @brief 根据编号获取x坐标
* @param[in] rowbox : 列表(横向)指针
* @param[in] idx : 菜单编号
* @return x坐标
**/
int compo_rowbox_getx_byidx(compo_rowbox_t *rowbox, int idx);
/**
* @brief 按x坐标设置列表横向焦点
* @param[in] rowbox : 列表(横向)指针
* @param[in] x : x坐标
**/
void compo_rowbox_set_focus(compo_rowbox_t *rowbox, s16 x);
/**
* @brief 将选择的图标设为焦点
* @param[in] rowbox : 列表(横向)指针
* @param[in] idx : 图标编号
**/
void compo_rowbox_set_focus_byidx(compo_rowbox_t *rowbox, int idx);
/**
* @brief 设置列表(横向)样式
* @param[in] rowbox : 列表(横向)指针
* @param[in] style : 样式
**/
void compo_rowbox_set_style(compo_rowbox_t *rowbox, u8 style);
/**
* @brief 更新列表框Widget
* @param[in] rowbox : 列表(横向)指针
**/
void compo_rowbox_update(compo_rowbox_t *rowbox);
/**
* @brief 列表框拖动与移动初始化
* @param[in] rowbox : 列表(横向)指针
**/
void compo_rowbox_move_init(compo_rowbox_t *rowbox);
/**
* @brief 列表框拖动与移动处理
* @param[in] rowbox : 列表(横向)指针
**/
void compo_rowbox_move(compo_rowbox_t *rowbox);
/**
* @brief 按坐标选择菜单项
* @param[in] rowbox : 列表(横向)指针
* @param[in] pt : 坐标
* @return 返回菜单项索引
**/
int compo_rowbox_select(compo_rowbox_t *rowbox, point_t pt);
/**
* @brief 是否使能列表循环滑动功能
* @param[in] rowbox : 列表(横向)指针
* @param[in] cycle : true 使能循环滑动
false 关闭循环滑动
**/
void compo_rowbox_cycle_en(compo_rowbox_t *rowbox, bool cycle);
#endif