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

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

?? guicurs.c

?? 這是我移植到GBA游戲機上的uCGUI3.24 可以通過模擬器仿真
?? 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

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

static  GUI_HMEM _hBuffer;
static  GUI_RECT _Rect;
static  char _CursorIsVis;        /* Currently visible ? */
static  char _CursorOn;
static  const GUI_CURSOR* _pCursor;
static  U8   _CursorDeActCnt;
static  int  _AllocSize;
static  int  _x, _y;              /* Position of hot spot */



/*******************************************************************
*
*       static code
*
********************************************************************
*/
static void _Undraw(void) {
  int x, y, xSize, ySize;
  LCD_PIXELINDEX* pData;
  /* Save bitmap data */
  GUI_LOCK();
  if (_hBuffer) {
    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 += _pCursor->pBitmap->XSize;
    }
  }
  GUI_UNLOCK();
}


static void _Draw(void) {
  int x, y, xSize, ySize;
  LCD_PIXELINDEX* pData;
  const GUI_BITMAP* pBM;
  GUI_LOCK();
  if (_hBuffer) {
    /* Save bitmap data */
    pBM = _pCursor->pBitmap;
    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;
    }
    /* Draw bitmap */
    GL_DrawBitmap(pBM, _Rect.x0, _Rect.y0);
  }
  GUI_UNLOCK();
}

static void  _CalcRect(void) {
  if (_pCursor) {
    _Rect.x0 = _x - _pCursor->xHot;
    _Rect.y0 = _y - _pCursor->yHot;
    _Rect.x1 = _Rect.x0 + _pCursor->pBitmap->XSize - 1;
    _Rect.y1 = _Rect.y0 + _pCursor->pBitmap->YSize - 1;
  }
}


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

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

static void _Show(void) {
  GUI_RECT r;
  if (_CursorOn && (_CursorDeActCnt==0)) {
    _CursorIsVis = 1;
    r = GUI_Context.ClipRect;
    LCD_SetClipRectMax();
    _Draw();  
    GUI_Context.ClipRect = r;
  }
}

/*******************************************************************
*
*           _TempHide, _TempUnhide

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
Return value:
  0:      No action taken
          Cursor was not visible or not affected because rectangles
          did not overlap
  1:      Cursor hidden -> WM needs to restore cursor after
          drawing operation
*/


static char _TempHide(const GUI_RECT* pRect) {
  if (!_CursorIsVis) {
    return 0;             /* Cursor not visible -> nothing to do */
  }
  if ((pRect == NULL) | GUI_RectsIntersect(pRect, &_Rect)) {
    _Hide();              /* Cursor needs to be hidden */
    return 1;
  }
  return 0;               /* Cursor not affected -> nothing to do */
}

static void _TempUnhide(void) {
  _Show();
}

/*******************************************************************
*
*       Public code
*
********************************************************************
*/

/*******************************************************************
*
*       GUI_CURSOR_Activate
*       GUI_CURSOR_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();
}


/*******************************************************************
*
*       GUI_CURSOR_Select
*/

void GUI_CURSOR_Select(const GUI_CURSOR* pCursor) {
  int AllocSize;
  const GUI_BITMAP* pBM;
  GUI_LOCK();
  if (pCursor != _pCursor) {
    pBM = pCursor->pBitmap;
    _Hide();
    AllocSize = pBM->XSize * pBM->YSize * sizeof(LCD_PIXELINDEX);
    if (AllocSize != _AllocSize) {
      GUI_ALLOC_FreePtr(&_hBuffer);
    }
    _hBuffer = GUI_ALLOC_Alloc(AllocSize);
    _CursorOn = 1;
    _pCursor = pCursor;
    _CalcRect();
    _Show();
  }
  GUI_UNLOCK();
}




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

Purpose:
  Clears cursor.
*/

void GUI_CURSOR_Hide(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;
  /* Set function pointer which window manager can use */
  GUI_CURSOR_pfTempHide   = _TempHide;
  GUI_CURSOR_pfTempUnhide = _TempUnhide;
  if (!_pCursor) {
    GUI_CURSOR_Select(GUI_DEFAULT_CURSOR);
  } else {
    _Show();
  }
  GUI_UNLOCK();
}

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

Purpose:
  Sets position of cursor.
*/

void GUI_CURSOR_SetPosition(int x, int y) {
  GUI_LOCK();
  if ((_x != x) | (_y != y)) {
    _Hide();
    _x = x;
    _y = y;
    _CalcRect();
    _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一区二区三区免费野_久草精品视频
国产精品久久久久久久久久久免费看 | 欧美夫妻性生活| 精品国产一区二区三区av性色 | 亚洲一区二区视频在线| 另类小说视频一区二区| 色88888久久久久久影院按摩 | 久久精品72免费观看| 91女人视频在线观看| 精品久久久久一区二区国产| 一区二区视频免费在线观看| 国产综合久久久久久鬼色 | av不卡在线播放| 2014亚洲片线观看视频免费| 爽好多水快深点欧美视频| 99视频精品全部免费在线| 国产午夜亚洲精品不卡| 精品一区二区三区在线观看| 欧美另类变人与禽xxxxx| 亚洲私人黄色宅男| 国产成a人无v码亚洲福利| 精品成人私密视频| 午夜电影久久久| 欧美在线看片a免费观看| 最新国产の精品合集bt伙计| 国产精品18久久久久| 欧美va天堂va视频va在线| 午夜久久久久久| 欧美日韩久久久久久| 洋洋成人永久网站入口| 色噜噜狠狠成人中文综合| 亚洲女人****多毛耸耸8| 91在线高清观看| 国产精品电影一区二区三区| 99国产精品久久久久久久久久久| 久久精品欧美日韩精品| 成人伦理片在线| 国产精品久久久久久久久快鸭| 成人av一区二区三区| 日韩一区在线免费观看| 一本一道综合狠狠老| 亚洲自拍偷拍网站| 欧美精品久久天天躁| 青青草视频一区| 久久婷婷色综合| 99精品热视频| 亚洲一区在线播放| 91精品国产美女浴室洗澡无遮挡| 蜜臀av一区二区在线免费观看| 欧美成人午夜电影| 成人小视频在线观看| 亚洲免费在线播放| 欧美精品久久99久久在免费线| 免费人成精品欧美精品| 久久久久久久综合日本| 波多野结衣亚洲一区| 亚洲国产色一区| 欧美草草影院在线视频| 不卡一区二区在线| 日韩中文字幕区一区有砖一区| 精品国产亚洲一区二区三区在线观看| 国产成人精品aa毛片| 亚洲图片自拍偷拍| 精品va天堂亚洲国产| 91麻豆swag| 蜜乳av一区二区| 亚洲欧美日韩国产手机在线| 欧美一级一区二区| 国产一区在线不卡| 亚洲一区欧美一区| 久久久.com| 欧美老女人在线| 国产不卡高清在线观看视频| 午夜亚洲福利老司机| 国产人成亚洲第一网站在线播放| 在线免费不卡视频| 国产九九视频一区二区三区| 亚洲成人精品一区二区| 欧美国产一区二区| 欧美一区二区三区在线观看视频| 粉嫩aⅴ一区二区三区四区| 日本一道高清亚洲日美韩| 日韩美女视频19| 久久蜜桃av一区精品变态类天堂 | 国产东北露脸精品视频| 亚洲图片自拍偷拍| 1区2区3区国产精品| 欧美不卡一二三| 欧美日韩另类国产亚洲欧美一级| a4yy欧美一区二区三区| 精品一区二区在线播放| 日韩影视精彩在线| 亚洲美女在线国产| 国产精品视频看| 国产亚洲精品中文字幕| 欧美一区二区三区四区高清| 在线观看一区日韩| 91在线国产福利| 懂色av一区二区三区蜜臀| 美国av一区二区| 日韩av高清在线观看| 午夜激情一区二区| 亚洲高清视频在线| 亚洲高清免费在线| 亚洲成人第一页| 性欧美大战久久久久久久久| 亚洲女性喷水在线观看一区| 亚洲免费伊人电影| 亚洲综合在线视频| 一区二区三区在线视频播放 | 91蜜桃网址入口| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 久久97超碰国产精品超碰| 丝袜美腿亚洲综合| 天天操天天干天天综合网| 亚洲第一福利视频在线| 一区二区三区不卡视频在线观看| 综合电影一区二区三区 | 久久久精品免费网站| 欧美精品一区二区在线观看| 精品99一区二区三区| 国产日韩欧美精品在线| 国产婷婷一区二区| 国产精品久久久久婷婷| 亚洲女同ⅹxx女同tv| 亚洲444eee在线观看| 日韩中文字幕亚洲一区二区va在线 | 91精品国产综合久久香蕉的特点| 欧美二区三区91| 日韩午夜在线影院| 国产人成一区二区三区影院| 中文字幕在线不卡国产视频| 亚洲精品ww久久久久久p站| 亚洲444eee在线观看| 九九热在线视频观看这里只有精品| 久久99久久久久久久久久久| 国产一区二区0| 不卡一区二区在线| 欧美欧美欧美欧美首页| 久久免费视频色| 亚洲一区二区免费视频| 蜜桃在线一区二区三区| 国产成人免费在线视频| 欧美在线观看视频一区二区三区| 欧美一级欧美三级| 中文乱码免费一区二区| 午夜国产不卡在线观看视频| 国产一区二区三区在线观看精品| 91免费观看在线| 精品国产凹凸成av人导航| 日韩理论片中文av| 卡一卡二国产精品| 99综合影院在线| 日韩亚洲欧美成人一区| 中文字幕在线免费不卡| 蜜桃视频在线观看一区二区| 91婷婷韩国欧美一区二区| 91精品国产一区二区三区蜜臀| 久久蜜臀精品av| 同产精品九九九| 91在线视频网址| 精品国产一区二区三区久久影院 | 久久99国产精品免费网站| 91久久奴性调教| 国产欧美一区二区精品性色| 五月婷婷久久综合| 色综合久久综合网97色综合| 久久久久久免费毛片精品| 亚洲成人一二三| 色综合久久中文综合久久牛| 国产婷婷色一区二区三区四区 | 成人激情小说乱人伦| 69堂亚洲精品首页| 亚洲色图欧美激情| 成人福利视频在线看| 精品欧美久久久| 石原莉奈在线亚洲二区| 91久久精品国产91性色tv | 国产色产综合产在线视频| 婷婷一区二区三区| 91亚洲精品久久久蜜桃| 国产欧美视频一区二区| 激情另类小说区图片区视频区| 欧美日本高清视频在线观看| 亚洲码国产岛国毛片在线| jizz一区二区| 国产亚洲美州欧州综合国| 国产一区二区调教| 欧美va亚洲va在线观看蝴蝶网| 奇米精品一区二区三区在线观看一 | 色欧美88888久久久久久影院| 国产精品视频在线看| 国产精品一级在线| 久久久久久久综合日本| 国内成人免费视频| 精品国产3级a| 国产一区视频网站| 欧美极品美女视频| 粉嫩一区二区三区性色av| 国产精品久久久久久久午夜片| 国产suv精品一区二区883|