#include "include.h" #include "func.h" #include "app_variable.h" #if TRACE_EN #define TRACE(...) printf(__VA_ARGS__) #else #define TRACE(...) #endif #define TOUCH_HEIGHT (GUI_SCREEN_WIDTH-GUI_SCREEN_WIDTH/3) //组件ID enum { //按键 COMPO_ID_BTN_YES = 1, COMPO_ID_BTN_NO, COMPO_ID_BTN_SETTIME_HOUR, COMPO_ID_BTN_SETTIME_MIN, //图像 COMPO_ID_PIC_CONTINUE_CLICK, COMPO_ID_PIC_SELECT_HOUR, COMPO_ID_PIC_SELECT_MIN, //数字 COMPO_ID_NUM_TIME_SET_HOUR_UU, COMPO_ID_NUM_TIME_SET_HOUR_UP, COMPO_ID_NUM_TIME_SET_HOUR, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, COMPO_ID_NUM_TIME_SET_HOUR_DD, COMPO_ID_NUM_TIME_SET_MIN_UU, COMPO_ID_NUM_TIME_SET_MIN_UP, COMPO_ID_NUM_TIME_SET_MIN, COMPO_ID_NUM_TIME_SET_MIN_DOWN, COMPO_ID_NUM_TIME_SET_MIN_DD, }; typedef struct settime_set_num_item_t_ { int num_cnt; u16 num_id; s16 load_id; int val; s16 x; s16 y; bool visible_en; } settime_set_num_item_t; typedef struct f_set_time_t_ { settime_set_num_item_t set_num_item[11]; area_t size; u16 num_height; s16 hcnt; s16 mcnt; s8 hour; s8 min; s32 momentum_dy; } f_set_time_t; #define SETTIME_SET_NUM_ITEM_CNT ((int)(sizeof(tbl_settime_set_num_item) / sizeof(tbl_settime_set_num_item[0]))) #define SETTIME_NUM_PIC_OFFSET_X 32 //各个蓝色框之间的x轴偏移量 #define SETTIME_NUM_PIC_CENTER_Y 66 //图片中间蓝色框框中心y坐标 #define SETTIME_TXT_ITEM_T_X (GUI_SCREEN_CENTER_X-SETTIME_NUM_PIC_OFFSET_X) //左边时间 x中心坐标 #define SETTIME_TXT_ITEM_H_X GUI_SCREEN_CENTER_X //中间时间 x中心坐标 #define SETTIME_TXT_ITEM_M_X (GUI_SCREEN_CENTER_X+SETTIME_NUM_PIC_OFFSET_X) //右边时间 x中心坐标 #define SETTIME_TXT_ITEM_Y 16 //中间时间 y中心坐标 #define SETTIME_TXT_ITEM_Y_OFFSET 24 //上下每个 时间的y轴偏移量 #define TOUCH_HEIGHT SETTIME_TXT_ITEM_Y_OFFSET * 3 #define SETTIME_SET_NUM_POS_Y_START SETTIME_TXT_ITEM_Y #define SETTIME_SET_NUM_POS_Y(y_start,space,cnt) (y_start)+(space)*(cnt) #define SELECTOR_FRICTION 16 // 摩擦力,用于减少动量 #define SELECTOR_MOMENTUM_FACTOR 6 // 动量因子,用于控制滑动的敏感度和速度 //搞个数字item,创建时遍历一下 static const settime_set_num_item_t tbl_settime_set_num_item[] = { /* num_cnt, num_id, load_num_id val, x, y, visible_en */ {2, COMPO_ID_NUM_TIME_SET_HOUR_UU, COMPO_ID_NUM_TIME_SET_HOUR_UU, 22, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y, true}, {2, COMPO_ID_NUM_TIME_SET_HOUR_UP, COMPO_ID_NUM_TIME_SET_HOUR_UP, 23, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET, true}, {2, COMPO_ID_NUM_TIME_SET_HOUR, COMPO_ID_NUM_TIME_SET_HOUR, 0, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*2, true}, {2, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, 1, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*3, true}, {2, COMPO_ID_NUM_TIME_SET_HOUR_DD, COMPO_ID_NUM_TIME_SET_HOUR_DD, 2, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*4, true}, {2, COMPO_ID_NUM_TIME_SET_MIN_UU, COMPO_ID_NUM_TIME_SET_MIN_UU, 58, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y, true}, {2, COMPO_ID_NUM_TIME_SET_MIN_UP, COMPO_ID_NUM_TIME_SET_MIN_UP, 59, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET, true}, {2, COMPO_ID_NUM_TIME_SET_MIN, COMPO_ID_NUM_TIME_SET_MIN, 0, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*2, true}, {2, COMPO_ID_NUM_TIME_SET_MIN_DOWN, COMPO_ID_NUM_TIME_SET_MIN_DOWN, 1, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*3, true}, {2, COMPO_ID_NUM_TIME_SET_MIN_DD, COMPO_ID_NUM_TIME_SET_MIN_DD, 2, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*4, true}, }; //获取 时分 上一个和下一个的数字 static u8 func_alarm_clock_get_time_cal(s8 num, bool hour_en, u8 mode) //mode 0:返回当前hour/min,1:返回上一个hour/min,2:返回下一个hour/min { if (num < 0) { if (hour_en) { num += 24; } else { num += 60; } } if (mode == 1) { if (hour_en) { if (num == 0 || num > 23) { return 23; } } else { if (num == 0 || num > 59) { return 59; } } return num - 1; } else if (mode == 2){ if (hour_en) { if (num >= 23) { return 0; } } else { if (num >= 59) { return 0; } } return num + 1; } else { if (hour_en) { if (num > 23) { return 23; } } else { if (num > 59) { return 59; } } return num; } } //创建时间设置窗体,创建窗体中不要使用功能结构体 func_cb.f_cb compo_form_t *func_set_time_form_create(void) { //新建窗体和背景 compo_form_t *frm = compo_form_create(true); //设置标题栏 compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME); compo_form_set_title(frm, i18n[STR_SETTING_TIME]); // 图片,蓝色小框框 compo_picturebox_t *pic_cen = compo_picturebox_create(frm, UI_BUF_SETTING_SETTIME_SELECT_BIN); compo_setid(pic_cen, COMPO_ID_PIC_SELECT_HOUR); compo_picturebox_set_pos(pic_cen, SETTIME_TXT_ITEM_T_X, SETTIME_NUM_PIC_CENTER_Y); compo_picturebox_t *pic_rig = compo_picturebox_create(frm, UI_BUF_SETTING_SETTIME_DEFAULT_BIN); compo_setid(pic_rig, COMPO_ID_PIC_SELECT_MIN); compo_picturebox_set_pos(pic_rig, SETTIME_TXT_ITEM_M_X, SETTIME_NUM_PIC_CENTER_Y); //创建数字 compo_textbox_t *txt_num; u8 hour, min; hour = SysVariable.Rtc.hour; min = SysVariable.Rtc.min; char buf[4]; for (u8 idx = 0; idx < SETTIME_SET_NUM_ITEM_CNT; idx++) { txt_num = compo_textbox_create(frm, tbl_settime_set_num_item[idx].num_cnt); compo_textbox_set_font(txt_num, UI_BUF_0FONT_FONT_DIN_LIGHT_NUM_15_BIN); compo_setid(txt_num, tbl_settime_set_num_item[idx].num_id); compo_textbox_set_align_center(txt_num, true); compo_textbox_set_pos(txt_num, tbl_settime_set_num_item[idx].x, tbl_settime_set_num_item[idx].y); compo_textbox_set_visible(txt_num, tbl_settime_set_num_item[idx].visible_en); memset(buf, 0, sizeof(buf)); if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU) { //上上次的时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(hour, 1, 1), 1, 1)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP) { //上次的时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(hour, 1, 1)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR) { //当前时间 snprintf(buf, sizeof(buf), "%02d", hour); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN) { //下次时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(hour, 1, 2)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD) { //下下次时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(hour, 1, 2), 1, 2)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UU) { snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(min, 0, 1), 0, 1)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UP) { snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(min, 0, 1)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN) { snprintf(buf, sizeof(buf), "%02d", min); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DOWN) { snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(min, 0, 2)); } else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DD) { snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(min, 0, 2), 0, 2)); } compo_textbox_set(txt_num, buf); } // 上方渐变图层 s16 offset_y = 5; compo_shape_t *shape_up = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); compo_shape_set_color(shape_up, COLOR_BLACK); compo_shape_set_align_center(shape_up, false); compo_shape_set_location(shape_up, 0, offset_y, GUI_SCREEN_WIDTH, 10); offset_y += 5; for (int i = 0; i < 20; i++) { shape_up = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); compo_shape_set_color(shape_up, COLOR_BLACK); compo_shape_set_align_center(shape_up, false); compo_shape_set_location(shape_up, 0, offset_y + (i * 2), GUI_SCREEN_WIDTH, 2); compo_shape_set_alpha(shape_up, 255 - (i * 6)); } // 下方渐变图层 offset_y = 80; for (int i = 0; i < 20; i++) { compo_shape_t *shape_down = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); compo_shape_set_color(shape_down, COLOR_BLACK); compo_shape_set_align_center(shape_down, false); compo_shape_set_location(shape_down, 0, offset_y + 2, GUI_SCREEN_WIDTH, 2); compo_shape_set_alpha(shape_down, 141 + (i * 6)); offset_y += 2; } compo_shape_t *shape_down = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); compo_shape_set_color(shape_down, COLOR_BLACK); compo_shape_set_align_center(shape_down, false); compo_shape_set_location(shape_down, 0, offset_y, GUI_SCREEN_WIDTH, 53); //创建按钮 compo_button_t *btn; btn = compo_button_create_by_image(frm, UI_BUF_COMMON_NO_BIN); compo_setid(btn, COMPO_ID_BTN_NO); compo_button_set_pos(btn, 1+31, 122+18); btn = compo_button_create_by_image(frm, UI_BUF_ALARM_CLOCK_YES_BIN); compo_setid(btn, COMPO_ID_BTN_YES); compo_button_set_pos(btn, 65+31, 122+18); /* 两个滑动区域 */ btn = compo_button_create(frm); compo_setid(btn, COMPO_ID_BTN_SETTIME_HOUR); compo_button_set_location(btn, GUI_SCREEN_CENTER_X - SETTIME_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 40, TOUCH_HEIGHT); btn = compo_button_create(frm); compo_setid(btn, COMPO_ID_BTN_SETTIME_MIN); compo_button_set_location(btn, GUI_SCREEN_CENTER_X + SETTIME_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 40, TOUCH_HEIGHT); return frm; } static void alarm_clock_set_num_pos_cal(s32 dy, u8 id, bool press) { f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb; u16 num_height = f_set_time->num_height; static s32 last_dy = 0; s8 dir = 0; s32 distance = 0; settime_set_num_item_t *time_item; u8 ofs = 0; if (id == COMPO_ID_BTN_SETTIME_HOUR) { ofs = 0; time_item = &f_set_time->set_num_item[0]; } else if (id == COMPO_ID_BTN_SETTIME_MIN) { ofs = 5; time_item = &f_set_time->set_num_item[5]; } if (press) { f_set_time->momentum_dy = (dy - last_dy) * SELECTOR_MOMENTUM_FACTOR; // 使用整数计算来增强动量效应 distance = dy - last_dy; } else { distance = f_set_time->momentum_dy; if (f_set_time->momentum_dy > 0) { f_set_time->momentum_dy -= SELECTOR_FRICTION; // 减少正向动量 if (f_set_time->momentum_dy < 0) { f_set_time->momentum_dy = 0; // 防止动量变为负数 } } else if (f_set_time->momentum_dy < 0) { f_set_time->momentum_dy += SELECTOR_FRICTION; // 减少负向动量 if (f_set_time->momentum_dy > 0) { f_set_time->momentum_dy = 0; // 防止动量变为正数 } } if (abs(f_set_time->momentum_dy) < SELECTOR_FRICTION) { // 动量小于摩擦力时,停止滚动 f_set_time->momentum_dy = 0; dy = 0; last_dy = 0; distance = 0; } } time_item[0].y += distance; time_item[1].y += distance; time_item[2].y += distance; time_item[3].y += distance; time_item[4].y += distance; if (distance || !press) { printf("[%d]-->", time_item[2].y); } for (int i=0; i<5; i++) { if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP+ofs) { if ((time_item[i].y - (SETTIME_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height) { dir = -1; break; } else if (press == false && ((time_item[i].y - (SETTIME_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height/2)) { dir = -1; break; } } else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN+ofs) { if (time_item[i].y >= (SETTIME_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height)) { dir = 1; break; } else if (press == false && (time_item[i].y >= (SETTIME_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height/2))) { dir = 1; break; } } } if (dir) { printf("dir\n"); for(int i=0; i<5; i++) { time_item[i].load_id += dir; if (time_item[i].load_id < COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs) { time_item[i].load_id = COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs; } else if (time_item[i].load_id > COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs) { time_item[i].load_id = COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs; } } if (id == COMPO_ID_BTN_SETTIME_HOUR) { f_set_time->hcnt += dir; if (dir && f_set_time->hour == 0) { f_set_time->hour = 24; } f_set_time->hour = (f_set_time->hour - dir) % 24; } else if (id == COMPO_ID_BTN_SETTIME_MIN) { f_set_time->mcnt += dir; if (dir && f_set_time->min == 0) { f_set_time->min = 60; } f_set_time->min = (f_set_time->min - dir) % 60; } } if (press == false || dir) { for(int i=0; i<5; i++) { if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs) { time_item[i].visible_en = true; time_item[i].num_cnt = 2; time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_UU-COMPO_ID_NUM_TIME_SET_HOUR_UU); } else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs) { time_item[i].visible_en = true; time_item[i].num_cnt = 2; time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_DD-COMPO_ID_NUM_TIME_SET_HOUR_UU); } else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP+ofs) { time_item[i].visible_en = true; time_item[i].num_cnt = 2; time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_UP-COMPO_ID_NUM_TIME_SET_HOUR_UU); } else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR+ofs) { time_item[i].visible_en = true; time_item[i].num_cnt = 2; time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR-COMPO_ID_NUM_TIME_SET_HOUR_UU); } else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN+ofs) { time_item[i].visible_en = true; time_item[i].num_cnt = 2; time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_DOWN-COMPO_ID_NUM_TIME_SET_HOUR_UU); } } } for (int i=0; i<5; i++) { compo_textbox_t *txt_num = compo_getobj_byid(time_item[i].num_id); compo_textbox_set_align_center(txt_num, true); compo_textbox_set_pos(txt_num, time_item[i].x, time_item[i].y); compo_textbox_set_visible(txt_num, time_item[i].visible_en); } if (distance || !press) { printf("[%d]\n", time_item[2].y); } last_dy = dy; } static void func_alarm_clock_set_move_handle(u8 id) { f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb; settime_set_num_item_t *time_item; bool flag_press = 0; u32 tick = tick_get(); s32 dx = 0, dy = 0; //坐标差量 char buf[4]; if (id == COMPO_ID_BTN_SETTIME_HOUR) { time_item = &f_set_time->set_num_item[0]; } else if (id == COMPO_ID_BTN_SETTIME_MIN) { time_item = &f_set_time->set_num_item[5]; } for (;;) { flag_press = ctp_get_dxy(&dx, &dy); //printf("x:%d, y:%d\n",dx, dy); alarm_clock_set_num_pos_cal(dy, id, flag_press); if (!flag_press && f_set_time->momentum_dy) { while (!tick_check_expire(tick, 15)) ; } /* 15ms刷新一下数字框 */ if (tick_check_expire(tick, 15)) { tick = tick_get(); if (id == COMPO_ID_BTN_SETTIME_HOUR) { for (int idx = 0; idx < 5; idx++) { memset(buf, 0, sizeof(buf)); compo_textbox_t *txt_num = compo_getobj_byid(time_item[idx].num_id); if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU) { //上上次的时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->hour, 1, 1), 1, 1)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP) { //上次的时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 1)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR) { //当前时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 0)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN) { //下次时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 2)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD) { //下下次时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->hour, 1, 2), 1, 2)); } compo_textbox_set(txt_num, buf); } } else if (id == COMPO_ID_BTN_SETTIME_MIN){ for (int idx = 0; idx < 5; idx++) { memset(buf, 0, sizeof(buf)); compo_textbox_t *txt_num = compo_getobj_byid(time_item[idx].num_id); if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UU) { //上上次的时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->min, 0, 1), 0, 1)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UP) { //上次的时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 1)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN) { //当前时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 0)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DOWN) { //下次时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 2)); } else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DD) { //下下次时间 snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->min, 0, 2), 0, 2)); } compo_textbox_set(txt_num, buf); } } } if (!flag_press && f_set_time->momentum_dy == 0) { f_set_time->hcnt = 0; f_set_time->mcnt = 0; break; } evt_message(msg_dequeue()); func_process(); } } //触摸按钮效果处理 static void func_set_time_button_touch_handle(void) { int id = compo_get_button_id(); compo_picturebox_t *select_min_pic = compo_getobj_byid(COMPO_ID_PIC_SELECT_MIN); compo_picturebox_t *select_hour_pic = compo_getobj_byid(COMPO_ID_PIC_SELECT_HOUR); switch (id) { // case COMPO_ID_BTN_YES: // case COMPO_ID_BTN_NO: // compo_picturebox_set_visible(pic_click, true); // break; case COMPO_ID_BTN_SETTIME_HOUR: case COMPO_ID_BTN_SETTIME_MIN: /* 更新选择状态 */ compo_picturebox_set(select_min_pic, id == COMPO_ID_BTN_SETTIME_MIN ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN); compo_picturebox_set(select_hour_pic, id == COMPO_ID_BTN_SETTIME_HOUR ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN); func_alarm_clock_set_move_handle(id); break; default: break; } } //释放按钮效果处理 static void func_set_time_button_release_handle(void) { // compo_picturebox_t *pic_click = compo_getobj_byid(COMPO_ID_PIC_CONTINUE_CLICK); // compo_picturebox_set_visible(pic_click, false); } //单击按钮 static void func_set_time_button_click(void) { f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb; int id = compo_get_button_id(); tm_t tm; tm = rtc_clock_get(); switch (id) { case COMPO_ID_BTN_YES: tm.hour =f_set_time->hour; tm.min = f_set_time->min; SysVariable.Rtc.hour = f_set_time->hour; SysVariable.Rtc.min = f_set_time->min; rtc_clock_set(tm); func_switch_to_assign_screen(FUNC_SET_SUB_TIME, true); break; case COMPO_ID_BTN_NO: func_switch_to_assign_screen(FUNC_SET_SUB_TIME, true); break; default: break; } func_set_time_button_release_handle(); } //时间设置功能事件处理 static void func_set_time_process(void) { func_process(); } //时间设置功能消息处理 static void func_set_time_message(size_msg_t msg) { switch (msg) { case MSG_CTP_TOUCH: func_set_time_button_touch_handle(); break; case MSG_CTP_CLICK: func_set_time_button_click(); break; case MSG_CTP_SHORT_UP: case MSG_CTP_SHORT_DOWN: case MSG_CTP_SHORT_LEFT: case MSG_CTP_LONG: func_set_time_button_release_handle(); break; case MSG_CTP_SHORT_RIGHT: func_set_time_button_release_handle(); func_message(msg); break; case MSG_QDEC_BACKWARD: case MSG_QDEC_FORWARD: break; default: func_message(msg); break; } } //进入时间设置功能 static void func_set_time_enter(void) { func_cb.f_cb = func_zalloc(sizeof(f_set_time_t)); func_cb.frm_main = func_set_time_form_create(); f_set_time_t *f_set_time = (f_set_time_t*) func_cb.f_cb; memcpy(f_set_time->set_num_item, tbl_settime_set_num_item, sizeof(tbl_settime_set_num_item)); // f_set_time->size = gui_image_get_size(UI_BUF_ALARM_CLOCK_NUM_BIN); f_set_time->num_height = widget_text_get_height(); f_set_time->hour = SysVariable.Rtc.hour; f_set_time->min = SysVariable.Rtc.min; func_cb.enter_tick = tick_get(); } //退出时间设置功能 static void func_set_time_exit(void) { printf("%s\n",__func__); func_cb.last = FUNC_SET_TIME; compo_form_destroy(func_cb.frm_main); func_free(func_cb.f_cb); func_cb.frm_main = NULL; func_cb.f_cb = NULL; } //时间设置功能 void func_set_time(void) { printf("%s\n", __func__); func_set_time_enter(); while (func_cb.sta == FUNC_SET_TIME) { func_set_time_process(); func_set_time_message(msg_dequeue()); } func_set_time_exit(); }