#if 1 #include "include.h" #include "func.h" #include "app_variable.h" #include "m_sportInfo.h" #define TRACE_EN 0 #if TRACE_EN #define TRACE(...) printf(__VA_ARGS__) #else #define TRACE(...) #endif enum{ //组件ID COMPO_ID_BTN_DEL = 1, COMPO_ID_PIC_NONE_BG, COMPO_ID_CARD_UP_BK, COMPO_ID_CARD_UP_DISP, COMPO_ID_CARD_MID, COMPO_ID_CARD_DOWN_BK, COMPO_ID_CARD_DOWN_DISP, }; enum { //卡片位置 CARD_POS_UP, CARD_POS_MID, CARD_POS_DOWN, CARD_POS_OVER, }; enum { //操作卡片 CARD_DRAW_REFRESH, CARD_DRAW_MOVE_X, CARD_DRAW_MOVE_Y, }; #define CARD_RECT_COUNT_MAX 1 //卡片内支持的rect数量 #define CARD_ICON_COUNT_MAX 4 //卡片内支持的icon数量 #define CARD_TEXT_COUNT_MAX 4 //卡片内支持的text数量 #define AUTO_TICK_EXPIRE 10 //自动滚动单位时间 #define AUTO_MOVE_Y_EXPIRE 10 //自动滚动单位距离 #define MID_CARD_FUNC_INIT_INDEX 2 //中间卡片加载的堆栈记录索引(从1开始) #define AUTO_RET_ONESELF_FLAG 1 //滚动结束后是否回正 #define AUTO_ROLL_MOMENT 5 //滚动惯性动量 #define GRAY_LV(x) make_color(x, x, x) //生成灰度颜色值(0:黑 255:白) #define UP_GRAY_LV 0x24 #define MID_GRAY_LV 0x36 #define DOWN_GRAY_LV 0x48 //功能结构体 typedef struct f_smartstack_t_ { s32 last_move_y; s32 last_move_x; s32 auto_move_y; u32 last_tick; bool flag_drag; int8_t mid_index; uint8_t last_move_x_card_id; int8_t del_index; } f_smartstack_t; //卡片初始位置 const rect_t card_bg[4] = { {.x = GUI_SCREEN_CENTER_X, .y = 124, .wid = 176, .hei = 212}, {.x = GUI_SCREEN_CENTER_X, .y = 217, .wid = 218, .hei = 262}, {.x = GUI_SCREEN_CENTER_X, .y = 396, .wid = 256, .hei = 308}, {.x = GUI_SCREEN_CENTER_X, .y = 396 + 179, .wid = 256, .hei = 308}, }; //标题位置(icon+文字标题,以中间卡片初始位置为准) const rect_t card_icon = { .x = 90 - GUI_SCREEN_CENTER_X, .y = 127 - 217, .wid = 50, .hei = 50, }; //五张卡片的初始位置 const u8 card_item[] = {CARD_POS_UP, CARD_POS_UP, CARD_POS_MID, CARD_POS_DOWN, CARD_POS_OVER}; //活动数据详情页 static void func_smartstack_sub_activity(compo_cardbox_t *cardbox, u8 icon_offset, u8 text_offset) { u32 str_id[] = {STR_STEPS, STR_CALORIE, STR_DISTANCE}; for (u8 i = text_offset; i < sizeof(cardbox->text) / sizeof(cardbox->text[0]); i++) { if ((i - text_offset) < (sizeof(str_id) / sizeof(str_id[0]))) { char buf[16] = {0}; snprintf(buf, sizeof(buf), "%s:99999", i18n[str_id[i - text_offset]]); compo_cardbox_text_set(cardbox, i, buf); compo_cardbox_text_set_autosize(cardbox, i, true); compo_cardbox_text_set_location(cardbox, i, 0, card_icon.y + card_icon.hei * i, 0, 0); compo_cardbox_text_set_visible(cardbox, i, true); } } } //心率数据详情页 static void func_smartstack_sub_heart(compo_cardbox_t *cardbox, u8 icon_offset, u8 text_offset) { //hr text char buf[16] = {0}; snprintf(buf, sizeof(buf), "-- 次/分"); compo_cardbox_text_set(cardbox, text_offset, buf); compo_cardbox_text_set_autosize(cardbox, text_offset, true); compo_cardbox_text_set_location(cardbox, text_offset, card_icon.x + card_icon.wid / 2, card_icon.y + card_icon.hei * text_offset, 0, 0); compo_cardbox_text_set_visible(cardbox, text_offset, true); } //睡眠数据详情页 static void func_smartstack_sub_sleep(compo_cardbox_t *cardbox, u8 icon_offset, u8 text_offset) { u8 i; u32 pic[] = {UI_BUF_SLEEP_ICON_LIGHT_BIN, UI_BUF_SLEEP_ICON_DEEP_BIN}; //icon for (i = 0; i < 2; i++) { compo_cardbox_icon_set(cardbox, i + icon_offset, pic[i]); compo_cardbox_icon_set_location(cardbox, i + icon_offset, card_icon.x, card_icon.y + card_icon.hei * (i + icon_offset - 1), card_icon.wid, card_icon.hei); compo_cardbox_icon_set_visible(cardbox, i + icon_offset, true); char buf[16] = {0}; snprintf(buf, sizeof(buf), "7%s30%s", i18n[STR_HOUR], i18n[STR_MIN]); compo_cardbox_text_set(cardbox, i + text_offset, buf); compo_cardbox_text_set_autosize(cardbox, i + text_offset, true); area_t area = compo_cardbox_text_get_area(cardbox, 0); compo_cardbox_text_set_location(cardbox, i + text_offset, card_icon.x + card_icon.wid + area.wid / 2, card_icon.y + card_icon.hei * (i + text_offset), 0, 0); compo_cardbox_text_set_visible(cardbox, i + text_offset, true); } } //血氧数据详情页 static void func_smartstack_sub_spo2(compo_cardbox_t *cardbox, u8 icon_offset, u8 text_offset) { char buf[16] = {0}; snprintf(buf, sizeof(buf), "%s", i18n[STR_MEASURING]); compo_cardbox_text_set(cardbox, text_offset, buf); compo_cardbox_text_set_autosize(cardbox, text_offset, true); compo_cardbox_text_set_location(cardbox, text_offset, card_icon.x + card_icon.wid, card_icon.y + card_icon.hei * text_offset, 0, 0); compo_cardbox_text_set_visible(cardbox, text_offset, true); } //音乐详情页 static void func_smartstack_sub_music(compo_cardbox_t *cardbox, u8 icon_offset, u8 text_offset) { if (icon_offset < CARD_ICON_COUNT_MAX) { compo_cardbox_icon_set(cardbox, icon_offset, UI_BUF_MUSIC_PREV_CLICK_BIN); compo_cardbox_icon_set_location(cardbox, icon_offset, card_icon.x, card_icon.y + card_icon.hei, card_icon.wid, card_icon.hei); compo_cardbox_icon_set_visible(cardbox, icon_offset, true); } icon_offset ++; if (icon_offset < CARD_ICON_COUNT_MAX) { compo_cardbox_icon_set(cardbox, icon_offset, UI_BUF_MUSIC_PAUSE_BIN); compo_cardbox_icon_set_location(cardbox, icon_offset, 0, card_icon.y + card_icon.hei, card_icon.wid + 10, card_icon.hei + 10); compo_cardbox_icon_set_visible(cardbox, icon_offset, true); } icon_offset ++; if (icon_offset < CARD_ICON_COUNT_MAX) { compo_cardbox_icon_set(cardbox, icon_offset, UI_BUF_MUSIC_NEXT_CLICK_BIN); compo_cardbox_icon_set_location(cardbox, icon_offset, abs_s(card_icon.x), card_icon.y + card_icon.hei, card_icon.wid, card_icon.hei); compo_cardbox_icon_set_visible(cardbox, icon_offset, true); } icon_offset ++; } //刷新卡片内容(以中间卡片为初始坐标和大小,移动过程中page做整体缩放) static void func_smartstack_card_content_refresh(compo_cardbox_t *cardbox, u8 pos, u8 func_sta) { u8 i; compo_cardbox_set_visible(cardbox, true); //矩形框颜色 if (CARD_POS_UP == pos) { compo_cardbox_rect_set_color(cardbox, 0, GRAY_LV(UP_GRAY_LV)); } else if (CARD_POS_MID == pos) { compo_cardbox_rect_set_color(cardbox, 0, GRAY_LV(MID_GRAY_LV)); } else { compo_cardbox_rect_set_color(cardbox, 0, GRAY_LV(DOWN_GRAY_LV)); } //设置标题icon compo_cardbox_icon_set(cardbox, 1, func_get_icon_addr(func_sta)); compo_cardbox_icon_set_location(cardbox, 1, card_icon.x, card_icon.y, card_icon.wid, card_icon.hei); //设置标题 compo_cardbox_text_set(cardbox, 0, i18n[func_get_str_idx(func_sta)]); compo_cardbox_text_set_autosize(cardbox, 0, true); area_t area = compo_cardbox_text_get_area(cardbox, 0); compo_cardbox_text_set_location(cardbox, 0, card_icon.x + card_icon.wid / 2 + area.wid / 2 + 10, card_icon.y + 5, 0, 0); //设置card compo_cardbox_set_location(cardbox, card_bg[pos].x, card_bg[pos].y, card_bg[pos].wid, card_bg[pos].hei); //刷新内容 u8 icon_offset = 2; u8 text_offset = 1; for (i = icon_offset; i < CARD_ICON_COUNT_MAX; i++) { compo_cardbox_icon_set_visible(cardbox, i, false); } for (i = text_offset; i < CARD_TEXT_COUNT_MAX; i++) { compo_cardbox_text_set_visible(cardbox, i, false); } switch (func_sta) { case FUNC_CLOCK:break; case FUNC_ACTIVITY: func_smartstack_sub_activity(cardbox, icon_offset, text_offset); break; case FUNC_HEARTRATE: func_smartstack_sub_heart(cardbox, icon_offset, text_offset); break; case FUNC_SLEEP: func_smartstack_sub_sleep(cardbox, icon_offset, text_offset); break; case FUNC_BLOOD_OXYGEN: func_smartstack_sub_spo2(cardbox, icon_offset, text_offset); break; case FUNC_BT: func_smartstack_sub_music(cardbox, icon_offset, text_offset); break; case FUNC_CALCULATOR: break; case FUNC_GAME: break; } } //创建堆栈界面 compo_form_t * func_smartstack_form_create(void) { compo_cardbox_t *cardbox; u8 total_cnt = latest_task_count(); int8_t func_start = total_cnt - MID_CARD_FUNC_INIT_INDEX - 2; //新建窗体 compo_form_t *frm = compo_form_create(true); //无堆栈记录 compo_picturebox_t *pic = compo_picturebox_create(frm, UI_BUF_SMARTSTACK_NULL_BIN); compo_setid(pic, COMPO_ID_PIC_NONE_BG); compo_picturebox_set_pos(pic, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y); if (total_cnt) { compo_picturebox_set_visible(pic, false); } //创建卡片和设置背景框 for (u8 i = 0; i < sizeof(card_item) / sizeof(card_item[0]); i++) { cardbox = compo_cardbox_create(frm, CARD_RECT_COUNT_MAX, CARD_ICON_COUNT_MAX, CARD_TEXT_COUNT_MAX, card_bg[CARD_POS_MID].wid, card_bg[CARD_POS_MID].hei); compo_setid(cardbox, COMPO_ID_CARD_UP_BK + i); compo_cardbox_rect_set_location(cardbox, 0, 0, 0, card_bg[CARD_POS_MID].wid, card_bg[CARD_POS_MID].hei, 30); compo_cardbox_set_location(cardbox, card_bg[card_item[i]].x, card_bg[card_item[i]].y, card_bg[card_item[i]].wid, card_bg[card_item[i]].hei); if ((func_start + i) > 0 && (func_start + i) < total_cnt) { func_smartstack_card_content_refresh(cardbox, card_item[i], latest_task_get(func_start + i)); } if (!total_cnt) { compo_cardbox_set_visible(cardbox, false); } } //删除按钮 compo_button_t *btn = compo_button_create_by_image(frm, UI_BUF_SMARTSTACK_DELET_BIN); compo_setid(btn, COMPO_ID_BTN_DEL); compo_button_set_visible(btn, false); return frm; } //卡片大小和位置为线性关系 static rect_t func_smartstack_get_size_by_y(s16 y, u8 *color_level) { rect_t rect = {0}; *color_level = UP_GRAY_LV; rect.y = y; rect.x = GUI_SCREEN_CENTER_X; if (y <= card_bg[CARD_POS_UP].y) { rect = card_bg[CARD_POS_UP]; } else if (y <= card_bg[CARD_POS_MID].y) { rect.wid = card_bg[CARD_POS_UP].wid + ((y - card_bg[CARD_POS_UP].y) / 2); //此处2为增量差值倍数,下同 if (rect.wid > card_bg[CARD_POS_MID].wid) { rect.wid = card_bg[CARD_POS_MID].wid; } rect.hei = card_bg[CARD_POS_UP].hei + ((y - card_bg[CARD_POS_UP].y) / 2) + 4; //此处4为增量差值倍数无法整除情况下的增益,下同 if (rect.hei > card_bg[CARD_POS_MID].hei) { rect.hei = card_bg[CARD_POS_MID].hei; } *color_level = UP_GRAY_LV + (y - card_bg[CARD_POS_UP].y) / 5; if (*color_level > MID_GRAY_LV) { *color_level = MID_GRAY_LV; } } else if (y <= card_bg[CARD_POS_DOWN].y) { rect.wid = card_bg[CARD_POS_MID].wid + ((y - card_bg[CARD_POS_MID].y) / 4); if (rect.wid > card_bg[CARD_POS_DOWN].wid) { rect.wid = card_bg[CARD_POS_DOWN].wid; } rect.hei = card_bg[CARD_POS_MID].hei + ((y - card_bg[CARD_POS_MID].y) / 2) + 2; if (rect.hei > card_bg[CARD_POS_DOWN].hei) { rect.hei = card_bg[CARD_POS_DOWN].hei; } *color_level = MID_GRAY_LV + (y - card_bg[CARD_POS_MID].y) / 9; if (*color_level > DOWN_GRAY_LV) { *color_level = DOWN_GRAY_LV; } } else { rect.wid = card_bg[CARD_POS_DOWN].wid + ((y - card_bg[CARD_POS_DOWN].y) / 4); if (rect.wid > GUI_SCREEN_WIDTH) { rect.wid = GUI_SCREEN_WIDTH; } rect.hei = card_bg[CARD_POS_DOWN].hei + ((y - card_bg[CARD_POS_DOWN].y) / 2); if (rect.hei > GUI_SCREEN_HEIGHT) { rect.hei = GUI_SCREEN_HEIGHT; } *color_level = DOWN_GRAY_LV + (y - card_bg[CARD_POS_DOWN].y) / 9; } return rect; } //上下移动处理 static void func_smartstack_move_y_handle(compo_cardbox_t *cardbox, s32 dy) { rect_t rect = compo_cardbox_get_location(cardbox); u8 color_level; rect.y += dy; if (rect.y < card_bg[CARD_POS_UP].y) { rect.y = card_bg[CARD_POS_UP].y; } rect = func_smartstack_get_size_by_y(rect.y, &color_level); compo_cardbox_rect_set_color(cardbox, 0, GRAY_LV(color_level)); compo_cardbox_set_location(cardbox, rect.x, rect.y, rect.wid, rect.hei); } //左右移动处理 static void func_smartstack_move_x_handle(s32 move) { u8 i; compo_cardbox_t *cardbox = NULL; f_smartstack_t *f_smartstack = (f_smartstack_t *)func_cb.f_cb; if (f_smartstack->last_move_x_card_id) { cardbox = compo_getobj_byid(f_smartstack->last_move_x_card_id); } else { u8 max_cnt = sizeof(card_item) / sizeof(card_item[0]); for (i = 0; i < max_cnt; i++) { cardbox = compo_getobj_byid(COMPO_ID_CARD_UP_BK + max_cnt - i - 1); //由于存在重叠,优先判断上面 if (!compo_cardbox_get_visible(cardbox)) { continue ; } rect_t rect = compo_cardbox_get_absolute(cardbox); point_t point = ctp_get_sxy(); if (abs_s(point.y - rect.y) * 2 <= rect.hei) { f_smartstack->last_move_x_card_id = COMPO_ID_CARD_UP_BK + max_cnt - i - 1; f_smartstack->del_index = f_smartstack->mid_index + (2 - i); break; } else { cardbox = NULL; } } } if (cardbox) { rect_t rect = compo_cardbox_get_location(cardbox); s16 last_x = rect.x; u8 color_level; rect = func_smartstack_get_size_by_y(rect.y, &color_level); last_x += move; rect.x = last_x; if (rect.x > GUI_SCREEN_CENTER_X) { rect.x = GUI_SCREEN_CENTER_X; } if (rect.x < (card_bg[CARD_POS_UP].x - card_bg[CARD_POS_UP].wid / 2)) { rect.x = card_bg[CARD_POS_UP].x - card_bg[CARD_POS_UP].wid / 2; } compo_cardbox_set_location(cardbox, rect.x, rect.y, rect.wid, rect.hei); //del btn compo_button_t *btn = compo_getobj_byid(COMPO_ID_BTN_DEL); if (rect.x >= GUI_SCREEN_CENTER_X) { compo_button_set_visible(btn, false); } else { compo_button_set_visible(btn, true); compo_button_set_pos(btn, rect.x + rect.wid / 2, rect.y - rect.hei / 2); } } } //刷新所有卡片 static void func_smartstack_card_refresh(u8 draw, s32 move) { f_smartstack_t *f_smartstack = (f_smartstack_t *)func_cb.f_cb; int8_t start_index = f_smartstack->mid_index - 2; int8_t end_index = f_smartstack->mid_index + 2; compo_cardbox_t *cardbox_mid = compo_getobj_byid(COMPO_ID_CARD_MID); rect_t mid_rect = compo_cardbox_get_location(cardbox_mid); bool refresh_flag = false; u8 total_cnt = latest_task_count(); if (CARD_DRAW_MOVE_X == draw) { func_smartstack_move_x_handle(move); return ; } if (CARD_DRAW_MOVE_Y == draw) { if (f_smartstack->mid_index >= (total_cnt - 1) && move < 0) { return ; } if (f_smartstack->mid_index == 0 && move > 0) { return ; } } for (int8_t i = start_index; i <= end_index; i++) { compo_cardbox_t *cardbox = compo_getobj_byid(COMPO_ID_CARD_UP_BK + i - start_index); if (NULL == cardbox) { continue ; } if (i < 0) { compo_cardbox_set_visible(cardbox, false); continue ; } else if (i >= total_cnt) { compo_cardbox_set_visible(cardbox, false); break; } else { switch (draw) { case CARD_DRAW_REFRESH: { func_smartstack_card_content_refresh(cardbox, card_item[i - start_index], latest_task_get(i)); }break; case CARD_DRAW_MOVE_Y: { if (i == start_index) { continue ; } else if (i < f_smartstack->mid_index) { if (mid_rect.y < card_bg[CARD_POS_MID].y) { continue ; } } else { rect_t cur_rect = compo_cardbox_get_location(cardbox); if (cur_rect.y < card_bg[CARD_POS_DOWN].y) { move *= 2; } if (!refresh_flag && i == f_smartstack->mid_index) { if (mid_rect.y > card_bg[CARD_POS_UP].y && (mid_rect.y + move) <= card_bg[CARD_POS_UP].y) { f_smartstack->mid_index ++; refresh_flag = true; } else if (mid_rect.y < card_bg[CARD_POS_DOWN].y && (mid_rect.y + move) >= card_bg[CARD_POS_DOWN].y) { f_smartstack->mid_index --; refresh_flag = true; } } } func_smartstack_move_y_handle(cardbox, move); }break; default: break; } } } if (refresh_flag) { func_smartstack_card_refresh(CARD_DRAW_REFRESH, 0); return ; } } //移动 static void func_smartstack_move_process(void) { f_smartstack_t *f_smartstack = (f_smartstack_t *)func_cb.f_cb; if (f_smartstack->flag_drag) { s32 dx, dy; bool move_y = false; f_smartstack->flag_drag = ctp_get_dxy(&dx, &dy); //拖拽判断 if (f_smartstack->flag_drag) { //左右上下滑动的判断 if (f_smartstack->last_move_y) { move_y = true; } else if (f_smartstack->last_move_x) { move_y = false; } else { if (abs_s(dx) < abs_s(dy)) { move_y = true; } if (dx > 0) { move_y = true; } } if (f_smartstack->last_move_x_card_id) { move_y = false; } //上下滑动处理 if (move_y && dy != f_smartstack->last_move_y) { func_smartstack_card_refresh(CARD_DRAW_MOVE_Y, dy - f_smartstack->last_move_y); f_smartstack->auto_move_y = dy - f_smartstack->last_move_y; f_smartstack->last_move_y = dy; } //左右滑动处理 if (!move_y && dx != f_smartstack->last_move_x) { func_smartstack_card_refresh(CARD_DRAW_MOVE_X, dx - f_smartstack->last_move_x); f_smartstack->last_move_x = dx; } } else { //release f_smartstack->flag_drag = false; f_smartstack->last_move_y = 0; f_smartstack->last_move_x = 0; if (f_smartstack->last_move_x_card_id) { compo_cardbox_t *cardbox = compo_getobj_byid(f_smartstack->last_move_x_card_id); rect_t rect = compo_cardbox_get_location(cardbox); if (rect.x == GUI_SCREEN_CENTER_X) { f_smartstack->last_move_x_card_id = 0; } } f_smartstack->auto_move_y *= AUTO_ROLL_MOMENT; } } else if (f_smartstack->auto_move_y) { if (tick_check_expire(f_smartstack->last_tick, AUTO_TICK_EXPIRE)) { s32 dy = 0; f_smartstack->last_tick = tick_get(); if (f_smartstack->auto_move_y > 0) { dy = f_smartstack->auto_move_y > AUTO_MOVE_Y_EXPIRE ? AUTO_MOVE_Y_EXPIRE : f_smartstack->auto_move_y; } else { dy = f_smartstack->auto_move_y < -AUTO_MOVE_Y_EXPIRE / 2 ? -AUTO_MOVE_Y_EXPIRE / 2 : f_smartstack->auto_move_y; } f_smartstack->auto_move_y -= dy; func_smartstack_card_refresh(CARD_DRAW_MOVE_Y, dy); //滚动结束进行回正 #if AUTO_RET_ONESELF_FLAG if (!f_smartstack->auto_move_y) { func_smartstack_card_refresh(CARD_DRAW_REFRESH, 0); } #endif } } } //智能堆栈主要事件流程处理 static void func_smartstack_process(void) { func_smartstack_move_process(); func_process(); } //单击 static void func_smartstack_click_handler(void) { u8 i; compo_cardbox_t *cardbox; f_smartstack_t *f_smartstack = (f_smartstack_t *)func_cb.f_cb; u8 max_cnt = sizeof(card_item) / sizeof(card_item[0]); u8 total_cnt = latest_task_count(); //del btn if (f_smartstack->last_move_x_card_id) { if(COMPO_ID_BTN_DEL == compo_get_button_id()) { if (f_smartstack->del_index < total_cnt) { compo_button_t *btn = compo_getobj_byid(COMPO_ID_BTN_DEL); compo_button_set_visible(btn, false); latest_task_del(f_smartstack->del_index); if (latest_task_count()) { f_smartstack->mid_index --; if (f_smartstack->mid_index < 0) { f_smartstack->mid_index = 0; } func_smartstack_card_refresh(CARD_DRAW_REFRESH, 0); } else { for (i = 0; i < sizeof(card_item) / sizeof(card_item[0]); i++) { cardbox = compo_getobj_byid(COMPO_ID_CARD_UP_BK + i); compo_cardbox_set_visible(cardbox, false); } compo_picturebox_t *pic = compo_getobj_byid(COMPO_ID_PIC_NONE_BG); compo_picturebox_set_visible(pic, true); } f_smartstack->del_index = 0xff; f_smartstack->last_move_x_card_id = 0; } } return ; } //card btn for (i = 0; i < max_cnt; i++) { cardbox = compo_getobj_byid(COMPO_ID_CARD_UP_BK + max_cnt - i - 1); if (!compo_cardbox_get_visible(cardbox)) { continue ; } if (compo_cardbox_btn_is(cardbox, ctp_get_sxy())) { int8_t index = f_smartstack->mid_index + (2 - i); if (index < total_cnt) { func_switch_to(latest_task_get(index), FUNC_SWITCH_ZOOM_FADE_ENTER | FUNC_SWITCH_AUTO); } break; } } } //功能消息处理 static void func_smartstack_message(size_msg_t msg) { f_smartstack_t *f_smartstack = (f_smartstack_t *)func_cb.f_cb; switch (msg) { case MSG_CTP_TOUCH: f_smartstack->flag_drag = true; break; case MSG_CTP_CLICK: func_smartstack_click_handler(); break; case MSG_CTP_SHORT_UP: case MSG_CTP_SHORT_DOWN: break; case MSG_CTP_SHORT_LEFT: case MSG_CTP_LONG: break; case MSG_CTP_SHORT_RIGHT: if (f_smartstack->last_move_x_card_id) { break; } func_backing_to(); //右滑缓慢退出任务 break; case MSG_QDEC_FORWARD: f_smartstack->auto_move_y += (card_bg[CARD_POS_UP].y - card_bg[CARD_POS_MID].y); f_smartstack->last_tick = tick_get(); break; case MSG_QDEC_BACKWARD: f_smartstack->auto_move_y += (card_bg[CARD_POS_MID].y - card_bg[CARD_POS_UP].y); f_smartstack->last_tick = tick_get(); break; case KL_BACK: break; default: func_message(msg); break; } } //智能堆栈进入处理 static void func_smartstack_enter(void) { func_cb.f_cb = func_zalloc(sizeof(f_smartstack_t)); func_cb.frm_main = func_smartstack_form_create(); f_smartstack_t *f_smartstack = (f_smartstack_t *)func_cb.f_cb; u8 total_cnt = latest_task_count(); if (total_cnt == 1) { f_smartstack->mid_index = 0; } else { f_smartstack->mid_index = total_cnt - MID_CARD_FUNC_INIT_INDEX; } func_smartstack_card_refresh(CARD_DRAW_REFRESH, 0); } //智能堆栈退出处理 static void func_smartstack_exit(void) { func_cb.last = FUNC_SMARTSTACK; } //智能堆栈 void func_smartstack(void) { printf("%s\n", __func__); func_smartstack_enter(); while (func_cb.sta == FUNC_SMARTSTACK) { func_smartstack_process(); func_smartstack_message(msg_dequeue()); } func_smartstack_exit(); } #endif