亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wmtouch.c

?? ucCos移植到廣州友善nano2410
?? C
字號:
/*
*********************************************************************************************************
*                                                uC/GUI
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : WMTouch.c
Purpose     : Windows manager, touch support
----------------------------------------------------------------------
*/

#include <stddef.h>           /* needed for definition of NULL */
#include "WM_Intern.h"
#include "GUIDebug.h"

#if (GUI_WINSUPPORT)

/*********************************************************************
*
*          Public data
*
**********************************************************************
*/

WM_CRITICAL_HANDLE  WM__CHWinModal;
WM_CRITICAL_HANDLE  WM__CHWinLast;

/*********************************************************************
*
*          Modul internal routines
*
**********************************************************************
*/
/*********************************************************************
*
*       WM__IsInModalArea
*/
int WM__IsInModalArea(WM_HWIN hWin) {
  if ((WM__CHWinModal.hWin == 0) || WM__IsAncestor(hWin, WM__CHWinModal.hWin) || (hWin == WM__CHWinModal.hWin)) {
    return 1;
  }
  return 0;
}

/*********************************************************************
*
*       WM__SendPIDMessage
*
* Purpose:
*   Sends a PID -type message to the affected window.
*   All ancestors are notified of this by sending a WM_TOUCH_CHILD
*   message.
*
*/
void WM__SendPIDMessage(WM_HWIN hWin, WM_MESSAGE* pMsg) {
  WM_MESSAGE Msg;
  /* Send message to the affected window */
  Msg = *pMsg;                 /* Save message as it may be modified in callback (as return value) */
  WM__SendMessageIfEnabled(hWin, &Msg);
  /* Send notification to all ancestors.
     We need to check if the window which has received the last message still exists,
     since it may have deleted itself and its parent as result of the message.
  */
  Msg.hWinSrc = hWin;
  Msg.MsgId   = WM_TOUCH_CHILD;
  while (WM_IsWindow(hWin)) {
    hWin = WM_GetParent(hWin);
    if (hWin) {
      Msg.Data.p  = pMsg;            /* Needs to be set for each window, as callback is allowed to modify it */
      WM__SendMessageIfEnabled(hWin, &Msg);    /* Send message to the ancestors */
    }
  }
}

/*********************************************************************
*
*       WM__SendTouchMessage
*/
void WM__SendTouchMessage(WM_HWIN hWin, WM_MESSAGE* pMsg) {
  GUI_PID_STATE* pState;
  pState     = (GUI_PID_STATE*)pMsg->Data.p;
  if (pState) {
    WM_Obj* pWin;
    pWin       = WM_H2P(hWin);
    pState->x -= pWin->Rect.x0;
    pState->y -= pWin->Rect.y0;
  }
  WM__SendPIDMessage(hWin, pMsg);
}

/*********************************************************************
*
*          Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _Screen2Win
*/
static WM_HWIN _Screen2Win(GUI_PID_STATE* pState) {
  if (WM__hCapture == 0) {
    return WM_Screen2hWin(pState->x, pState->y);
  } 
  return WM__hCapture;
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       WM_HandlePID       
*
* Polls the touch screen. If something has changed,
* sends a message to the concerned window.
*
* Return value:
*   0 if nothing has been done
*   1 if touch message has been sent
*/
int WM_HandlePID(void) {
  int r = 0;
  WM_MESSAGE Msg;
  WM_CRITICAL_HANDLE CHWin;
  GUI_PID_STATE State, StateNew;
  GUI_PID_GetState(&StateNew);
  WM_LOCK();
  WM__AddCriticalHandle(&CHWin);
  if ((WM_PID__StateLast.x != StateNew.x) || (WM_PID__StateLast.y != StateNew.y) || (WM_PID__StateLast.Pressed != StateNew.Pressed)) {
    #if GUI_SUPPORT_CURSOR
      GUI_CURSOR_SetPosition(StateNew.x, StateNew.y);
    #endif
    CHWin.hWin = _Screen2Win(&StateNew);
    if (WM__IsInModalArea(CHWin.hWin)) {
      /*
       * Send WM_PID_STATE_CHANGED message if state has changed (just pressed or just released)
       */
      if ((WM_PID__StateLast.Pressed != StateNew.Pressed) && CHWin.hWin) {
        WM_PID_STATE_CHANGED_INFO Info;
        WM_Obj* pWin;
        pWin = WM_H2P(CHWin.hWin);
        Info.State     = StateNew.Pressed;
        Info.StatePrev = WM_PID__StateLast.Pressed;
        Info.x         = StateNew.x - pWin->Rect.x0;
        Info.y         = StateNew.y - pWin->Rect.y0;
        Msg.Data.p = &Info;
        Msg.MsgId  = WM_PID_STATE_CHANGED;
        WM__SendMessageIfEnabled(CHWin.hWin, &Msg);
      }
      /*
       * Send WM_TOUCH message(s)
       * Note that we may have to send 2 touch messages.
       */
      if (WM_PID__StateLast.Pressed | StateNew.Pressed) {    /* Only if pressed or just released */
        Msg.MsgId = WM_TOUCH;
        r = 1;
        /*
         * Tell window if it is no longer pressed
         * This happens for 2 possible reasons:
         * a) PID is released
         * b) PID is moved out
         */
        if (WM__CHWinLast.hWin != CHWin.hWin) {
          if (WM__CHWinLast.hWin != 0) {
            if (StateNew.Pressed) {
              /* Moved out -> no longer in this window
               * Send a NULL pointer as data
               */
              Msg.Data.p = NULL;
            } else {
              /* Last window needs to know that it has been "Released"
               * Send last coordinates 
               */
              State.x       = WM_PID__StateLast.x;
              State.y       = WM_PID__StateLast.y;
              State.Pressed = 0;
              Msg.Data.p = (void*)&State;
            }
            GUI_DEBUG_LOG1 ("\nSending WM_Touch to LastWindow %d (out of area)", WM__CHWinLast.hWin);
            WM__SendTouchMessage(WM__CHWinLast.hWin, &Msg);
            WM__CHWinLast.hWin = 0;
          }
        }
        /* Sending WM_Touch to current window */
        if (CHWin.hWin) {
          /* convert screen into window coordinates */
          State = StateNew;
          /* Remember window */
          if (State.Pressed) {
            WM__CHWinLast.hWin = CHWin.hWin;
          } else {
            /* Handle automatic capture release */
            if (WM__CaptureReleaseAuto) {
              WM_ReleaseCapture();
            }
            WM__CHWinLast.hWin = 0;
          }
          Msg.Data.p = (void*)&State;
          WM__SendTouchMessage(CHWin.hWin, &Msg);
        }
      }
      /*
       * Send WM_MOUSEOVER message
       */
      #if GUI_SUPPORT_MOUSE
      else {
        /* Send WM_MOUSEOVER Message */
        if (CHWin.hWin) {
          /* Do not send messages to disabled windows */
          if (WM__IsEnabled(CHWin.hWin)) {
            State      = StateNew;
            Msg.MsgId  = WM_MOUSEOVER;
            Msg.Data.p = (void*)&State;
            WM__SendTouchMessage(CHWin.hWin, &Msg);
          }
        }
      }
      #endif
    }
    /* Store the new state */
    WM_PID__StateLast = StateNew;
  }
  WM__RemoveCriticalHandle(&CHWin);
  WM_UNLOCK();
  return r;
}

#else
  void WM_Touch_c(void) {} /* avoid empty object files */
#endif  /* (GUI_WINSUPPORT & GUI_SUPPORT_TOUCH) */

/*************************** End of file ****************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产综合久久久久久久久久久久| 日本不卡高清视频| 欧美片网站yy| 成人黄页毛片网站| 久久国产乱子精品免费女| 亚洲一级在线观看| 一区二区三区在线观看网站| 成人欧美一区二区三区1314 | 国模娜娜一区二区三区| 91视频你懂的| 色又黄又爽网站www久久| jiyouzz国产精品久久| av不卡在线播放| 精品国产伦理网| 久久精品这里都是精品| 久久精品亚洲一区二区三区浴池| 婷婷丁香久久五月婷婷| 日韩激情一区二区| 国产美女视频一区| 成人高清伦理免费影院在线观看| 欧美一卡2卡3卡4卡| 久久综合色播五月| 成人免费一区二区三区视频 | 奇米影视一区二区三区| 日本韩国欧美一区| 91精品一区二区三区久久久久久| 日韩亚洲欧美在线观看| 久久综合九色综合欧美亚洲| 日韩成人免费电影| 成人毛片在线观看| 欧美在线观看视频在线| 欧美一区二区在线播放| 日日夜夜免费精品| 欧美片在线播放| 奇米精品一区二区三区四区 | 免费在线观看精品| 91精品福利在线一区二区三区 | 国产日韩精品一区| 一区二区在线观看视频| 美女在线观看视频一区二区| 粉嫩久久99精品久久久久久夜| 色综合久久久久| 亚洲精品伦理在线| 欧美日韩在线一区二区| 久久在线观看免费| 国产一区二区三区精品视频| 国产日韩欧美电影| av电影一区二区| 亚洲资源在线观看| 欧美一级艳片视频免费观看| 麻豆精品一二三| 久久久久久久久久久久久夜| 亚洲高清久久久| 暴力调教一区二区三区| 最新高清无码专区| 国产成人一区二区精品非洲| 精品视频在线看| 免费高清在线视频一区·| 2024国产精品| 91香蕉视频污在线| 午夜婷婷国产麻豆精品| 精品国产不卡一区二区三区| 粉嫩av亚洲一区二区图片| 日韩理论电影院| 在线成人午夜影院| 亚洲精选视频在线| 欧美一二三四区在线| 国产麻豆一精品一av一免费 | 欧美无人高清视频在线观看| 欧美激情综合五月色丁香 | av电影在线不卡| 日韩在线观看一区二区| 国产日韩欧美不卡在线| 欧美军同video69gay| 黑人巨大精品欧美一区| 亚洲精品日日夜夜| 欧美刺激午夜性久久久久久久| 午夜精品国产更新| 国产女人18毛片水真多成人如厕| 在线观看日韩高清av| 国产精品一区专区| 国产亚洲精品福利| 欧美片网站yy| 日本精品裸体写真集在线观看| 蜜臀av国产精品久久久久| 亚洲天堂中文字幕| 国产欧美精品区一区二区三区| 666欧美在线视频| 色综合久久九月婷婷色综合| 国产大陆亚洲精品国产| 人人超碰91尤物精品国产| 亚洲三级在线观看| 久久久久久97三级| 日韩欧美不卡在线观看视频| 国产在线精品一区二区| 天天操天天色综合| 一区二区三区四区在线免费观看| 久久久久成人黄色影片| 欧美日产国产精品| 在线精品视频免费观看| 91网上在线视频| 9l国产精品久久久久麻豆| 国产成人午夜精品影院观看视频 | 色狠狠一区二区| 国产.精品.日韩.另类.中文.在线.播放| 午夜一区二区三区视频| 日韩精品中文字幕在线不卡尤物| 欧美亚洲尤物久久| 欧美性猛交xxxxxxxx| 色综合久久66| 色婷婷综合久久久中文一区二区| 成人av综合在线| 成人综合日日夜夜| 国产成人免费av在线| 国产黄人亚洲片| 国产精品一品视频| 国产91精品一区二区麻豆网站| 老色鬼精品视频在线观看播放| 人人狠狠综合久久亚洲| 久久精品国产精品青草| 国产一区二区在线影院| 国产成人精品亚洲午夜麻豆| 成人精品一区二区三区四区| aaa欧美大片| 在线观看日韩电影| 91精品国产一区二区三区蜜臀 | 欧美亚洲综合色| 欧美视频第二页| 欧美色图免费看| 在线成人免费视频| 日韩美女一区二区三区四区| 久久婷婷国产综合国色天香| 日本一区二区免费在线| 国产精品久久99| 精品动漫一区二区三区在线观看| 久久久亚洲精品一区二区三区| 欧美激情资源网| 亚洲自拍偷拍网站| 奇米777欧美一区二区| 国产成人亚洲精品狼色在线| 91视频在线看| 欧美一区二区视频在线观看2020| 精品国产乱子伦一区| 中文一区在线播放| 亚洲制服丝袜av| 免费看日韩a级影片| 国产91精品欧美| 欧美午夜一区二区三区 | 国内成+人亚洲+欧美+综合在线| 韩国女主播成人在线| 91一区在线观看| 91精品国产综合久久精品app| 久久免费美女视频| 自拍偷拍欧美精品| 日韩成人免费在线| 不卡在线观看av| 51精品久久久久久久蜜臀| 国产日产欧美一区| 图片区小说区区亚洲影院| 国产电影精品久久禁18| 欧美精品高清视频| 亚洲国产精品激情在线观看| 亚洲成av人片在www色猫咪| 高清国产午夜精品久久久久久| 欧美日韩亚州综合| 中文字幕一区二区三区不卡| 日本欧美一区二区| 色欧美乱欧美15图片| 国产亚洲欧洲997久久综合| 午夜精品一区二区三区电影天堂 | 亚洲一区二区在线视频| 色94色欧美sute亚洲线路一ni| 欧美一区二区在线免费播放| 一区二区成人在线| 成人av在线网站| www国产精品av| 久久精品国产99国产| 欧美性大战久久久| 亚洲精品国产视频| 成人激情文学综合网| 精品成a人在线观看| 蜜桃视频在线观看一区| 欧美午夜影院一区| 亚洲中国最大av网站| 91麻豆文化传媒在线观看| 国产日本欧美一区二区| 极品少妇xxxx精品少妇偷拍| 激情成人午夜视频| 欧美一级久久久久久久大片| 亚洲国产成人porn| 在线精品视频免费观看| 亚洲乱码日产精品bd| 91亚洲精品一区二区乱码| 中文字幕欧美区| 成人激情午夜影院| 中文字幕一区二区三区在线不卡| 国产一区二区免费视频| 久久久久久久久久久久久久久99| 国产老妇另类xxxxx| 国产亚洲一区二区在线观看|