#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