/********************************************************************* * * _OnTouch */ static void _OnTouch(SLIDER_Handle hObj, SLIDER_Obj* pObj, WM_MESSAGE*pMsg) { const GUI_PID_STATE* pState = (const GUI_PID_STATE*)pMsg->Data.p; if (pMsg->Data.p) { /* Something happened in our area (pressed or released) */ if (pState->Pressed) { int x0, xsize, x, Sel, Range; Range = (pObj->Max - pObj->Min); x0 = 1 + pObj->Width / 2; /* 1 pixel focus rectangle + width of actual slider */ x = (pObj->Widget.State & WIDGET_STATE_VERTICAL) ? pState->y : pState->x; x -= x0; xsize = WIDGET__GetWindowSizeX(hObj) - 2 * x0; if (x <= 0) { Sel = pObj->Min; } else if (x >= xsize) { Sel = pObj->Max; } else { int Div; Div = xsize ? xsize : 1; /* Make sure we do not divide by 0, even though xsize should never be 0 in this case anyhow */ Sel = pObj->Min + ((U32)Range * (U32)x + Div / 2) / Div; } if (WM_IsFocussable(hObj)) { WM_SetFocus(hObj); } WM_SetCapture(hObj, 1); SLIDER_SetValue(hObj, Sel); if ((pObj->Widget.State & SLIDER_STATE_PRESSED) == 0){ _SliderPressed(hObj, pObj); } } else { /* React only if button was pressed before ... avoid problems with moving / hiding windows above (such as dropdown) */ if (pObj->Widget.State & SLIDER_STATE_PRESSED) { _SliderReleased(hObj, pObj); } } } }
/********************************************************************* * * _OnTouch */ static void _OnTouch(SLIDER_Handle hObj, SLIDER_Obj* pObj, WM_MESSAGE*pMsg) { GUI_TOUCH_tState* pState = (GUI_TOUCH_tState*)pMsg->Data.p; if (pMsg->Data.p) { /* Something happened in our area (pressed or released) */ if (pState->Pressed) { int Sel; int Range = (pObj->Max - pObj->Min); int x0, xsize; int x; x0 = 1 + pObj->Width/2; /* 1 pixel focus rectangle + width of actual slider */ x = (pObj->Widget.State & WIDGET_STATE_VERTICAL) ? pState->y : pState->x; x -= x0; xsize = WIDGET__GetWindowSizeX(hObj) - 2 * x0; if (x <= 0) { Sel = pObj->Min; } else if (x >= xsize) { Sel = pObj->Max; } else { Sel = GUI__DivideRound(Range* x, xsize); Sel += pObj->Min; } WM_SetFocus(hObj); WM_SetCapture(hObj, 1); SLIDER_SetValue(hObj, Sel); } } }