📄 guighl.c
字号:
/***********************************************************************
* FILE: guiGhl.c
* MODULE: Graphic hardware layer
*
* PURPOSE:
* AUTHOR(S): YangCX
* GROUP: GUI Group
* DATE CREATED: 2001/10/22
* REFERENCE DOCUMENT ID:
* MODIFICATIONS:
* Date userName Description
* 2001/10/22 YangCX Create this file
**********************************************************************/
#include <stdlib.h>
#include "sysGUI.h"
#include "sysLCDC.h"
#include "sysMCU.h"
extern T_BYTE VRAM[LCDHEIGHT*LCDWIDTH*2];
T_EXTERN T_BOOL bInstantPaint;
T_MODULE T_VOID *InitScrDev(T_VOID)
{
init_dlcd_hardware(); // initial the LCD hardware
// return (T_VOID*)VRAM;
return (T_VOID*)(MAIN_WINDOW_ADDRESS+HalInfo.dwMemoryAddress);
}
T_MODULE T_VOID SetPalette(T_GAL_pGC pGC,T_WORD first, T_WORD count, T_GUI_COLOR *cmap)
{
return;
}
T_MODULE T_VOID GetPalette(T_GAL_pGC pGC,T_WORD first, T_WORD count, T_GUI_COLOR *cmap)
{
return;
}
T_MODULE T_VOID DrawPixel(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_GUI_PIXEL c)
{
T_BYTE *pTemp;
pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
*(T_UHWORD *)pTemp = (T_UHWORD)c;
if(bInstantPaint)
{
// StartDMA(0,y,(LCDWIDTH-1),y,(unsigned short *)&(VRAM[y*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));
}
}
T_MODULE T_GUI_PIXEL ReadPixel(T_GAL_pGC pGC, T_WORD x, T_WORD y)
{
T_BYTE *pTemp;
T_UHWORD temp;
pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
temp = *(T_UHWORD *)pTemp;
return (T_GUI_PIXEL)temp;
}
T_MODULE T_VOID DrawHLine(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_GUI_PIXEL c)
{
T_WORD i;
T_BYTE *pTemp;
pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
for(i=0;i<w;i++)
{
*(T_UHWORD *)pTemp = (unsigned short)c;
pTemp += 2;
}
if(bInstantPaint)
{
// StartDMA(0,y,(LCDWIDTH-1),y,(unsigned short *)&(VRAM[y*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));
}
}
T_MODULE T_VOID PutHLine (T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_VOID* buf)
{
T_BYTE *pData;
T_BYTE *pTemp;
pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
pData = (T_BYTE*)buf;
memcpy(pTemp,pData,w*2);
if(bInstantPaint)
{
// StartDMA(0,y,(LCDWIDTH-1),y,(unsigned short *)&(VRAM[y*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));
}
}
T_MODULE T_VOID GetHLine(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_VOID* buf)
{
T_BYTE *pData;
T_BYTE *pTemp;
pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
pData = (T_BYTE*)buf;
memcpy(pData,pTemp,w*2);
}
T_MODULE T_VOID DrawVLine(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD h, T_GUI_PIXEL c)
{
T_WORD i;
for(i = y;i < y + h;i++)
DrawPixel(pGC,x,i,c);
}
T_MODULE T_VOID PutVLine(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD h, T_VOID* buf)
{
T_WORD i;
T_UHWORD *pData;
T_UHWORD temp;
pData = (T_UHWORD*)buf;
for(i = y;i< y + h;i++)
{
temp = *pData++;
DrawPixel(pGC,x,i,temp);
}
}
T_MODULE T_VOID GetVLine(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD h, T_VOID* buf)
{
T_WORD i;
T_UHWORD *pData;
T_BYTE *pTemp;
pTemp = (T_BYTE*)pGC->addr;
pData = (T_UHWORD*)buf;
for(i = y;i< y + h;i++)
{
*pData++ = *(T_UHWORD *)(pTemp + i*pGC->LineLen + x*2);
}
}
T_MODULE T_VOID PutBox(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_WORD h, T_VOID* buf ,T_WORD BufLen)
{
T_BYTE *pData;
T_BYTE *pTemp;
T_WORD srcwidth = BufLen;
T_WORD hTemp,yTemp;
T_BYTE *pTempAddr;
pTempAddr = (T_BYTE*)pGC->addr;
pData = (T_BYTE*)buf;
hTemp = h;
yTemp = y;
while(h)
{
pTemp = pData;
memcpy((pTempAddr+y*pGC->LineLen+x*2),pData,w*2);
pData +=srcwidth;
h--;
y++;
}
if(bInstantPaint)
{
// StartDMA(0,yTemp,(LCDWIDTH-1),yTemp+hTemp,(unsigned short *)&(VRAM[yTemp*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));
}
}
T_MODULE T_VOID GetBox(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_WORD h, T_VOID* buf ,T_WORD BufLen)
{
T_BYTE *pData;
T_BYTE *pTemp;
T_WORD dstwidth = BufLen;
T_BYTE *pTempAddr;
pTempAddr = pGC->addr;
pData = (T_BYTE*)buf;
while(h)
{
pTemp = pData;
memcpy(pData,(pTempAddr+y*pGC->LineLen+x*2),w*2);
pData +=dstwidth;
h--;
y++;
}
}
T_MODULE T_VOID PutBoxMask(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_WORD h,
T_VOID *buf,
T_WORD BufLen,
T_GUI_PIXEL cxx
)
{
T_WORD width,dx;
T_UHWORD dstpixel;
T_GUI_UINT8 *pData;
T_UHWORD *pTemp;
T_WORD srcwidth = BufLen;
T_WORD hTemp,yTemp;
T_BYTE *pTempAddr;
pTempAddr = pGC->addr;
pData = (T_GUI_UINT8*)buf;
hTemp = h;
yTemp = y;
while(h)
{
width = w;
dx = x;
pTemp = (T_UHWORD*)pData;
while(width)
{
dstpixel = *(T_UHWORD *)pTemp++;
if ((T_GUI_PIXEL)dstpixel != cxx)
*(T_UHWORD *)(pTempAddr + y*pGC->LineLen + dx*2) = dstpixel;
width--;
dx++;
}
pData +=srcwidth;
h--;
y++;
}
if(bInstantPaint)
{
// StartDMA(0,yTemp,(LCDWIDTH-1),yTemp+hTemp,(unsigned short *)&(VRAM[yTemp*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));
}
}
T_MODULE T_VOID CopyBox(T_GAL_pGC pGC,T_WORD x1, T_WORD y1, T_WORD w, T_WORD h, T_WORD x2, T_WORD y2)
{
T_WORD size;
T_VOID* p;
size = w * h *2;
p = (T_VOID*)malloc(size);
if(p==NULL)
return;
GetBox(pGC,x1,y1,w,h,p,w*2);
PutBox(pGC,x2,y2,w,h,p,w*2);
free (p);
}
T_MODULE T_VOID Blit(
T_GAL_pGC DstpGC,
T_WORD DstX,
T_WORD DstY,
T_WORD w,
T_WORD h,
T_GAL_pGC SrcpGC,
T_WORD SrcX,
T_WORD SrcY
)
{
T_WORD size;
T_VOID* p;
size = w * h *2 ;
p = (T_VOID*)malloc(size);
if(p==NULL)
return;
GetBox(SrcpGC,SrcX,SrcY,w,h,p,w*2);
PutBox(DstpGC,DstX,DstY,w,h,p,w*2);
free (p);
}
/*function MapColor added for porting easily 2002.6.12*/
T_MODULE T_GUI_PIXEL MapColor(T_GAL_pGC pGC, T_GUI_COLOR *color)
{
T_UWORD v;
switch (pGC->bpp)
{
case 1:
v = 0;
if (color->b > 128 && color->g > 128 && color->r > 128)
v = 1;
return v;
case 2:
v = 0;
if (color->b >= 64)
v += 1;
if (color->g >= 64)
v += 2;
if (color->r >= 64)
v += 4;
if (color->b >= 192 || color->g >= 192 || color->r >= 192)
v += 8;
v>>=2;
return v;
case 4:
/* Now this is real fun. Map to standard EGA palette. */
v = 0;
if (color->b ==192 && color->g == 192 && color->r == 192)
{
v += 8;
return v;
}
if (color->b >= 64)
v += 1;
if (color->g >= 64)
v += 2;
if (color->r >= 64)
v += 4;
if (color->b >= 192 || color->g >= 192 || color->r >= 192)
v += 8;
return v;
case 8:
return GAL_RGB2PIXEL332 (color->r, color->g, color->b);
case 15:
return GAL_RGB2PIXEL555 (color->r, color->g, color->b);
case 16:
#ifdef GUI_4440PALETTE
return GAL_RGB2PIXEL4440(color->r, color->g, color->b);
#else
return GAL_RGB2PIXEL565 (color->r, color->g, color->b);
#endif
case 24:
case 32:
return GAL_RGB2PIXEL888 (color->r, color->g, color->b);
}
return GAL_FAILED;
}
T_VOID fnGUI_MemToScreen(T_WORD x1,T_WORD y1,T_WORD x2,T_WORD y2)
{
// StartDMA(0,0,x2,y2,(unsigned short *)&(VRAM[0]),MAIN_WINDOW_ADDRESS);
}
T_WORD fnGUI_GetLCDProperty(T_WORD which)
{
switch(which){
case 0:/*LCD WIDTH*/
return LCDWIDTH;
case 1:/*LCD HEIGHT*/
return LCDHEIGHT;
case 2:/*BPP*/
return LCDBPP;
default:
return -1;
}
}
T_GAL_ScreenDevice* tpGAL_ScrDev;
T_GAL_ScreenDevice tGAL_ScrDev = {
LCDWIDTH,/*LCD WIDTH*/
LCDHEIGHT,/*LCD HEIGHT*/
LCDBPP, /*BPP*/
GAL_TYPE_PACKED_PIXELS,
InitScrDev,
SetPalette,
GetPalette,
DrawPixel,
ReadPixel,
DrawHLine,
PutHLine,
GetHLine,
DrawVLine,
PutVLine,
GetVLine,
Blit,
PutBox,
GetBox,
PutBoxMask,
CopyBox,
MapColor /*MapColor function added for porting easily 2002.6.12*/
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -