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

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

?? guicurs.c

?? 一個在44b0上移植成功的ucgui
?? 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        : GUICurs.C
Purpose     : Cursor routines of the graphics library
---------------------------END-OF-HEADER------------------------------
*/

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

#if GUI_SUPPORT_CURSOR

/*******************************************************************
*
*       Types
*
********************************************************************
*/
void   (*_cbShowCursor)(void);
void   (*_cbHideCursor)(void);

/*******************************************************************
*
*       static data
*
********************************************************************
*/

static  GUI_HMEM _hBuffer;
static  GUI_RECT _Rect;
static  char _CursorOn;
static  const GUI_BITMAP* _pBM;
static  U8   _CursorDeActCnt;
static  int  _AllocSize;

/*******************************************************************
*
*                  static Show / Hide
*
********************************************************************

Purpose:
  Show / Hide cursor.
*/
static void Hide(void) {
  GUI_RECT r;
  r = GUI_Context.ClipRect;
  LCD_SetClipRectMax();
  if (_cbHideCursor)
    _cbHideCursor();
  GUI_Context.ClipRect = r;
}

static void Show(void) {
  GUI_RECT r;
  r = GUI_Context.ClipRect;
  LCD_SetClipRectMax();
  if (_cbShowCursor)
    _cbShowCursor();
  GUI_Context.ClipRect = r;
}

static void  _CalcRect(void) {
  if (_pBM) {
    _Rect.x1 = _Rect.x0 + _pBM->XSize - 1;
    _Rect.y1 = _Rect.y0 + _pBM->YSize - 1;
  }
}

/*******************************************************************
*
*                  Activate / Deactivate
*
********************************************************************

Purpose:
  Allows activation or deactivation of cursor. Can be used to make
  cursor flash.
*/
void GUI_CURSOR_Activate(void) {
  GUI_LOCK();
  if ((--_CursorDeActCnt) ==0) {
    Show();
  }
  GUI_UNLOCK();
}

void GUI_CURSOR_Deactivate(void) {
  GUI_LOCK();
  if (_CursorDeActCnt-- ==0)
    Hide();
  GUI_UNLOCK();
}



/*******************************************************************
*
*                  static: SetCursor
*
********************************************************************

Purpose:
  Show cursor.
*/
static void _SetCursor(const GUI_BITMAP* pBM, void (*cbShow)(void), void (*cbHide)(void)) {
  Hide();  /* Make sure the old cursor (if there was an old one) is history */
  _CursorOn = 1;
  _pBM = pBM;
  _cbShowCursor = cbShow;
  _cbHideCursor = cbHide;
  Show();
}

/*******************************************************************
*
*                  Cursor
*
********************************************************************
Purpose:
*/

static void _Draw(void) {
  int x, y, xSize, ySize;
  LCD_PIXELINDEX* pData;
  GUI_LOCK();
  /* Save bitmap data */
  pData = GUI_ALLOC_h2p(_hBuffer);
  xSize = _Rect.x1 - _Rect.x0 + 1;
  ySize = _Rect.y1 - _Rect.y0 + 1;
  for (y = 0; y < ySize; y++) {
    for (x = 0; x < xSize; x++) {
      *(pData + x) = LCD_GetPixelIndex(_Rect.x0 + x, _Rect.y0 + y);
    }
    pData += _pBM->XSize;
  }
  GUI_UNLOCK();
  /* Draw bitmap */
  GL_DrawBitmap(_pBM, _Rect.x0, _Rect.y0);
}

static void _Undraw(void) {
  int x, y, xSize, ySize;
  LCD_PIXELINDEX* pData;
  /* Save bitmap data */
  GUI_LOCK();
  pData = GUI_ALLOC_h2p(_hBuffer);
  xSize = _Rect.x1 - _Rect.x0 + 1;
  ySize = _Rect.y1 - _Rect.y0 + 1;
  for (y = 0; y < ySize; y++) {
    for (x = 0; x < xSize; x++) {
      LCD_SetPixelIndex(x + _Rect.x0, y + _Rect.y0, *(pData + x));
    }
    pData += _pBM->XSize;
  }
  GUI_UNLOCK();
}


void GUI_CURSOR_Select(const GUI_BITMAP* pBM) {
  int AllocSize;
  GUI_LOCK();
  if (pBM != _pBM) {
    AllocSize = pBM->XSize * pBM->YSize * sizeof(LCD_PIXELINDEX);
    if (AllocSize != _AllocSize) {
      GUI_ALLOC_FreePtr(&_hBuffer);
    }
    _hBuffer = GUI_ALLOC_Alloc(AllocSize);
    _SetCursor(pBM, _Draw, _Undraw);
    _pBM = pBM;
    _CalcRect();
  }
  GUI_UNLOCK();
}


/*******************************************************************
*
*                  GUI_CURSOR_TempHide
*
********************************************************************
Purpose:
  Hide cursor if a part of the given rectangle is located in the
  rectangle used for the cursor. This routine is called automatically
  by the window manager. This way the window manager can
  automatically make sure that the cursor is always displayed
  correctly.
Params:
  pRect   Rectangle under consideration

*/
void GUI_CURSOR_TempHide(const GUI_RECT* pRect) {
  if (_CursorOn) {
    if (_CursorDeActCnt==0) {
      if ((pRect == NULL) | GUI_RectsIntersect(pRect, &_Rect)) {
        Hide();
      }
    }
  }
}

void GUI_CURSOR_TempUnhide(const GUI_RECT* pRect) {
  if (_CursorOn) {
    if (_CursorDeActCnt==0) {
      if ((pRect == NULL) | GUI_RectsIntersect(pRect, &_Rect)) {
        Show();
      }
    }
  }
}


/*******************************************************************
*
*                  GUI_CURSOR_Clear
*
********************************************************************

Purpose:
  Clears cursor.
*/

void GUI_CURSOR_Clear(void) {
  GUI_LOCK();
  Hide();
  _CursorOn = 0;
  /* Set function pointer which window manager can use */
  GUI_CURSOR_pfTempHide   = NULL;
  GUI_CURSOR_pfTempUnhide = NULL;
  GUI_UNLOCK();
}

/*******************************************************************
*
*                  GUI_CURSOR_Show
*
********************************************************************

Purpose:
  Shows cursor.
*/

void GUI_CURSOR_Show(void) {
  GUI_LOCK();
  Hide();
  _CursorOn = 1;
  if (!_pBM) {
    GUI_CURSOR_Select(&GUI_MouseArrow);
  }
  /* Set function pointer which window manager can use */
  GUI_CURSOR_pfTempHide   = GUI_CURSOR_TempHide;
  GUI_CURSOR_pfTempUnhide = GUI_CURSOR_TempUnhide;
  GUI_UNLOCK();
}

/*******************************************************************
*
*                  GUI_CURSOR_SetPosition
*
********************************************************************

Purpose:
  Sets position of cursor.
*/

void GUI_CURSOR_SetPosition(int x, int y) {
  GUI_LOCK();
  if ((_Rect.x0 != x) | (_Rect.y0 != y)) {
    if (_CursorOn) {
      Hide();
    }
    _Rect.x0 = x;
    _Rect.y0 = y;
    _CalcRect();
    if (_CursorOn) {
      Show();
    }
  }
  GUI_UNLOCK();
}






#else

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

#endif   /* GUI_SUPPORT_CURSOR */








?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美二区在线观看| 国产精品情趣视频| www.日韩大片| 久久av中文字幕片| 亚洲综合免费观看高清在线观看| 精品久久久久久无| 欧美亚一区二区| a级高清视频欧美日韩| 国产一区二区在线观看免费| 亚洲国产成人porn| 亚洲柠檬福利资源导航| 国产日本欧美一区二区| 欧美videossexotv100| 欧美系列亚洲系列| 91免费在线播放| 粉嫩av一区二区三区在线播放| 免费美女久久99| 日韩av在线免费观看不卡| 亚洲日本一区二区| 国产精品三级电影| 精品国产1区2区3区| 51午夜精品国产| 欧美女孩性生活视频| 欧美在线影院一区二区| 成人国产精品免费网站| 国产成人av电影在线| 国产一区欧美二区| 国产自产v一区二区三区c| 欧美aⅴ一区二区三区视频| 午夜伊人狠狠久久| 一区二区三区四区国产精品| 中文字幕中文字幕在线一区| 国产精品乱码久久久久久| 久久色在线视频| 久久久精品影视| 国产欧美日韩亚州综合| 国产片一区二区| 日本一区二区三区在线不卡| 国产欧美日韩在线观看| 亚洲国产成人在线| 中文字幕一区二区三区精华液| 国产日本亚洲高清| 中文字幕亚洲欧美在线不卡| 国产精品欧美极品| 亚洲另类中文字| 亚洲图片有声小说| 婷婷夜色潮精品综合在线| 婷婷综合另类小说色区| 久久电影网站中文字幕| 国产精品一区二区在线观看网站| 国产精品一区在线观看你懂的| 高清在线成人网| 不卡一区二区三区四区| 色综合久久中文综合久久97| 欧美视频在线观看一区| 这里只有精品99re| 精品对白一区国产伦| 国产亚洲精品资源在线26u| 国产精品美女久久久久久2018| 亚洲免费毛片网站| 日本欧美一区二区| 国产精品69毛片高清亚洲| 94-欧美-setu| 欧美一区二区在线播放| 久久中文字幕电影| 亚洲久本草在线中文字幕| 日韩高清一级片| 成人综合激情网| 欧美亚洲一区二区在线观看| 欧美成人三级在线| 中文字幕亚洲不卡| 香蕉av福利精品导航| 国产一区视频导航| 欧美亚洲一区二区在线观看| 日韩欧美一卡二卡| 综合激情网...| 日韩av电影免费观看高清完整版| 国产98色在线|日韩| 91精品1区2区| 精品久久人人做人人爽| 亚洲伦理在线精品| 久久99国产精品尤物| 91麻豆国产在线观看| 精品国产91乱码一区二区三区| 亚洲欧美经典视频| 国产一区二区三区在线看麻豆| 色婷婷香蕉在线一区二区| 精品国产乱码久久久久久影片| 亚洲婷婷综合色高清在线| 黄网站免费久久| 欧美性大战久久久| 国产女人18毛片水真多成人如厕| 首页欧美精品中文字幕| 成人免费视频视频| 欧美va在线播放| 亚洲成av人影院| 99国产欧美另类久久久精品| 精品美女一区二区三区| 五月婷婷欧美视频| 97久久超碰国产精品电影| 精品久久久久久综合日本欧美| 亚洲电影在线免费观看| 不卡av免费在线观看| 欧美成人a视频| 五月婷婷综合在线| 在线观看日韩电影| 亚洲欧洲一区二区在线播放| 国产一区二区在线观看免费 | 久久99精品久久只有精品| 色综合久久久久网| 亚洲国产成人午夜在线一区| 黄色日韩三级电影| 51久久夜色精品国产麻豆| 一区二区三区在线观看网站| eeuss鲁一区二区三区| 久久免费的精品国产v∧| 日韩精品成人一区二区在线| 美女一区二区三区| 亚洲国产视频一区二区| 欧美日韩小视频| 亚洲一区二区三区影院| 日本一区二区三区四区| 欧美亚洲日本国产| 日韩欧美综合在线| 亚洲国产精品精华液ab| 久久99精品一区二区三区三区| 欧美日韩专区在线| 一区二区三区中文字幕电影| av在线不卡电影| 欧美激情一区二区三区全黄| 激情久久五月天| 欧美精品一区在线观看| 久久97超碰国产精品超碰| 欧美mv日韩mv国产网站| 麻豆精品一区二区综合av| 欧美一区二区视频在线观看2020| 亚洲国产精品久久不卡毛片| 欧美最猛性xxxxx直播| 亚洲最大的成人av| 91福利在线看| 午夜亚洲国产au精品一区二区| 欧美日韩一级视频| 日韩二区三区在线观看| 91精品福利在线一区二区三区| 日本不卡不码高清免费观看| 欧美一区二区三区不卡| 免费观看一级特黄欧美大片| 欧美韩日一区二区三区| 丁香婷婷综合网| 亚洲欧美日本在线| 欧美日韩视频不卡| 日本伊人午夜精品| 精品国产成人系列| 成人av在线资源网站| 亚洲婷婷在线视频| 欧美日本韩国一区| 久久疯狂做爰流白浆xx| 国产亚洲欧美激情| 91麻豆123| 日韩成人免费电影| 久久免费午夜影院| 91美女在线看| 日本不卡一区二区| 久久精品在这里| 色av一区二区| 久久精品国产网站| 国产精品免费av| 欧美日产国产精品| 国产一区二区三区四区五区美女 | 日韩欧美国产1| 国产高清亚洲一区| 一区二区三区日韩精品| 日韩欧美一级二级三级久久久| 国产精品一二三四五| 亚洲一区二区三区爽爽爽爽爽 | 国产老肥熟一区二区三区| 国产精品国产馆在线真实露脸 | 国产喷白浆一区二区三区| 在线观看国产日韩| 国产精品影视网| 亚洲一区成人在线| 国产日韩欧美综合在线| 欧美性欧美巨大黑白大战| 久久精品国产77777蜜臀| 亚洲人妖av一区二区| 欧美成人性战久久| 色999日韩国产欧美一区二区| 精品影院一区二区久久久| 一区二区在线观看免费| 久久综合色鬼综合色| 欧美专区日韩专区| 国产九色sp调教91| 无码av免费一区二区三区试看 | 成人黄色大片在线观看| 日韩黄色免费电影| 一区二区三区欧美日韩| 久久亚洲欧美国产精品乐播| 欧美日韩美少妇| 色狠狠综合天天综合综合| 国产大陆亚洲精品国产|