void MCScreenDC::handle_touch(MCEventTouchPhase p_phase, void *p_touch, int32_t p_timestamp, int32_t p_x, int32_t p_y) { switch(p_phase) { case kMCEventTouchPhaseBegan: if (m_mouse_touch == nil) { m_mouse_touch = p_touch; handle_mouse_press(p_timestamp, 0, p_x, p_y, 0, kMCMousePressStateDown); } process_touch(kMCEventTouchPhaseBegan, p_touch, p_timestamp, p_x, p_y); p_phase = kMCEventTouchPhaseMoved; break; case kMCEventTouchPhaseEnded: if (m_mouse_touch == p_touch) { handle_mouse_press(p_timestamp, 0, p_x, p_y, 0, kMCMousePressStateUp); m_mouse_touch = nil; } break; case kMCEventTouchPhaseMoved: if (m_mouse_touch == p_touch) handle_mouse_move(p_timestamp, 0, p_x, p_y); process_touch(kMCEventTouchPhaseMoved, p_touch, p_timestamp, p_x, p_y); break; case kMCEventTouchPhaseCancelled: if (m_mouse_touch == p_touch) { handle_mouse_press(p_timestamp, 0, p_x, p_y, 0, kMCMousePressStateRelease); m_mouse_touch = nil; } break; default: break; } process_touch(p_phase, p_touch, p_timestamp, p_x, p_y); }
int input_callback(int fd, short revents, void*data) { struct input_event ev; int ret; ret = ev_get_input(fd, revents, &ev);//读取输入消息 if(ret) return -1; if (ev.type == 3) process_touch(ev.code, ev.value); return 0; }
void MCScreenDC::cancel_touches(void) { while(m_active_touches != nil) process_touch(kMCEventTouchPhaseCancelled, m_active_touches -> touch, m_active_touches -> timestamp, m_active_touches -> x, m_active_touches -> y); }