예제 #1
0
파일: SLIDER.c 프로젝트: Jaly314/CH-K-Lib
/*********************************************************************
*
*       _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);
      }
    }
  }
}
예제 #2
0
/*********************************************************************
*
*       _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);
    } 
  }
}