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

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

?? guicurs.c

?? uc/os 嵌入式系統圖形界面PC機模擬仿真工具
?? 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亚洲一区中文字幕| 中文字幕一区二区三区乱码在线| 久久aⅴ国产欧美74aaa| 国产日韩欧美一区二区三区综合| 韩国女主播一区二区三区| 视频一区视频二区在线观看| 亚洲精品ww久久久久久p站| 国产精品国产三级国产普通话三级 | 亚洲电影你懂得| 日韩理论在线观看| 亚洲美女一区二区三区| 五月婷婷综合激情| 日韩国产成人精品| 日韩国产精品久久久久久亚洲| 久久久久久久久岛国免费| 国产亚洲一二三区| 国产精品女上位| 亚洲天堂久久久久久久| 亚洲永久免费视频| 免费欧美在线视频| 国产一区欧美一区| 99亚偷拍自图区亚洲| 在线亚洲精品福利网址导航| 8x8x8国产精品| 久久美女艺术照精彩视频福利播放 | 国产精品一区专区| 成人综合婷婷国产精品久久蜜臀| 一区二区三区美女| 美女免费视频一区| 国产91富婆露脸刺激对白| 99国产精品国产精品毛片| 欧美日韩国产首页| 久久精品无码一区二区三区| 一区二区在线电影| 久久99国产精品麻豆| 色欧美片视频在线观看| 欧美v亚洲v综合ⅴ国产v| 国产精品久久久久久户外露出 | 国产精品美女久久久久久久久| 欧美视频一区二| 欧美精品一区二区三区四区 | 一区二区三区四区在线播放| 免费高清视频精品| 99这里只有久久精品视频| 91精品婷婷国产综合久久竹菊| 日本福利一区二区| 久久影院视频免费| 婷婷成人综合网| 91美女在线观看| 欧美激情综合网| 精东粉嫩av免费一区二区三区 | 欧美日韩一区高清| 国产丝袜美腿一区二区三区| 天使萌一区二区三区免费观看| 亚洲一区视频在线观看视频| 国产精品中文字幕一区二区三区| 久久成人免费网| 欧美日韩一级二级| 亚洲免费观看高清完整版在线观看| 国产欧美日韩综合| 久久成人久久鬼色| 911精品国产一区二区在线| 亚洲欧美日韩电影| a级精品国产片在线观看| 欧美v国产在线一区二区三区| 日韩精品综合一本久道在线视频| 欧美一级久久久| 亚洲午夜久久久久久久久电影院 | 在线播放欧美女士性生活| 欧美国产日韩a欧美在线观看 | 91在线视频网址| 国产欧美日韩另类一区| 麻豆精品国产传媒mv男同| 69堂国产成人免费视频| 亚洲国产精品久久不卡毛片| 欧美在线观看你懂的| 亚洲一区二区三区影院| 欧美三级视频在线播放| 亚洲国产综合91精品麻豆| 欧美在线免费视屏| 五月天中文字幕一区二区| 欧美精品久久99久久在免费线 | 亚洲精品日韩一| 一本大道av一区二区在线播放| 在线亚洲高清视频| 一区二区三区丝袜| 欧美日韩一区二区三区四区| 亚洲v中文字幕| 日韩午夜激情视频| 国产精品综合一区二区三区| 国产午夜亚洲精品理论片色戒 | 欧美激情在线观看视频免费| 国产成人一区二区精品非洲| 国产日韩欧美高清| 91亚洲精品久久久蜜桃| 中文字幕日韩一区二区| 91福利在线观看| 美国毛片一区二区三区| 国产日韩高清在线| 91福利视频网站| 麻豆91精品视频| 国产精品色在线观看| 欧美优质美女网站| 蜜臀av国产精品久久久久| 中文字幕成人网| 欧美日韩一级二级| 国产91精品在线观看| 亚洲在线视频一区| 久久免费偷拍视频| 91成人免费网站| 狠狠色综合日日| 一区2区3区在线看| 久久久天堂av| 欧美亚洲国产一卡| 国产成人综合精品三级| 一区二区免费视频| 欧美经典一区二区三区| 69堂亚洲精品首页| 99精品久久免费看蜜臀剧情介绍| 国产欧美精品一区二区色综合朱莉 | 大胆亚洲人体视频| 蜜桃视频在线观看一区二区| 久久九九99视频| 欧美久久久一区| 99re66热这里只有精品3直播| 中文一区在线播放| 精品少妇一区二区三区| 99久久精品国产毛片| 国产一区三区三区| 香蕉影视欧美成人| 日韩一区在线看| 欧美激情一区不卡| 精品处破学生在线二十三| 欧美三区在线观看| 91麻豆免费观看| 成人综合激情网| 国产又粗又猛又爽又黄91精品| 精品日韩欧美在线| 67194成人在线观看| 在线观看日韩国产| 国产91精品久久久久久久网曝门| 国产日产欧美一区二区三区| 91精品国产91热久久久做人人 | 欧美激情综合网| 久久亚洲精华国产精华液 | 亚洲国产精品传媒在线观看| 日韩精品一区二区三区中文不卡| 男女性色大片免费观看一区二区 | 欧美精品在线观看播放| 91国在线观看| 色综合久久中文字幕综合网| www.性欧美| 91在线观看地址| 色综合色综合色综合| 99精品国产91久久久久久| 色香蕉成人二区免费| 在线一区二区视频| 色94色欧美sute亚洲线路一久| 日韩vs国产vs欧美| 天天免费综合色| 视频在线观看91| 另类欧美日韩国产在线| 久久99精品国产麻豆婷婷洗澡| 国产日韩精品一区二区三区| 欧美激情一区二区三区不卡| 亚洲视频在线一区观看| 中文字幕人成不卡一区| 亚洲精品一二三| 婷婷国产在线综合| 精品亚洲成a人| 色综合天天在线| 制服丝袜一区二区三区| 精品国产污污免费网站入口 | 精品在线播放免费| 国产精品亚洲专一区二区三区| 国产精品久久久久7777按摩| 亚洲综合一二三区| 美女国产一区二区三区| 99久久久久久| 在线亚洲一区观看| 欧美一区二区视频观看视频| 日本一区二区三级电影在线观看 | 免费观看成人av| 成人18精品视频| 欧美丝袜丝交足nylons| 日韩视频一区二区在线观看| 国产婷婷色一区二区三区| 亚洲一区二区三区美女| 国产一区久久久| 欧美日韩在线综合| 久久精品无码一区二区三区| 亚洲国产日韩a在线播放性色| 国产精品久久久久久妇女6080| 日韩精品自拍偷拍| 亚洲欧洲99久久| 国内精品视频一区二区三区八戒| 天天综合网天天综合色| 懂色av一区二区三区蜜臀| 欧美巨大另类极品videosbest| 色狠狠综合天天综合综合|