📄 guidev_copyfromlcd.c
字号:
/*! @file GUIDEV_CopyFromLCD.c
* Implementation of memory devices
*
* @author hiber modified
* @author Copyleft (C) 1981-2006, All Rights Givenup
* @date 04/18/2006
* @version
*
* @note 3.90a和3.24部分宏和函数名不同
* @attention
* @warning
* @bug
*
* @todo
* @example <file-name>
* @see
*/
#include "GUI_Private.h"
#include "GUIDebug.h"
#if GUI_SUPPORT_MEMDEV
extern void * _GUI_ALLOC_h2p_Lock(GUI_HMEM hMem);
#define GUI_ALLOC_H2P(h) _GUI_ALLOC_h2p_Lock(h)
#define GUI_ALLOC_FREE(handle) GUI_ALLOC_Free(handle)
#define GUI_ALLOC_LOCK(handle) _GUI_ALLOC_h2p_Lock(handle)
#define GUI_ALLOC_UNLOCK(handle)
#ifdef GUI_USAGE_H2P
#undef GUI_USAGE_H2P
#define GUI_USAGE_H2P(h) ((GUI_USAGE*)_GUI_ALLOC_h2p_Lock(h))
#endif
#ifdef GUI_MEMDEV_H2P
#undef GUI_MEMDEV_H2P
#define GUI_MEMDEV_H2P _GUI_ALLOC_h2p_Lock
#endif
//////////////////////////////////////////////////////////////////////////
#define LCD_LIMIT(Var, Op, Limit) if (Var Op Limit) Var = Limit
//! 从LCD 数据(视频存储器)拷贝一个存储设备的内容到存储设备,即回读LCD的内容到存储设备。
//! @param hMem 存储设备的句柄
void GUI_MEMDEV_CopyFromLCD(GUI_MEMDEV_Handle hMem)
{
/* Make sure memory handle is valid */
if (!hMem)
{
hMem = GUI_Context.hDevData;// 如果参数为NULL,尝试使用图形设备上下文中的句柄
}
if (!hMem)
{
return ;
}
// 大括号...
{
GUI_MEMDEV *pDevData = (GUI_MEMDEV*)GUI_ALLOC_LOCK(hMem); /* Convert to pointer */
LCD_RECT r;
int y;
int XMax;
GUI_USAGE *pUsage = 0;
GUI_MEMDEV_Handle hMemOld = GUI_Context.hDevData;
GUI_MEMDEV_Select(hMem);
if (pDevData->hUsage)
{
pUsage = GUI_USAGE_H2P(pDevData->hUsage);
}
/* Get bounding rectangle */
r.y0 = pDevData->y0;
r.x0 = pDevData->x0;
r.x1 = pDevData->x0 + pDevData->XSize - 1;
r.y1 = pDevData->y0 + pDevData->YSize - 1;
/* Make sure bounds are within LCD area so we can call driver directly */
LCD_LIMIT(r.x0, < , 0);
LCD_LIMIT(r.y0, < , 0);
LCD_LIMIT(r.x1, > , LCD_GET_XSIZE() - 1);
LCD_LIMIT(r.y1, > , LCD_GET_YSIZE() - 1);
XMax = r.x1;
for (y = r.y0; y <= r.y1; y++)
{
int x = r.x0;
LCD_PIXELINDEX *pData = (LCD_PIXELINDEX *)GUI_MEMDEV__XY2PTR(x, y);
if (pUsage)
{
GUI_USAGE_AddHLine(pUsage, x, y, r.x1 - r.x0 + 1);
}
for (; x <= XMax; x++)
{
*pData++ = LCD_L0_GetPixelIndex(x, y);
}
}
GUI_MEMDEV_Select(hMemOld);
}
GUI_ALLOC_UNLOCK(hMem);
}
#endif /* GUI_MEMDEV_SUPPORT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -