📄 guimsg.c
字号:
{
if((x<SCR_WIDTH)&&(y<SCR_HEIGHT))
{
iNum = y*SCR_WIDTH + x;
*LcdBaseAddReg =LOADLENGTHREG(iNum);
*LcdDataReg =((pRgb->R)<<11)|((pRgb->G)<<5)|(pRgb->B);
}
else
return ERR_OVER_RANGE;
}
else
return ERR_POINTER_EMPTY;
return GUI_SUCCESS;
}
//这个函数仅仅更新pScreen的framebuffer中x,y座标的点,颜色为pRgb
int DrawDot(SCR* pScreen,uint x,uint y,RGB* pRgb)
{
uint iNum;
if((pScreen!=NULL)&&(pRgb!=NULL))
{
if((x<SCR_WIDTH)&&(y<SCR_HEIGHT))
{
iNum = y*SCR_WIDTH + x;
pScreen->framebuffer[iNum].R = pRgb->R;
pScreen->framebuffer[iNum].G = pRgb->G;
pScreen->framebuffer[iNum].B = pRgb->B;
}
else
return ERR_OVER_RANGE;
}
else
return ERR_POINTER_EMPTY;
return GUI_SUCCESS;
}
//画水平线,直接更新pScreen的framebuffer
int DrawHLine(SCR* pScreen,uint x,uint y,uint iLen,RGB* pRgb)
{
uint iNum;
uint i;
if((pScreen!=NULL)&&(pRgb!=NULL))
{
if((x<SCR_WIDTH)&&(y<SCR_HEIGHT))
{
//如果线长超出屏幕,则到屏幕边为止
for(i = x;(i<(x+iLen))&&(i<SCR_WIDTH);i++)
{
iNum = y*SCR_WIDTH + i;
pScreen->framebuffer[iNum].R = pRgb->R;
pScreen->framebuffer[iNum].G = pRgb->G;
pScreen->framebuffer[iNum].B = pRgb->B;
}
}
else
return ERR_OVER_RANGE;
}
else
return ERR_POINTER_EMPTY;
return GUI_SUCCESS;
}
//画垂直线,直接更新pScreen的framebuffer
int DrawVLine(SCR* pScreen,uint x,uint y,uint iLen,RGB* pRgb)
{
uint iNum;
uint i;
if((pScreen!=NULL)&&(pRgb!=NULL))
{
if((x<SCR_WIDTH)&&(y<SCR_HEIGHT))
{
//如果线长超出屏幕,则到屏幕边为止
for(i = y;(i<(y+iLen))&&(i<SCR_HEIGHT);i++)
{
iNum = i*SCR_WIDTH + x;
pScreen->framebuffer[iNum].R = pRgb->R;
pScreen->framebuffer[iNum].G = pRgb->G;
pScreen->framebuffer[iNum].B = pRgb->B;
}
}
else
return ERR_OVER_RANGE;
}
else
return ERR_POINTER_EMPTY;
return GUI_SUCCESS;
}
//画矩形框,也直接更新pScreen的framebuffer
int DrawRect(SCR* pScreen,uint x,uint y,uint iWidth,uint iHeight,RGB* pRgb)
{
if((pScreen!=NULL)&&(pRgb!=NULL))
{
DrawHLine(pScreen, x, y, iWidth, pRgb);
DrawHLine(pScreen, x, y+iHeight-1, iWidth, pRgb);
DrawVLine(pScreen, x, y, iHeight, pRgb);
DrawVLine(pScreen, x+iWidth-1, y, iHeight, pRgb);
}
else
return ERR_POINTER_EMPTY;
return GUI_SUCCESS;
}
//填充整个矩形框,直接更新pScreen的framebuffer
int FillRect(SCR* pScreen,uint x,uint y,uint iWidth,uint iHeight,RGB* pRgb)
{
uint i;
if((pScreen!=NULL)&&(pRgb!=NULL))
{
for(i=0;i<iHeight;i++)
{
//modified by zzm
DrawHLine(pScreen, x, y+i, iWidth, pRgb);
//DrawVLine(pScreen, x, y+i, iWidth, pRgb);
}
}
else
return ERR_POINTER_EMPTY;
return GUI_SUCCESS;
}
unsigned int GetOffsetGBK(unsigned char Qh, unsigned char Wh)
{
unsigned int OffsetGBK;
/*if((Qh>=0x81)&&(Qh<0xa1))
{
OffsetGBK=190*(Qh-0x81)+(Wh-0x40)+0x0;
if(Wh>=0x80)
OffsetGBK--;
return OffsetGBK;
}*/
// if((Qh>=0xa1)&&(Qh<0xa8))
if(Qh>=0xa1)
{
// OffsetGBK=94*(Qh-0xa1)+(Wh-0xa1)+6080;
OffsetGBK=94*((Qh-0xa1)&0x7f)+((Wh-0xa1)&0x7f);
return OffsetGBK;
}
/*x维 = (机内码字节1-0xa1) & 0x7f;
y维 = (机内码字节2-0xa1) & 0x7f;
求汉字在X,Y维后, 那么按照每个汉字占用32个字节,
则可以得出汉字相对于字库头的偏移是 offset = (x*94 + y)*32; */
/*
if((Qh>=0xa8)&&(Qh<0xaa))
{
OffsetGBK=190*(Qh-0xa8)+(Wh-0x40)+6738;
if(Wh>=0x80)
OffsetGBK--;
return OffsetGBK;
}
if((Qh>=0xaa)&&(Qh<0xb0))
{
OffsetGBK=96*(Qh-0xaa)+(Wh-0x40)+7118;
if(Wh>=0x80)
OffsetGBK--;
return OffsetGBK;
}
if((Qh>=0xb0)&&(Qh<0xf8))
{
OffsetGBK=190*(Qh-0xb0)+(Wh-0x40)+7694;
if(Wh>=0x80)
OffsetGBK--;
return OffsetGBK;
}
if((Qh>=0xf8)&&(Qh<=0xff))
{
OffsetGBK=96*(Qh-0xf8)+(Wh-0x40)+21374;
if(Wh>=0x80)
OffsetGBK--;
return OffsetGBK;
}*/
return 0x00;
}
void WriteChinese_set(SCR* pScreen,RGB* pRgbFont,uint fontsize,uint x, uint y , unsigned char CharIndexH, unsigned char CharIndexL)
{
unsigned char *CharPtr;
unsigned char TempChar;
unsigned char Mask;
int i,j,iNum;
CharPtr=(unsigned char *)((unsigned int)GBK+(unsigned int)(fontsize*2*GetOffsetGBK(CharIndexH,CharIndexL)));
for(i=0;i<fontsize;i++)
{
Mask=0x80;
TempChar=*CharPtr;
CharPtr++;
//k = 0;
//while(k<(fontsize-8))
//{
for(j=0;j<8;j++)
{
//Dot1335(x+j,y+i,0x0,0x0,(Mask&TempChar));
iNum = (y+i)*SCR_WIDTH +x+j;
if(Mask&TempChar) //最高位为1
{
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B= pRgbFont->B;
}
else
{//modified by zzm
pScreen->framebuffer[iNum].R = ~(pRgbFont->R);
pScreen->framebuffer[iNum].G = ~(pRgbFont->G);
pScreen->framebuffer[iNum].B= ~(pRgbFont->B);
}
Mask>>=1;
}
Mask=0x80;
TempChar=*CharPtr;
CharPtr++;
//k += 8;
//}
for(j=0;j<(fontsize-8);j++)
{
//Dot1335(x+j+8,y+i,0x0,0x0,(Mask&TempChar));
iNum = (y+i)*SCR_WIDTH +x+j+8;
if(Mask&TempChar)
{
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B= pRgbFont->B;
}
else
{//modified by zzm
pScreen->framebuffer[iNum].R = ~(pRgbFont->R);
pScreen->framebuffer[iNum].G = ~(pRgbFont->G);
pScreen->framebuffer[iNum].B= ~(pRgbFont->B);
}
Mask>>=1;
}
}
}
void WriteChinese(SCR* pScreen,RGB* pRgbFont,uint fontsize,uint x, uint y , unsigned char CharIndexH, unsigned char CharIndexL)
{
unsigned char *CharPtr;
unsigned char TempChar;
unsigned char Mask;
int i,j,iNum;
CharPtr=(unsigned char *)((unsigned int)GBK+(unsigned int)(fontsize*2*GetOffsetGBK(CharIndexH,CharIndexL)));
for(i=0;i<fontsize;i++)
{
Mask=0x80;
TempChar=*CharPtr;
CharPtr++;
//k = 0;
//while(k<(fontsize-8))
//{
for(j=0;j<8;j++)
{
//Dot1335(x+j,y+i,0x0,0x0,(Mask&TempChar));
iNum = (y+i)*SCR_WIDTH +x+j;
if(Mask&TempChar) //最高位为1
{
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B= pRgbFont->B;
}
else
{
pScreen->framebuffer[iNum].R = 0x00;
pScreen->framebuffer[iNum].G = 0xff;
pScreen->framebuffer[iNum].B= 0x1f;
}
Mask>>=1;
}
Mask=0x80;
TempChar=*CharPtr;
CharPtr++;
//k += 8;
//}
for(j=0;j<(fontsize-8);j++)
{
//Dot1335(x+j+8,y+i,0x0,0x0,(Mask&TempChar));
iNum = (y+i)*SCR_WIDTH +x+j+8;
if(Mask&TempChar)
{
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B= pRgbFont->B;
}
else
{
pScreen->framebuffer[iNum].R = 0x00;
pScreen->framebuffer[iNum].G = 0xff;
pScreen->framebuffer[iNum].B= 0x1f;
}
Mask>>=1;
}
}
}
void WriteAsci_set(SCR* pScreen,RGB* pRgbFont,uint fontsize,uint x, uint y , unsigned char CharIndex)
{
unsigned char *CharPtr;
unsigned char TempChar;
unsigned char Mask;
int i,j,iNum;
CharPtr=(unsigned char *)((unsigned int)Asci+(unsigned int)(fontsize*2*(CharIndex)));
//注意fontsize<8和>16的问题
for(i=0;i<fontsize;i++)
{
Mask=0x80;
TempChar=*CharPtr;
CharPtr+=2;//跳过一个字节
for(j=0;j<fontsize/2;j++)
{
//Dot1335(x+j,y+i,0x0,0x0,(Mask&TempChar));
iNum = (y+i)*SCR_WIDTH +x+j;
if(Mask&TempChar)
{
//iNum = (y+i)*SCR_WIDTH +x+j;
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B = pRgbFont->B;
}
else
{//modified by zzm
pScreen->framebuffer[iNum].R = ~(pRgbFont->R);
pScreen->framebuffer[iNum].G = ~(pRgbFont->G);
pScreen->framebuffer[iNum].B= ~(pRgbFont->B);
}
Mask>>=1;
}
}
}
void WriteAsci(SCR* pScreen,RGB* pRgbFont,uint fontsize,uint x, uint y , unsigned char CharIndex)
{
unsigned char *CharPtr;
unsigned char TempChar;
unsigned char Mask;
int i,j,iNum;
CharPtr=(unsigned char *)((unsigned int)Asci+(unsigned int)(fontsize*2*(CharIndex)));
//注意fontsize<8和>16的问题
for(i=0;i<fontsize;i++)
{
Mask=0x80;
TempChar=*CharPtr;
CharPtr+=2;//跳过一个字节
for(j=0;j<fontsize/2;j++)
{
//Dot1335(x+j,y+i,0x0,0x0,(Mask&TempChar));
iNum = (y+i)*SCR_WIDTH +x+j;
if(Mask&TempChar)
{
//iNum = (y+i)*SCR_WIDTH +x+j;
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B = pRgbFont->B;
}
else
{
pScreen->framebuffer[iNum].R = 0x00;
pScreen->framebuffer[iNum].G = 0xff;
pScreen->framebuffer[iNum].B= 0x1f;
}
Mask>>=1;
}
}
}
/*
//注意fontsize必须大于8
void WriteChinese(SCR* pScreen,RGB* pRgbFont,uint fontsize,uint x, uint y , unsigned char CharIndexH, unsigned char CharIndexL)
{
unsigned char *CharPtr;
unsigned char TempChar;
unsigned char Mask;
int i,j,iNum;
CharPtr=(unsigned char *)((unsigned int)GBK1212+
(unsigned int)(24*GetOffetGBK(CharIndexH,CharIndexL)));
//CharIndexH=Next0=*RawText;
//CharIndexL=Next1=*(RawText+1);
for(i=0;i<fontsize;i++)
{
Mask=0x80;
TempChar=*CharPtr;
CharPtr++;
for(j=0;j<8;j++)
{
//Dot1335(x+j,y+i,0x0,0x0,(Mask&TempChar));
if(Mask&TempChar) //最高位为1
{
iNum = (y+i)*SCR_WIDTH +x+j;
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B= pRgbFont->B;
}
Mask>>=1;
//mask右移一位,下次判断次高位是否为"1"
}
Mask=0x80;
TempChar=*CharPtr;
CharPtr++;
for(j=0;j<(fontsize-8);j++)
{
//Dot1335(x+j+8,y+i,0x0,0x0,(Mask&TempChar));
if(Mask&TempChar)
{
iNum = (y+i)*SCR_WIDTH +x+j+8;
pScreen->framebuffer[iNum].R = pRgbFont->R;
pScreen->framebuffer[iNum].G = pRgbFont->G;
pScreen->framebuffer[iNum].B= pRgbFont->B;
}
Mask>>=1;
}
}
}
void WriteAsci(SCR* pScreen,RGB* pRgbFont,uint fontsize,uint x, uint y , unsigned char CharIndex)
{
unsigned char *CharPtr;
unsigned char TempChar;
unsigned char Mask;
int i,j,iNum;
CharPtr=(unsigned char *)((unsigned int)Asci+(unsigned int)(24*(CharIndex)));
for(i=0;i<fontsize;i++)
{
Mask=0x80;
TempChar=*CharPtr;
CharPtr+=2;
// for(j=0;j<7;j++)
for(j=0;j<6;j++) //modified by zzm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -