⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guidev_auto.c

📁 ucGUI3.90a没有MemDev这是从3.24向上移植的
💻 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 + -