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

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

?? wm.c

?? ucgui源碼3.32
?? C
?? 第 1 頁 / 共 4 頁
字號:

static int FindNext_IVR(void) {
  if (ClipContext.Cnt ==0) {
    ClipContext.CurRect = GUI_Context.pAWin->Rect;
    return 1;  /* IVR is valid ! */
  }
  return 0;  /* Nothing left to draw */
}
#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) ();
    }
  #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 = (*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) {
  /* Poll PID if necessary */
  if (WM_pfPollPID) {
    WM_pfPollPID();
  }
  if (WM_pfHandlePID) {
    if (WM_pfHandlePID())
      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_GETCLIENTRECT:     /* return client window in window coordinates */
    WM__GetClientRectWin(pWin, (GUI_RECT*)p);
    break;
  case WM_GETORG:
    ((GUI_POINT*)p)->x = pWin->Rect.x0;
    ((GUI_POINT*)p)->y = pWin->Rect.y0;
    break;
  case WM_GET_INSIDE_RECT:      /* return client window in absolute (screen) coordinates */
    WM__GetClientRectWin(pWin, (GUI_RECT*)p);
    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一区二区三区免费野_久草精品视频
中文字幕亚洲成人| 在线观看欧美精品| 色综合久久中文综合久久牛| 在线电影院国产精品| 国产精品情趣视频| 日本中文字幕一区二区视频| 99r国产精品| 久久久美女毛片| 日韩av二区在线播放| 91精品福利在线| 国产精品白丝在线| 国产一区二区女| 日韩一级完整毛片| 亚洲va韩国va欧美va精品| 成a人片国产精品| 久久午夜电影网| 久久精品999| 日韩欧美一二三区| 首页综合国产亚洲丝袜| 91麻豆文化传媒在线观看| 中文字幕精品一区| 国产一区二区三区黄视频| 日韩一区二区三区电影在线观看| 亚洲一区免费视频| 欧美亚洲国产一区二区三区va | 日韩一区在线播放| 国产自产高清不卡| 久久综合九色综合欧美亚洲| 丝袜美腿亚洲一区二区图片| 欧美三级一区二区| 亚洲免费观看在线视频| 97se狠狠狠综合亚洲狠狠| 中文字幕一区二区三区四区| jvid福利写真一区二区三区| 国产精品久久久久久久久搜平片| 国产乱码精品一区二区三区忘忧草 | 狠狠色狠狠色合久久伊人| 日韩欧美亚洲一区二区| 久久99精品久久久久久久久久久久| 欧美精品 国产精品| 人人爽香蕉精品| 欧美mv日韩mv| 国产麻豆精品theporn| 久久精品亚洲精品国产欧美kt∨| 国产夫妻精品视频| 日韩一区在线看| 欧美三区免费完整视频在线观看| 午夜视频久久久久久| 日韩欧美一级二级三级| 国产91丝袜在线18| 欧美国产欧美亚州国产日韩mv天天看完整| 国产乱码精品一区二区三区av | 91精品国产免费久久综合| 香蕉av福利精品导航| 91精品婷婷国产综合久久 | 日韩美女在线视频| 国产精品一区二区三区乱码| 国产精品丝袜黑色高跟| 日本二三区不卡| 日本美女一区二区三区视频| 精品99久久久久久| 北岛玲一区二区三区四区| 亚洲综合色成人| 欧美大白屁股肥臀xxxxxx| 丁香六月久久综合狠狠色| 亚洲精品欧美二区三区中文字幕| 欧美日韩www| 国精品**一区二区三区在线蜜桃| 国产精品日韩成人| 91精品国产综合久久福利| 国产乱妇无码大片在线观看| 亚洲欧洲色图综合| 日韩一区二区三区电影在线观看 | 欧美精品99久久久**| 国产精品正在播放| 亚洲电影视频在线| 亚洲国产高清aⅴ视频| 欧美日韩综合在线免费观看| 国产精品2024| 日韩精品免费专区| 亚洲人成影院在线观看| 欧美videossexotv100| 色综合久久88色综合天天| 久久精品二区亚洲w码| 亚洲午夜在线电影| 中文幕一区二区三区久久蜜桃| 欧美精品一级二级| 色婷婷久久综合| 成人性生交大片| 久国产精品韩国三级视频| 亚洲自拍偷拍麻豆| 国产精品第五页| 国产亲近乱来精品视频| 日韩美女在线视频| 欧美电影在哪看比较好| 91国产福利在线| av一区二区久久| 粉嫩13p一区二区三区| 激情六月婷婷久久| 日本欧美大码aⅴ在线播放| 亚洲网友自拍偷拍| 夜色激情一区二区| 日韩伦理电影网| 中文字幕av不卡| 久久精品日韩一区二区三区| 欧美电视剧免费观看| 91精品免费观看| 欧美精品123区| 欧美精品久久天天躁| 欧美系列在线观看| 欧美日韩一区二区欧美激情| 欧美视频一区二区在线观看| 91在线免费看| 99re热视频精品| 99久久婷婷国产| 91麻豆.com| 欧美日韩在线亚洲一区蜜芽| 91成人免费在线视频| 在线观看亚洲a| 欧美日本不卡视频| 欧美一级艳片视频免费观看| 9191成人精品久久| 日韩午夜激情视频| 日韩精品一区二区三区在线| 亚洲精品在线电影| 久久精品亚洲精品国产欧美| 中文字幕电影一区| 亚洲免费伊人电影| 亚洲午夜在线电影| 看片网站欧美日韩| 粉嫩在线一区二区三区视频| www.欧美日韩| 欧美性色黄大片| 日韩一级大片在线观看| 2023国产精品| 亚洲女人****多毛耸耸8| 亚洲综合免费观看高清完整版在线| 天堂一区二区在线| 高清成人免费视频| 91久久国产最好的精华液| 欧美一区二区网站| 国产欧美一区二区三区在线看蜜臀| 亚洲欧洲www| 日韩av电影天堂| 成人激情免费视频| 3d成人动漫网站| 国产精品区一区二区三区| 亚洲成人av资源| 风间由美一区二区三区在线观看 | 亚洲一二三区在线观看| 免费成人av在线| 99久久综合精品| 欧美疯狂做受xxxx富婆| 久久九九全国免费| 亚洲香肠在线观看| 国产精品1024| 91麻豆精品国产无毒不卡在线观看| 精品99久久久久久| 亚洲高清在线视频| 国产成人综合在线播放| 欧美性xxxxxxxx| 欧美韩国一区二区| 美女脱光内衣内裤视频久久网站| av中文字幕在线不卡| 日韩美女视频在线| 亚洲一线二线三线视频| 国产aⅴ精品一区二区三区色成熟| jizz一区二区| 日韩视频在线观看一区二区| 最新不卡av在线| 久久99久久久久| 欧美日韩国产高清一区二区三区| 欧美高清在线精品一区| 美女视频黄频大全不卡视频在线播放| 99精品久久久久久| 精品久久久久久亚洲综合网 | 在线免费不卡电影| 国产精品久久99| 国产精品一区在线| 欧美人狂配大交3d怪物一区| 国产精品国产精品国产专区不片 | 欧美激情一区二区三区| 麻豆成人av在线| 88在线观看91蜜桃国自产| 亚洲女女做受ⅹxx高潮| 不卡的电影网站| 国产欧美日本一区二区三区| 蜜臀av一区二区在线观看| 欧美精品久久99久久在免费线 | 国内外成人在线视频| 91精品免费观看| 日韩国产在线观看一区| 欧美日韩一区二区三区四区五区| 亚洲天堂免费在线观看视频| 国产成人免费xxxxxxxx| 久久久91精品国产一区二区三区| 老色鬼精品视频在线观看播放| 欧美精品欧美精品系列| 青青青伊人色综合久久| 欧美一级二级在线观看|