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

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

?? wm.c

?? uCGUI
?? C
?? 第 1 頁 / 共 4 頁
字號:
#endif



/*************************************************************************************************************
*              Get next IVR

  Sets the next clipping rectangle. If a valid one has
  been found (and set), 1 is returned in order to indicate
  that the drawing operation needs to be executed.
  Returning 0 signals that we have iterated over all
  rectangles.

  Returns: 0 if no valid rectangle is found
           1 if rectangle has been found
*/

int  WM__GetNextIVR   (void) {
  #if GUI_SUPPORT_CURSOR
    static char _CursorHidden;
  #endif
  /* If WM is not active, we have no rectangles to return */
  if (WM_IsActive==0)
    return 0;
  if (ClipContext.EntranceCnt > 1) {
    ClipContext.EntranceCnt--;
    return 0;
  }
  #if GUI_SUPPORT_CURSOR
    if (_CursorHidden) {
      _CursorHidden = 0;
      (*GUI_CURSOR_pfTempUnhide) ( &ClipContext.CurRect);
    }
  #endif
  ++ClipContext.Cnt;
  /* Find next rectangle and use it as ClipRect */
  if (!FindNext_IVR()) {
    ClipContext.EntranceCnt--;  /* This search is over ! */
    return 0;        /* Could not find an other one ! */
  }
  /* Hide cursor if necessary */
  LCD_SetClipRectEx(&ClipContext.CurRect);
  #if GUI_SUPPORT_CURSOR
    if (GUI_CURSOR_pfTempHide) {
      _CursorHidden = 1;
      (*GUI_CURSOR_pfTempHide) ( &ClipContext.CurRect);
    }
  #endif
  return 1;
}



/*************************************************************************************************************
*              Init IVR  search

  This routine is called from the clipping level
  (the WM_ITERATE_START macro) when starting an iteration over the
  visible rectangles.

  Return value:
    0 : There is no valid rectangle (nothing to do ...)
    1 : There is a valid rectangle
*/


int WM__InitIVRSearch(const GUI_RECT* pMaxRect) {
  GUI_RECT r;
  WM_Obj* pAWin;
   /* If WM is not active -> nothing to do, leave cliprect alone */
  if (WM_IsActive==0)
    return 1;            
  /* If we entered multiple times, leave Cliprect alone */
  if (++ClipContext.EntranceCnt > 1)
    return 1;
  pAWin = WM_H2P(GUI_Context.hAWin);
  ClipContext.Cnt        = -1;
 /* When using callback mechanism, it is legal to reduce drawing
    area to the invalid area ! */
  if (IsInCallback) {
    WM__GetInvalidRectAbs(pAWin, &r);
  } else {  /* Not using callback mechanism, therefor allow entire rectangle */
    if (pAWin->Status & WM_SF_ISVIS) {
      r = pAWin->Rect;
    } else {
      --ClipContext.EntranceCnt;
      return 0;  /* window is not even visible ! */
    }
  }
  /* If the drawing routine has specified a rectangle, use it to reduce the rectangle */
  if (pMaxRect) {
    GUI__IntersectRect(&r, pMaxRect);
  }
  /* If user has reduced the cliprect size, reduce the rectangle */
  if (GUI_Context.WM__pUserClipRect) {
    GUI_RECT rUser = *(GUI_Context.WM__pUserClipRect);
    WM__Client2Screen(pAWin, &rUser);
    GUI__IntersectRect(&r, &rUser);
  }
  /* Iterate over all ancestors and clip at their borders */
  _ClipAtParentBorders(&r, pAWin);
  /* Store the rectangle and find the first rectangle of the area */
  ClipContext.ClientRect = r;
  return WM__GetNextIVR();
}


/*
          ********************************************
          *                                          *
          *       Set default                        *
          *                                          *
          ********************************************

  This routine sets the defaults for WM and the layers below.
  It is used before a drawing routine is called in order to
  make sure that defaults are set (in case the default settings
  had been altered before by the application)
*/
void WM_SetDefault(void) {
  GL_SetDefault();
  GUI_Context.WM__pUserClipRect = NULL;   /* No add. clipping */
}

/*
  ********************************************
  *
  *        Callback for Paint message
  *
  ********************************************

  This callback is used by the window manger in conjunction with banding
  memory devices. A pointer to this routine is given to the banding memory device.
  This callback in turn will send the paint message to the window.
*/
#if GUI_SUPPORT_MEMDEV

static void cbPaint(void* pMsg) {
  WM_SendMessage(((WM_MESSAGE*)pMsg)->hWin, (WM_MESSAGE*) pMsg);
}

#endif

/*
          ********************************************
          *                                          *
          *       Draw next window                   *
          *                                          *
          ********************************************
*/


static void _DrawNext(void) {
  int UpdateRem = 1;
  WM_HWIN iWin = (NextDrawWin == WM_HWIN_NULL) ? WM__FirstWin : NextDrawWin;
  GUI_CONTEXT ContextOld;
  GUI_SaveContext(&ContextOld);
  /* Make sure the next window to redraw is valid */
  for (; (iWin!=WM_HWIN_NULL) && UpdateRem; ) {
    WM_Obj* pWin = WM_H2P(iWin);
    if (pWin->Status & WM_SF_INVALID) {
      U8 Status = (pWin->Status &=  ~WM_SF_INVALID); /* Clear invalid flag */
      WM__NumInvalidWindows--;
      /* Send WM_PAINT if window is visible and a callback is defined */
      if ((pWin->cb != NULL)  && (Status & WM_SF_ISVIS)) {
        WM_MESSAGE Msg;
        Msg.hWin   = iWin;
        Msg.MsgId  = WM_PAINT;
        Msg.Data.p = (GUI_RECT*)&pWin->InvalidRect;
        WM_SelectWindow(iWin);
        WM_SetDefault();
        #if GUI_SUPPORT_MEMDEV
          if (Status & WM_SF_MEMDEV) {
            GUI_RECT r = pWin->InvalidRect;
            GUI_MoveRect (&r, pWin->Rect.x0, pWin->Rect.y0);
            GUI_MEMDEV_Draw(&r, cbPaint, &Msg, 0, (Status & WM_SF_HASTRANS) ? GUI_MEMDEV_HASTRANS : 0);
          } else
        #endif
        WM_SendMessage(iWin, &Msg);
        UpdateRem--;  /* Only the given number of windows at a time ... */
      }
    }
    iWin = pWin->hNextLin;
  }  
  NextDrawWin = iWin;   /* Remember the window */
  GUI_RestoreContext(&ContextOld);
}

/*
          *****************************************************************
          *                                                               *
          *                 Idle loop                                     *
          *                                                               *
          *****************************************************************
*/

int WM_Exec1(void) {
  if (WM_pfHandleHID) {
    if (WM_pfHandleHID())
      return 1;               /* We have done something ... */
  }
  if (GUI_PollKeyMsg()) {
    return 1;               /* We have done something ... */
  }
  if (WM_IsActive && WM__NumInvalidWindows) {
    WM_LOCK();
    _DrawNext();
    WM_UNLOCK();
    return 1;               /* We have done something ... */
  }
  return 0;                  /* There was nothing to do ... */
}

int WM_Exec(void) {
  int r = 0;
  while (WM_Exec1()) {
    r = 1;                  /* We have done something */
  }
  return r;
}


/****************************************************************
*                                                               *
*              Callback for background window                   *
*                                                               *
*****************************************************************
*/

static WM_RESULT cbBackWin( WM_MESSAGE* pMsg) {
  WM_KEY_INFO* pKeyInfo;
  switch (pMsg->MsgId) {
  case WM_KEY:
    pKeyInfo = (WM_KEY_INFO*)pMsg->Data.p;
    if (pKeyInfo->PressedCnt == 0) {
      GUI_StoreKey(pKeyInfo->Key);
    }
    break;
  case WM_PAINT:
    if (WM__BkColor != GUI_INVALID_COLOR) {
      GUI_SetBkColor(WM__BkColor);
      GUI_Clear();
    }
  default:
    WM_DefaultProc(pMsg);
  }
}


/****************************************************************
*
*                    WM_Activate  / WM_Deactivate
*
*****************************************************************

*/

void WM_Activate(void) {
  WM_IsActive = 1;       /* Running */
}

void WM_Deactivate(void) {
  WM_IsActive = 0;       /* No clipping performed by WM */
  WM__SetMaxClipRect(WM_H2P(WM_HBKWIN));
}

/*
          *****************************************************************
          *                                                               *
          *              WM_Init                                         *
          *                                                               *
          *****************************************************************
*/
void WM_Init(void) {
	if (!_IsInited) {
	  WM_HWIN hWin;
	  NextDrawWin = WM__FirstWin = WM_HWIN_NULL;
	  GUI_Context.WM__pUserClipRect = NULL;
	  WM__NumWindows = WM__NumInvalidWindows =0;
	  /* Make sure we have at least one window. This greatly simplifies the
		  drawing routines as they do not have to check if the window is valid.
	  */
	  hWin = WM_CreateWindow(0, 0, GUI_XMAX, GUI_YMAX, WM_CF_SHOW, cbBackWin, 0);
	  WM_SelectWindow(hWin);
	  WM_Activate();
    _IsInited =1;
	}
}



/*
          ******************************************************
          *                                                    *
          *              Default procedure                     *
          *                                                    *
          ******************************************************
*/


WM_RESULT WM_DefaultProc(WM_MESSAGE* pMsg) {
  WM_HWIN hWin = pMsg->hWin;
  void *p = pMsg->Data.p;
  WM_Obj* pWin = WM_H2P(hWin);
  /* Exec message */
  switch (pMsg->MsgId) {
  case WM_GETORG:
    ((GUI_POINT*)p)->x = pWin->Rect.x0;
    ((GUI_POINT*)p)->y = pWin->Rect.y0;
    break;
  case WM_GETCLIENTRECT:     /* return client window in window coordinates */
    WM__GetClientRectWin(pWin, (GUI_RECT*)p);
    break;
  case WM_GETCLIENTRECT_ABS:      /* return client window in absolute (screen) coordinates */
    WM__GetClientRectWin(pWin, (GUI_RECT*)p);
    GUI_MoveRect((GUI_RECT*)p, pWin->Rect.x0, pWin->Rect.y0);
    break;
  case WM_GET_CLIENT_WINDOW:      /* return handle to client window. For most windows, there is no seperate client window, so it is the same handle */
    pMsg->Data.v = hWin;
    return;                       /* Message handled */
  case WM_KEY:
    WM_SendToParent(hWin, pMsg);
    return;                       /* Message handled */
   case WM_GET_BKCOLOR:
    pMsg->Data.Color = GUI_INVALID_COLOR;
    return;                       /* Message handled */
  }
  /* Message not handled. If it queries something, we return 0 to be on the safe side. */
  pMsg->Data.v = 0;
  pMsg->Data.p = 0;
}

#else

void WM(void) {} /* avoid empty object files */

#endif /* WM_MAX_WINDOW */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜欧美一区二区三区在线播放| 亚洲成av人**亚洲成av**| 日本不卡的三区四区五区| 91久久奴性调教| 亚洲国产日韩a在线播放| 欧美日韩视频在线第一区 | 欧美日韩在线三级| 午夜伦欧美伦电影理论片| 欧美老女人第四色| 麻豆高清免费国产一区| 国产视频一区在线播放| 成人激情黄色小说| 一级日本不卡的影视| 欧美欧美欧美欧美| 国产一区999| 亚洲伦在线观看| 欧美美女一区二区| 蜜臀av一区二区在线免费观看| 欧美一区二区视频免费观看| 美女视频免费一区| 色综合久久天天| 日韩国产欧美在线视频| 精品免费国产一区二区三区四区| 国产91清纯白嫩初高中在线观看| 亚洲情趣在线观看| 精品少妇一区二区三区日产乱码| 成人午夜精品在线| 亚洲国产一二三| 国产在线精品一区二区三区不卡| 欧美刺激午夜性久久久久久久| 国产精品伦理一区二区| 欧美午夜精品一区二区三区| 日韩高清不卡一区二区| 中文字幕免费观看一区| 欧美日韩精品一区视频| 处破女av一区二区| 秋霞午夜鲁丝一区二区老狼| 国产精品妹子av| 欧美猛男超大videosgay| 国产成人在线视频网址| 亚洲国产精品尤物yw在线观看| 久久亚洲欧美国产精品乐播| 日本高清视频一区二区| 国产一区二区毛片| 丝瓜av网站精品一区二区| 国产精品久久久久久福利一牛影视| 7777精品伊人久久久大香线蕉经典版下载 | 欧美在线不卡视频| 国产不卡高清在线观看视频| 亚欧色一区w666天堂| 中文字幕中文在线不卡住| 日韩免费看的电影| 在线观看精品一区| www.日韩精品| 国产乱对白刺激视频不卡| 丝袜亚洲另类欧美| 一区二区免费视频| 亚洲视频免费在线| 欧美极品aⅴ影院| 精品国产乱码久久久久久1区2区| 精品1区2区3区| 欧美中文字幕亚洲一区二区va在线 | 亚洲欧美日韩中文播放| 久久久欧美精品sm网站| 欧美成人精精品一区二区频| 91精品国产日韩91久久久久久| 欧美在线观看视频在线| 日本韩国一区二区三区视频| 成人av网站大全| 成人美女在线观看| 国产成人av资源| 福利91精品一区二区三区| 国产做a爰片久久毛片| 九九九久久久精品| 紧缚奴在线一区二区三区| 韩国成人在线视频| 精品亚洲欧美一区| 国内精品免费在线观看| 国产精品系列在线播放| 国产精品主播直播| 不卡的电视剧免费网站有什么| 国产一区二区三区四区五区入口| 精品一区二区免费视频| 国产一区二区成人久久免费影院| 国产一区二区三区四| 成人综合婷婷国产精品久久| 成人高清视频在线| 色综合久久88色综合天天免费| 91老师片黄在线观看| 欧美色图天堂网| 国产一区在线精品| 亚洲六月丁香色婷婷综合久久| 亚洲视频每日更新| 午夜一区二区三区在线观看| 日韩精品成人一区二区在线| 国内外成人在线视频| 国产成人av资源| 色国产精品一区在线观看| 欧美三级日韩三级| 中文乱码免费一区二区| 中文字幕欧美一区| 亚洲福利视频一区| 久久99蜜桃精品| 成人精品gif动图一区| 色悠悠久久综合| 日韩丝袜美女视频| 久久久不卡网国产精品二区| 亚洲图片另类小说| 久久精品国产久精国产| 成人在线视频首页| 这里是久久伊人| 国产精品私人影院| 亚洲18影院在线观看| 国产福利精品导航| 欧美性受xxxx| 久久综合狠狠综合| 亚洲精品成人a在线观看| 久久99久久精品| 91看片淫黄大片一级| 日韩欧美国产电影| 亚洲人123区| 国产伦精品一区二区三区免费迷| 99re热这里只有精品免费视频| 91精品在线免费观看| 国产精品乱码一区二区三区软件 | 国产亚洲精品精华液| 亚洲综合一区二区三区| 国产福利精品一区二区| 666欧美在线视频| 中文字幕日本不卡| 狠狠久久亚洲欧美| 欧美猛男男办公室激情| 欧美高清性hdvideosex| 日韩一区二区影院| 亚洲色图第一区| 韩国女主播成人在线观看| 99re亚洲国产精品| 国产欧美一区二区精品秋霞影院| 图片区日韩欧美亚洲| 色综合婷婷久久| 国产日韩亚洲欧美综合| 裸体在线国模精品偷拍| 欧美日韩国产综合一区二区| 亚洲婷婷在线视频| 成人免费高清视频在线观看| 日韩精品中文字幕一区二区三区 | 久久你懂得1024| 性感美女久久精品| 色香色香欲天天天影视综合网 | 亚洲日本欧美天堂| 国产精品18久久久| 欧美不卡一区二区三区四区| 亚洲成av人综合在线观看| 色中色一区二区| 亚洲男女一区二区三区| 久久嫩草精品久久久久| 精品蜜桃在线看| 午夜精品久久久久影视| 色婷婷激情综合| 亚洲青青青在线视频| 99国产一区二区三精品乱码| 国产喷白浆一区二区三区| 国产一区欧美一区| 精品sm捆绑视频| 韩国欧美国产一区| 国产亚洲精品超碰| 韩国精品主播一区二区在线观看| 精品国产制服丝袜高跟| 极品尤物av久久免费看| 久久影院午夜片一区| 国产在线视频一区二区| 精品国产青草久久久久福利| 狠狠狠色丁香婷婷综合久久五月| 久久亚洲一区二区三区四区| 国产在线视频一区二区| 国产日本欧美一区二区| 成人网在线播放| 国产精品免费aⅴ片在线观看| www.成人在线| 亚洲一区在线观看免费| 欧美一级理论性理论a| 精东粉嫩av免费一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品中文字幕欧美| 中文字幕一区二区三区在线播放| 亚洲免费毛片网站| 国产精品二三区| 91亚洲精品乱码久久久久久蜜桃 | 久久99精品国产麻豆婷婷| 精品999在线播放| 粉嫩一区二区三区性色av| 亚洲欧美日韩系列| 在线观看91av| 国v精品久久久网| 一区二区三区91| 精品乱人伦小说| 成人黄色a**站在线观看| 亚洲午夜在线电影| 久久伊人蜜桃av一区二区| 色综合欧美在线|