📄 guidev_auto.c
字号:
/*! @file GUIDEV_Auto.c
* Implementation of automatic banding memory devices
*
* @author hiber modified
* @author Copyleft (C) 1981-2006, All Rights Givenup
* @date 04/18/2006
* @version
*
* @note
* @attention
* @warning
* @bug
*
* @todo
* @example <file-name>
* @see
*/
#include "GUI_Protected.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
//////////////////////////////////////////////////////////////////////////
//! 建立一个自动设备对象
//! @param pAutoDev 一个GUI_AUTODEV 对象的指针
//! @return 通常是 0,保留供以后使用。
int GUI_MEMDEV_CreateAuto(GUI_AUTODEV * pAutoDev)
{
pAutoDev->FirstCall = 1;
return 0;
}
//! 删除一个自动设备对象
//! @param pAutoDev 一个GUI_AUTODEV 对象的指针
void GUI_MEMDEV_DeleteAuto(GUI_AUTODEV * pAutoDev)
{
GUI_USE_PARA(pAutoDev);// do nothing!
}
//! 使用一个分片存储设备执行一个指定的绘图函数。
//! @param pAutoDev 一个 GUI_AUTODEV 对象的指针。
//! @param pAutoDevInfo 一个 GUI_AUTODEV_INFO 对象的指针。
//! @param pfDraw 用户定义要执行的绘图函数的指针。
//! @param pData 一个由绘图函数传递的数据结构的指针。
//! @return 如果成功返回0,函数执行失败返回1
//! @note
int GUI_MEMDEV_DrawAuto(GUI_AUTODEV *pAutoDev, GUI_AUTODEV_INFO *pAutoDevInfo,
GUI_CALLBACK_VOID_P *pfDraw, void *pData)
{
GUI_RECT rTemp;
GUI_HMEM hMem = GUI_MEASDEV_Create();
if (!hMem)
{
return 1;
}
GUI_MEASDEV_Select(hMem);
/* Measure area to draw */
if (pAutoDev->FirstCall)
{
/* Measure complete area */
pAutoDevInfo->DrawFixed = 1;
pfDraw(pData);
GUI_MEASDEV_GetRect(hMem, &pAutoDev->rView);
/* Measure variable area only */
GUI_MEASDEV_ClearRect(hMem);
pAutoDevInfo->DrawFixed = 0;
pfDraw(pData);
GUI_MEASDEV_GetRect(hMem, &pAutoDev->rPrev);
}
else
{
/* Measure variable area only */
pfDraw(pData);
GUI_MEASDEV_GetRect(hMem, &pAutoDev->rView);
rTemp = pAutoDev->rView;
GUI_MergeRect(&pAutoDev->rView, &pAutoDev->rView, &pAutoDev->rPrev);
pAutoDev->rPrev = rTemp;
}
GUI_MEASDEV_Delete(hMem);
/* Do the actual drawing */
pAutoDevInfo->DrawFixed = 1;
if (GUI_MEMDEV_Draw(&pAutoDev->rView, pfDraw, pData, 0, GUI_MEMDEV_NOTRANS))
{
return 1;
}
pAutoDevInfo->DrawFixed = 0;
pAutoDev->FirstCall = 0;
return 0;
}
#else
void GUIDEV_Auto(void) {} /* avoid empty object files */
#endif /* GUI_SUPPORT_MEMDEV */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -