287 lines
9.0 KiB
C
287 lines
9.0 KiB
C
#ifndef _COMPO_KALEIDOSCOPE_H
|
|
#define _COMPO_KALEIDOSCOPE_H
|
|
|
|
#define KALE_FUNC_LAYER 4 //任务层数 一层 KALE_CIR_ICON_NUM 个任务
|
|
#define KALE_CIR_ICON_NUM 8 //一圈图标个数
|
|
#define KALE_CIR_ANGLE_DEV_OI 450 //图标角度偏差
|
|
#define KALE_CIR_ANGLE_DEV 225 //内外圈角度偏差
|
|
#define KALE_CIR_ANGLE_COM (KALE_CIR_ANGLE_DEV_OI - KALE_CIR_ANGLE_DEV) //互补角
|
|
|
|
enum KALE_CIR_IDX{
|
|
KALE_CIR_0,
|
|
KALE_CIR_1,
|
|
KALE_CIR_MAX,
|
|
};
|
|
|
|
enum KALE_CTL {
|
|
KALE_CTL_NULL,
|
|
KALE_CTL_SWITCH,
|
|
KALE_CTL_ROTATE,
|
|
KALE_CTL_SWAP,
|
|
};
|
|
|
|
enum KALE_SWAP {
|
|
KALE_SWAP_NULL,
|
|
KALE_SWAP_LAST,
|
|
KALE_SWAP_NEXT,
|
|
};
|
|
|
|
enum KALE_FUNC_LAY {
|
|
KALE_FUNC_LAY_0,
|
|
KALE_FUNC_LAY_1,
|
|
KALE_FUNC_LAY_2,
|
|
KALE_FUNC_LAY_MAX,
|
|
};
|
|
|
|
typedef struct compo_kale_axis_t_ {
|
|
int16_t x;
|
|
int16_t y;
|
|
}compo_kale_axis_t;
|
|
|
|
typedef struct compo_kale_func_t_ {
|
|
widget_icon_t *widget;
|
|
u8 func_sta;
|
|
}compo_kale_func_t;
|
|
|
|
typedef struct compo_kale_icon_t_ {
|
|
compo_kale_func_t fsub;
|
|
int16_t angle;
|
|
}compo_kale_icon_t;
|
|
|
|
typedef struct compo_kale_cir_t_ {
|
|
compo_kale_icon_t icon[KALE_CIR_ICON_NUM];
|
|
union {
|
|
struct {
|
|
u32 r : 10;
|
|
u32 size : 10;
|
|
u32 lay : 2;
|
|
};
|
|
};
|
|
}compo_kale_cir_t;
|
|
|
|
typedef struct compo_kale_org_func_t_ {
|
|
compo_kale_func_t fsub[KALE_CIR_ICON_NUM];
|
|
}compo_kale_org_func_t;
|
|
|
|
typedef struct compo_kale_ctl_t_ {
|
|
union {
|
|
struct {
|
|
u32 adm : 1; //入场动画
|
|
u32 sta : 3; //状态
|
|
u32 swap : 3; //切换
|
|
u32 oidx : 2; //当前外圈编号
|
|
u32 iidx : 2; //当前内圈编号
|
|
u32 org_or : 10; //初始外圈半径
|
|
u32 org_ir : 10; //初始内圈半径
|
|
u32 osize : 10; //外圈图标尺寸
|
|
u32 isize : 10; //内圈图标尺寸
|
|
};
|
|
};
|
|
}compo_kale_ctl_t;
|
|
|
|
typedef struct compo_kaleidoscope_t_ {
|
|
COMPO_STRUCT_COMMON;
|
|
widget_page_t *page;
|
|
widget_icon_t *sel_icon; //选择的ICON
|
|
s16 sel_idx; //选择的idx
|
|
u8 total_cnt; //图标个数
|
|
u8 focus_icon_idx; //焦点的图标编号
|
|
compo_kale_axis_t cen; //中心点
|
|
compo_kale_ctl_t ctl; //切换控制
|
|
compo_kale_cir_t dcir[KALE_CIR_MAX]; //显示图标集合
|
|
compo_kale_org_func_t ofunc[KALE_FUNC_LAYER]; //任务图标集合
|
|
|
|
// u8 idx_time; //加入时分秒针元素
|
|
// widget_page_t *page_time;
|
|
// widget_image_t *hour;
|
|
// widget_image_t *min;
|
|
// widget_image_t *sec;
|
|
}compo_kaleidoscope_t;
|
|
|
|
typedef struct menu_kale_item_t_ {
|
|
u32 res_addr;
|
|
u8 func_sta;
|
|
} menu_kale_item_t;
|
|
|
|
/**
|
|
* @brief 变量范围限制
|
|
* 注:超出最小最大范围 返回最小或最大值
|
|
* @param[in] val : 变量
|
|
* @param[in] min : 最小值
|
|
* @param[in] max : 最大值
|
|
* @return 当前值或最大最小值
|
|
**/
|
|
int limit_range(int val, int min, int max);
|
|
|
|
/**
|
|
* @brief 变量环形递增
|
|
* @param[in] val : 变量地址
|
|
* @param[in] min : 最小值
|
|
* @param[in] max : 最大值
|
|
* @return 递增值
|
|
**/
|
|
void cycle_plus(u8 *val, u8 min, u8 max);
|
|
|
|
/**
|
|
* @brief 变量环形递减
|
|
* @param[in] val : 变量地址
|
|
* @param[in] min : 最小值
|
|
* @param[in] max : 最大值
|
|
* @return 递减值
|
|
**/
|
|
void cycle_sub(u8 *val, u8 min, u8 max);
|
|
|
|
/**
|
|
* @brief 创建一个万花筒组件
|
|
* @param[in] frm : 窗体指针
|
|
* @return 返回万花筒图标集合指针
|
|
**/
|
|
compo_kaleidoscope_t *compo_kaleidoscope_create(compo_form_t *frm);
|
|
|
|
/**
|
|
* @brief 万花筒图标角度初始化
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
**/
|
|
void compo_kaleidoscope_angle_init(compo_kaleidoscope_t *kale);
|
|
|
|
/**
|
|
* @brief 初始化万花筒内外圈层
|
|
* 注:根据屏幕大小自适应内外圈层半径
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] dc_width : 屏幕宽度
|
|
* @param[in] dc_height : 屏幕高度
|
|
* @param[in] osize : 外圈图标尺寸
|
|
* @param[in] isize : 内圈图标尺寸
|
|
* @param[in] edge_space : 离屏幕边缘距离
|
|
* @param[in] icon_space : 内外圈图标间距离
|
|
**/
|
|
void compo_kaleidoscope_init(compo_kaleidoscope_t *kale, s16 dc_width, s16 dc_height, u16 osize, u16 isize, s16 edge_space, s16 icon_space);
|
|
|
|
/**
|
|
* @brief 往万花筒图标集合里面添加图标
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] item : 图标集指针
|
|
* @param[in] item_cnt : 图标集总数
|
|
**/
|
|
void compo_kaleidoscope_icon_add(compo_kaleidoscope_t *kale, menu_kale_item_t const *item, int item_cnt);
|
|
|
|
/**
|
|
* @brief 根据变化半径,万花筒内外圈半径更新
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] dr : 变化半径
|
|
**/
|
|
void compo_kaleidoscope_update_r(compo_kaleidoscope_t *kale, s16 dr);
|
|
|
|
/**
|
|
* @brief 根据内外圈半径,获取当前圈层的图标尺寸
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] r : 内外圈半径
|
|
* @return 返回当前圈层图标尺寸
|
|
**/
|
|
u16 compo_kaleidoscope_size_from_r(compo_kaleidoscope_t *kale, u16 r);
|
|
|
|
/**
|
|
* @brief 万花筒图标尺寸更新
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
**/
|
|
void compo_kaleidoscope_update_size(compo_kaleidoscope_t *kale);
|
|
|
|
/**
|
|
* @brief 根据变化角度,万花筒旋转角度更新
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] dr : 变化半径
|
|
**/
|
|
void compo_kaleidoscope_update_angle(compo_kaleidoscope_t *kale, int16_t dangle);
|
|
|
|
/**
|
|
* @brief 万花筒上下层任务切换设置
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] msg : 消息
|
|
**/
|
|
void compo_kaleidoscope_ctl_swap_set(compo_kaleidoscope_t *kale, size_msg_t msg);
|
|
|
|
/**
|
|
* @brief 万花筒上下层任务信息更替
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] swap : 上下切换
|
|
* @return true 切换成功
|
|
* false 切换失败
|
|
**/
|
|
bool compo_kaleidoscope_ctl_swap_pro(compo_kaleidoscope_t *kale, u8 swap);
|
|
|
|
/**
|
|
* @brief 万花筒上下层任务切换处理
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] sta : 切换状态
|
|
**/
|
|
void compo_kaleidoscope_ctl_switch_pro(compo_kaleidoscope_t *kale, u8 sta);
|
|
|
|
/**
|
|
* @brief 万花筒上下层任务切换处KICK
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] msg : 消息
|
|
**/
|
|
void compo_kaleidoscope_ctl_switch_kick(compo_kaleidoscope_t *kale, size_msg_t msg);
|
|
|
|
/**
|
|
* @brief 万花筒入场动画KICK
|
|
* 注:从表盘页面进入万花筒,使能入场动画
|
|
* 注:从子任务返回不具备入场动画,并返回子任务所在的层级
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
**/
|
|
void compo_kaleidoscope_adm_animation_kick(compo_kaleidoscope_t *kale);
|
|
|
|
/**
|
|
* @brief 万花筒入场动画
|
|
* 注:从表盘页面进入万花筒,使能入场动画
|
|
* 注:从子任务返回不具备入场动画,并返回子任务所在的层级
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
**/
|
|
void compo_kaleidoscope_adm_animation_pro(compo_kaleidoscope_t *kale);
|
|
|
|
/**
|
|
* @brief 万花筒图标可视化设置
|
|
* 注:显示内外圈层所在任务层图标
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
**/
|
|
void compo_kaleidoscope_set_vis(compo_kaleidoscope_t *kale);
|
|
|
|
/**
|
|
* @brief 万花筒切换动画
|
|
* @param[in] kale : 万花筒图标集合指针
|
|
* @param[in] expire : 刷新间隔
|
|
* @param[in] dr : 相对半径
|
|
* @param[in] dangle : 旋转角度
|
|
**/
|
|
void compo_kaleidoscope_switch_animation(compo_kaleidoscope_t *kale, u32 expire, s16 dr, int16_t dangle);
|
|
|
|
/**
|
|
* @brief 更新图标集合Widget
|
|
* @param[in] kale : 图标集指针
|
|
**/
|
|
void compo_kale_update(compo_kaleidoscope_t *kale);
|
|
|
|
/**
|
|
* @brief 按坐标选择图标
|
|
* @param[in] kale : 图标集指针
|
|
* @param[in] x : x轴坐标
|
|
* @param[in] y : y轴坐标
|
|
* @return 返回图标索引
|
|
**/
|
|
int compo_kale_select(compo_kaleidoscope_t *kale, int x, int y);
|
|
|
|
/**
|
|
* @brief 按索引选择图标
|
|
* @param[in] kale : 图标集指针
|
|
* @param[in] idx : 编号索引
|
|
* @return 返回图标指针
|
|
**/
|
|
widget_icon_t *compo_kale_select_byidx(compo_kaleidoscope_t *kale, int idx);
|
|
|
|
/**
|
|
* @brief 按索引设置图标集合焦点坐标 并设置当前任务圈层
|
|
* @param[in] kale : 图标集指针
|
|
* @param[in] idx : 编号索引
|
|
**/
|
|
void compo_kale_set_focus_byidx(compo_kaleidoscope_t *kale, int idx);
|
|
#endif |