/********************************************************************* * * _TouchTask * * Function description: * Handle touch screen input * */ static U32 _TouchTask(T_uezTask aMyTask, void *aParameters) { T_uezInputEvent inputEvent; GUI_PID_STATE State = { 0 }; (void)aMyTask; (void)aParameters; while (1) { if (_RequestExit == 1) { _RequestExit = 0; break; } // // Wait for 100ms for a new touch event to occur. Else skip over to give the // task a chance to respond to an exit request. // if (UEZQueueReceive(_hTSQueue, &inputEvent, 100) == UEZ_ERROR_NONE) { if (inputEvent.iEvent.iXY.iAction == XY_ACTION_PRESS_AND_HOLD) { State.x = inputEvent.iEvent.iXY.iX; State.y = inputEvent.iEvent.iXY.iY; State.Pressed = 1; } else { State.x = -1; State.y = -1; State.Pressed = 0; } GUI_PID_StoreState(&State); } } return UEZ_ERROR_NONE; }
/********************************************************************* * * _PlayNextEvent */ static void _PlayNextEvent(WM_HWIN hWin) { static PID_EVENT * pEvent; static int iList; static int iEntry; GUI_PID_STATE State = { 0 }; if (pEvent) { GUI_PID_GetState(&State); if ((State.Layer == LAYER) && State.Pressed && ((State.x != pEvent->x) || (State.y != pEvent->y))) { WM_HWIN hItem; hItem = WM_GetDialogItem(hWin, GUI_ID_CHECK0); CHECKBOX_SetState(hItem, 0); } } pEvent = _aEventList[iList].pEvent + iEntry; State.x = pEvent->x; State.y = pEvent->y; State.Pressed = pEvent->Pressed; State.Layer = LAYER; GUI_PID_StoreState(&State); GUI_Delay(pEvent->Duration); if (++iEntry == _aEventList[iList].NumEvents) { iEntry = 0; iList++; if (iList == GUI_COUNTOF(_aEventList)) { iList = 0; } } }
/********************************************************************* * * GUI_MOUSE_StoreState */ void GUI_MOUSE_StoreState(const GUI_PID_STATE *pState) { if (memcmp(pState, &_State, sizeof(_State))) { _State = *pState; GUI_PID_StoreState(pState); } }
//............................................................................ QState Table::ready(Table *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { l_cb_WM_HBKWIN = WM_SetCallback(WM_HBKWIN, &onMainWndGUI); // create the diaglog box and return right away... l_hDlg = GUI_CreateDialogBox(l_dialog, GUI_COUNTOF(l_dialog), &onDialogGUI, 0, 0, 0); return Q_HANDLED(); } case Q_EXIT_SIG: { GUI_EndDialog(l_hDlg, 0); WM_SetCallback(WM_HBKWIN, l_cb_WM_HBKWIN); return Q_HANDLED(); } case Q_INIT_SIG: { return Q_TRAN(&Table::serving); } case MOUSE_CHANGE_SIG: { // mouse change (move or click) event GUI_PID_STATE mouse; mouse.x = ((MouseEvt const *)e)->xPos; mouse.y = ((MouseEvt const *)e)->yPos; mouse.Pressed = ((MouseEvt const *)e)->buttonStates; GUI_PID_StoreState(&mouse); // update the state of the Mouse PID WM_Exec(); // update the screen and invoke WM callbacks return Q_HANDLED(); } // ... hardkey events ... case KEY_LEFT_REL_SIG: { // hardkey LEFT released WM_MoveWindow(l_hDlg, -5, 0); WM_Exec(); // update the screen and invoke WM callbacks return Q_HANDLED(); } case KEY_RIGHT_REL_SIG: { // hardkey RIGHT released WM_MoveWindow(l_hDlg, 5, 0); WM_Exec(); // update the screen and invoke WM callbacks return Q_HANDLED(); } case KEY_DOWN_REL_SIG: { // hardkey DOWN released WM_MoveWindow(l_hDlg, 0, 5); WM_Exec(); // update the screen and invoke WM callbacks return Q_HANDLED(); } case KEY_UP_REL_SIG: { // hardkey UP released WM_MoveWindow(l_hDlg, 0, -5); WM_Exec(); // update the screen and invoke WM callbacks return Q_HANDLED(); } } return Q_SUPER(&QHsm::top); }