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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? wm.c

?? uCGUI
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/*************************************************************************************************************
                                                   uC/GUI
                                               嵌入式通用圖形軟件
File        : WM.C
Purpose     : Windows manager core
----------------------------------------------------------------------
Version-Date---Author-Explanation
----------------------------------------------------------------------

3.00a   010621 RS     a) module accelerated by skipping parameter
                         to FindNext_IVR
3.00    010502 RS     a) WM module split up for library applications
                      b) Module dramatically accelerated (without
                         changes in the routine structure)
1.18    000909 RS     a) WM_CreateBWin does not activate the
                         new window unless specified via create flags
1.16a   000724 RS     a) Function WM_EnableMemdevRead added
1.16    000614 RS     a) Cleanup
                      b) Counter for invalid windows and
                         WM_GetNumInvalidWindows() added
1.14g   000522 RS     a) WM_ExecAll added
1.14f   000316 RS     a) Internal Create routine created in order to
                         handle creation of regular windows and
                         objects seperately (and correctly) in all
                         cases (by avoiding casts)
1.14e   000307 RS     a) WM_MoveTo added
1.14d   000224 RS     a) WM_CF_ACTIVATE flag now needed in order to
                         automatically activate a created window
1.14c   000209 RS     a) GUI_Clear eliminated in default callback for
                         default background window
1.14b   000125 RS     a) Bugfix for bug created in 1.14a
1.14a   000122 RS     a) WM_CreateObj: Change in order to avoid
                         compiler warning with IARs new frontend
1.14    999109 RS     a) Bugfix: Deleted window could still receive
                         up to 1 drawing message. Fixed. (->NextDrawWin)
                      b) WM_Obj now uses memory handle
                      c) WM_DefaultProc now handles WM_DELETE
                      d) Drawing area reduction for callbacks
                         to invalide area
                      e) WM_SetCallback added
                      f) Call to WM_Error if insufficient windows have
                         been configured
1.12h   000107 RS     a) WM_Sendmessage: unused local eliminated
                      b) WMALLOC_Init call eliminated
1.12g   991230 RS     a) Callback for background window defined
1.12f   991228 RS     a) Locking macros moved -> WM.H
1.12e   991208 RS     a) WM_DrawNext now saves the entire context, not
                         just the active window
1.12d   991204 RS     a) WM_GetBGndWin added
1.12c   991203 RS     a) WM_Init now creates default window
1.12b   991126 RS     a) Cleanup in order to avoid compiler warnings
1.12a   991112 RS     a) Invalidate now also invalidates any
                         transparent window on top of the invalidated
                         area
                      b) Internal changes in order to support
                         dynamic memory (using WM_ALLOC)
                      c) Additional ASSERTs inserted
1.12    991110 RS     a) Invalidate now also invalidates a window
                         below a transparent window
1.10c   991018 RS     a) WM_DrawNext:
                         NextDrawWin=WM_HWIN_NULL -> NextDrawWin==WM_HWIN_NULL
1.10b   991015 RS     a) WM_ValidateBWin corrected (Invalid
                         flag was never reset, leading to superfluos redraws)
                      b) WM_SetDefault(void) implemented
1.10a   991012 RS     a) Compile warnings eliminated
1.10    990918 RS     a) Objects for windows manager added:
                         WM_CreateObject, WM_DeleteObject
                      b) "Magic number" -1 eliminated
                      c) static routines put on top of file
                      d) Locking added (WM_LOCK), ensuring thread
                         safety of all routines
                      e) Window marked as valid only if a callback
                         exists, allowing mixed callback/non callback
                         modes for different windows
1.08.02 990827 RS     a) Optimization bug in WM_SetHasTrans
                         fixed
1.08.01 990826 RS     a) Transparent windows can no longer obstruct
                      an area of a window below in Z-direction
                      (in FindNext_IVR) for correct handling of
                      transparent windows
1.08.00 990823 RS     a) WM__GetOrgX -> WM_GetOrgX
                         WM__GetOrgY -> WM_GetOrgY
                      b) Clearing memory in WM_Init
1.07.01 990730 RS     a) In WM_DrawNext() add. condition added to make
                      sure that loop does not iterate using
                      -1 (end-of-list) as index
1.07    990720 RS     a) New switch: WM_SUPPORT_OBSTRUCT, def. 1
1.06    990504 BB     functions WM_GetWinSizeX() and WM_GetWinSizeY()
                      added.
1.05    990423 RS     a) Prototype for WM_CreateBWin changed,
                      parameter WM_MESSAGE* is no longer const
                      (Causing some other changes reg. const)
                      b) WM_ShowBWin WM_HideBWin tested in simulator
1.04    990417 RS     a) DrawNext bug fixed: It had passed the
                      entire WIndow-Rectangle instead of just
                      the InvalidRectangle with the WM_PAINT
                      command
1.03    990401 RS     a) Implemented the following functions
                      WM_SetHasTrans()
                      WM_ClrHasTrans()
                      WM_GetHasTrans()
                      WM_HideBWin()
                      WM_ShowBWin()
                      WM_ValidateBWin()
                      WM_GetActiveBWin()
1.02    990315 RS     a) Windows stack organisation routines cleaned
                      up, resulting in more efficient code
1.01    990314 RS     a) Invalidation and IVR calculation optimized
                      b) Windows which are on top of a window causing
                      invalidation are no longer affected
1.00    990310 RS     Moving and resizing tested in simulation
0.99    990309 RS     All routines implemented, moving & resizing
                      need to be tested under different circumstances.
0.50    990308 RS     Core of WM works (Calculation and iteration over
                      IVRs). Side routines like moving windows and the
                      corresponding message handling missing.
                      There is now a clear seperation between the LCD
                      and GL layers and WM.
0.01    990301 RS     Incomplete version, for BB to check
----------------------------------------------------------------------
Known problems:
None.
----------------------------------------------------------------------
Open issues:
None.
----------------------------------------------------------------------
Todo:
Nothing.
************************************************************************************************************/


#include <stddef.h>           /* needed for definition of NULL */
#include <string.h>           /* required for memset */

#define WM_C
#include "WM_Intern.h"

#if GUI_WINSUPPORT    /* If 0, WM will not generate any code */


/******************************************************************
*
*              Config defaults
************************************************************************************************************/
/* This is for tests only. It will fill the invalid area of a window.
   Can be used for debugging. */

#ifndef WM_SHOW_INVALID
  #define WM_SHOW_INVALID 0
#endif

/*************************************************************************************************************
*                 Macros for internal use
************************************************************************************************************/
#define ASSIGN_IF_LESS(v0,v1) if (v1<v0) v0=v1

/******************************************************************
*
*              Local typedefs
************************************************************************************************************/
typedef struct {
  GUI_RECT ClientRect;
  GUI_RECT CurRect;
  int Cnt;
  int EntranceCnt;
} WM_IVR_CONTEXT;

/******************************************************************
*
*              WM_ global data
************************************************************************************************************/
U8                     WM_IsActive;
U16                    WM__CreateFlags;
WM_DELETE_WINDOW_HOOK* WM__pfDeleteWindowHook;
GUI_COLOR              WM__BkColor = GUI_INVALID_COLOR;
WM_HWIN                WM__hCapture, WM__hWinFocus;
char                   WM__CaptureReleaseAuto;

/******************************************************************
*
*              Static data
************************************************************************************************************/
static WM_HWIN        NextDrawWin;
static U8             IsInCallback;
static WM_IVR_CONTEXT ClipContext;
static char           _IsInited;

/*************************************************************************************************************
*       Static routines
************************************************************************************************************/

/*************************************************************************************************************
*       _ClipAtParentBorders

  Iterates over all its ancestors and intersects all rectangles to
  find out which part is actually visible.
  Reduces the rectangle to the visible area.
*/
void _ClipAtParentBorders(GUI_RECT* pRect, WM_Obj* pWin) {
  WM_HWIN hWin;
  hWin = pWin->hParent;
  while (hWin) {
    pWin = WM_H2P(hWin);
    GUI__IntersectRect(pRect, &pWin->Rect);
    hWin = pWin->hParent;
  }
}

/*************************************************************************************************************
*

  When drawing, we have to start at the bottom window !
*/

static void ResetNextDrawWin(void) {
  NextDrawWin = WM_HWIN_NULL;
}


/*************************************************************************************************************
*       _AddChild
*/
void _AddChild(WM_HWIN hParent, WM_HWIN hChild, int OnTop) {
  WM_Obj* pChild;
  WM_Obj* pParent;
  WM_Obj* pi;
  WM_HWIN hi;
  if (hParent) {
    pParent = WM_H2P(hParent);
    pChild  = WM_H2P(hChild);
    hi = pParent->hFirstChild;
    if (hi == 0) {   /* No child yet ... Makes things easy ! */
      pParent->hFirstChild = hChild;
        return;                         /* Early out ... We are done */
    }
    if (!OnTop) {
      pi = WM_H2P(hi);
      if (pi->Status & WM_SF_STAYONTOP) {
        pChild->hNext = hi;
        pParent->hFirstChild = hChild;
        return;                         /* Early out ... We are done */
      }
    }
    /* put if at the end of the list or after the last non "STAY-ON-TOP" child */
    do {
      WM_Obj* pNext;
      WM_HWIN hNext;
      pi = WM_H2P(hi);
      if ((hNext = pi->hNext) == 0) {
        pi->hNext = hChild;
        break;
      }
      if (!OnTop) {
        pNext = WM_H2P(hNext);
        if (pNext->Status & WM_SF_STAYONTOP) {
          pi->hNext = hChild;
          pChild->hNext = hNext;
          break;
        }
      }
      hi = hNext;
    }  while (1);
  }
}

/*************************************************************************************************************
*
*/
static void _DeleteAllChildren(WM_HWIN hChild) {
  while (hChild) {
    WM_Obj* pChild = WM_H2P(hChild);
    WM_HWIN hNext = pChild->hNext;
    WM_DeleteWindow(hChild);
    hChild = hNext;
  }
}

/*************************************************************************************************************
*
*/
static void _DeleteInSiblingList(WM_HWIN hWin) {
  WM_Obj* pWin;
  WM_Obj* pParent;
  WM_Obj* pi;
  WM_HWIN hParent;
  WM_HWIN hi;
  pWin = WM_H2P(hWin);
  if (pWin->hParent) {
    hParent = pWin->hParent;
    pParent = WM_H2P(hParent);
    hi = pParent->hFirstChild;
    if (hi == hWin) {
      pi = WM_H2P(hi);
      pParent->hFirstChild = pi->hNext;
    } else {
      while (hi) {
        pi = WM_H2P(hi);
        if (pi->hNext == hWin) {
          pi->hNext = pWin->hNext;
          return;
        }
        hi = pi->hNext;
      }
    }
  }
}


/*************************************************************************************************************
*             Module internal routines
************************************************************************************************************/

void WM__Client2Screen(const WM_Obj* pWin, GUI_RECT *pRect) {
  GUI_MoveRect(pRect, pWin->Rect.x0, pWin->Rect.y0);
}

int WM__IsWindow(WM_HWIN hWin) {
  WM_HWIN iWin;
  int r = 0;
  for (iWin = WM__FirstWin; iWin; iWin = WM_H2P(iWin)->hNextLin) {
    if (iWin == hWin) {
      r = 1;
      break;
    }
  }
  return r;
}


/*************************************************************************************************************
*
*/
void WM__RemoveFromLinList(WM_HWIN hWin) {
  WM_Obj* piWin;
  WM_HWIN hiWin, hNext;
  for (hiWin = WM__FirstWin; hiWin; ) {
    piWin = WM_H2P(hiWin);
    hNext = piWin->hNextLin;
    if (hNext == hWin) {
      piWin->hNextLin = WM_H2P(hWin)->hNextLin;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线视频官网| 欧美视频在线一区二区三区 | 粉嫩av一区二区三区在线播放| 久久国产精品99精品国产| 国产在线精品国自产拍免费| 不卡av在线网| 欧美性猛片xxxx免费看久爱| 2021中文字幕一区亚洲| 国产精品久久久久一区二区三区 | 欧美色手机在线观看| 欧美videossexotv100| 中文字幕在线不卡视频| 日日夜夜一区二区| 成人免费va视频| 777欧美精品| 国产精品电影一区二区三区| 日韩高清在线电影| av一区二区三区| 91精品久久久久久久久99蜜臂| 国产免费成人在线视频| 日韩精品三区四区| eeuss鲁片一区二区三区| 日韩一区二区在线免费观看| 中文字幕一区二区三区不卡在线 | 欧美精品一区二区三区视频 | 欧美美女bb生活片| 中文字幕av一区二区三区高| 日韩国产一二三区| 色婷婷精品大在线视频| 久久久国际精品| 日韩—二三区免费观看av| 成人精品视频.| 日韩三级.com| 亚洲一区二区三区四区五区黄| 国产精品一卡二卡在线观看| 91精品国产91综合久久蜜臀| 自拍偷拍国产精品| 国产成人亚洲综合a∨婷婷 | 国产精品中文字幕日韩精品| 欧美日韩国产首页在线观看| 亚洲欧美日本韩国| 成人少妇影院yyyy| 精品电影一区二区三区| 日日夜夜精品视频免费 | 男人操女人的视频在线观看欧美| 91视频www| 1024精品合集| 国产高清在线观看免费不卡| 精品久久久久久无| 不卡av在线网| 久久这里只精品最新地址| 亚洲九九爱视频| 懂色av一区二区三区蜜臀 | 亚洲一区二区视频在线| 99热99精品| 欧美国产日韩亚洲一区| 激情文学综合丁香| 日韩欧美国产一二三区| 婷婷开心激情综合| 欧美日韩免费一区二区三区视频| 亚洲精品日韩一| a在线播放不卡| 一区在线中文字幕| 不卡的看片网站| 国产精品拍天天在线| 国产不卡视频一区| 国产嫩草影院久久久久| 成人深夜福利app| 国产精品免费视频网站| www.亚洲激情.com| 中文字幕亚洲视频| www.欧美色图| ...xxx性欧美| 一本色道久久综合亚洲精品按摩| 亚洲综合在线视频| 99精品欧美一区二区蜜桃免费| 国产精品嫩草99a| 99精品国产视频| 伊人色综合久久天天| 在线观看国产一区二区| 午夜一区二区三区在线观看| 欧美久久久影院| 久久不见久久见中文字幕免费| 2020国产成人综合网| 国产激情一区二区三区四区 | 色综合久久66| 亚洲国产视频网站| 欧美一区二区视频在线观看2022| 美女视频第一区二区三区免费观看网站| 欧美一区二区福利在线| 久久99精品国产.久久久久久| 久久久久久毛片| jlzzjlzz亚洲日本少妇| 亚洲国产一区二区视频| 91精品国产一区二区人妖| 国内久久婷婷综合| 成人免费视频在线观看| 欧美日韩一级二级| 九九国产精品视频| 国产精品美女久久久久aⅴ| 在线观看一区日韩| 激情综合一区二区三区| 国产精品免费观看视频| 欧美日韩一区二区不卡| 精品中文字幕一区二区小辣椒| 国产清纯美女被跳蛋高潮一区二区久久w| 成人av电影在线| 日韩精品一二区| 国产视频一区二区三区在线观看| 91蜜桃在线观看| 蜜臀av在线播放一区二区三区| 国产亚洲制服色| 欧美丝袜第三区| 国产精品一级黄| 亚洲国产精品自拍| 久久精品视频在线看| 欧美又粗又大又爽| 九一九一国产精品| 亚洲另类一区二区| 久久综合久久综合久久| 91久久香蕉国产日韩欧美9色| 另类小说一区二区三区| 亚洲欧美一区二区久久| 日韩精品一区二区三区视频播放| 99精品热视频| 久久国产精品72免费观看| 日韩毛片视频在线看| 精品久久一二三区| 欧美揉bbbbb揉bbbbb| 国产激情偷乱视频一区二区三区| 亚洲一区av在线| 中文字幕精品一区| 欧美一二三四在线| 欧美中文字幕久久| 丁香婷婷综合五月| 免费看黄色91| 亚洲图片欧美一区| 国产精品成人网| 精品成a人在线观看| 欧美日韩一级片在线观看| a在线播放不卡| 国产福利91精品一区| 日韩精品乱码av一区二区| 亚洲视频精选在线| 久久久亚洲精品一区二区三区| 欧美人体做爰大胆视频| 色综合久久88色综合天天6| 久久国产乱子精品免费女| 亚洲成在人线在线播放| 亚洲色图在线视频| 国产目拍亚洲精品99久久精品| 精品理论电影在线| 日韩一级二级三级| 欧美日韩黄色影视| 在线亚洲高清视频| 99久久亚洲一区二区三区青草| 国产不卡免费视频| 国产精品99久久久久| 久久精品国产网站| 天天影视网天天综合色在线播放| 亚洲视频精选在线| 成人免费在线视频观看| 国产精品美女久久久久久久网站| 久久久久久电影| 久久久久久97三级| 欧美va亚洲va| 日韩欧美国产系列| 91精品国产综合久久精品图片| 欧美色图片你懂的| 欧美伊人久久大香线蕉综合69 | 亚洲日韩欧美一区二区在线| 亚洲国产精品成人综合色在线婷婷| 欧美va亚洲va| 久久亚洲精品小早川怜子| 精品久久久久久久久久久院品网 | 国产福利不卡视频| 国产盗摄精品一区二区三区在线| 激情综合色播激情啊| 激情综合网av| 亚洲色图在线播放| 欧美日韩国产高清一区二区三区| 日本国产一区二区| 色综合亚洲欧洲| 91丨porny丨户外露出| 91免费看视频| 欧美性猛交xxxx乱大交退制版 | 视频在线观看一区二区三区| 亚洲成人动漫在线观看| 午夜精品一区二区三区三上悠亚| 亚洲午夜精品在线| 视频一区二区三区入口| 日本中文在线一区| 精品亚洲国产成人av制服丝袜| 国产伦精品一区二区三区免费迷 | 国产精品久久久一本精品 | 在线不卡免费av| 日韩一二在线观看| 久久精品人人做人人综合| 亚洲国产精品二十页| 亚洲精品一二三|