📄 glib.c
字号:
while(x1>=x2)
{
GLIB_PutPixel2(x1,y1,cvalue);
if(e>0){y1-=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
GLIB_PutPixel2(x1,y1,cvalue);
if(e>0){x1-=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
}
void GLIB_PutLine4(int nX1, int nY1, int nX2, int nY2, u32 uCValue, ALPHA_SEL eSel)
{
int dx,dy,e;
u32 uTmpColor;
u32 uAlphaVal = (eSel == ALPHA_0) ? 0 : 1;
dx=nX2-nX1;
dy=nY2-nY1;
#if 0
uTmpColor &=
(oGlib.m_eCSpace == ARGB8) ? (ARGB8_ALPHA_MASK & uAlphaVal<<7 | uCValue) :
(oGlib.m_eCSpace == ARGB16) ? (ARGB16_ALPHA_MASK & uAlphaVal<<15 | uCValue) :
(oGlib.m_eCSpace == ARGB24) ? (ARGB24_ALPHA_MASK & uAlphaVal<<24 | uCValue) : 0xffffffff;
#else
uTmpColor =
(oGlib.m_eCSpace == ARGB8) ? (uAlphaVal<<7 | uCValue) :
(oGlib.m_eCSpace == ARGB16) ? (uAlphaVal<<15 | uCValue) :
(oGlib.m_eCSpace == ARGB24) ? (uAlphaVal<<23 | uCValue) : 0xffffffff;
#endif
if (uTmpColor == 0xffffffff)
Assert(0);
if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(nX1<=nX2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nY1+=1;e-=dx;}
nX1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(nY1<=nY2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nX1+=1;e-=dy;}
nY1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(nX1<=nX2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nY1-=1;e-=dx;}
nX1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(nY1>=nY2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nX1+=1;e-=dy;}
nY1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(nX1>=nX2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nY1+=1;e-=dx;}
nX1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(nY1<=nY2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nX1-=1;e-=dy;}
nY1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 5/8 octant
{
e=dy-dx/2;
while(nX1>=nX2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nY1-=1;e-=dx;}
nX1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(nY1>=nY2)
{
GLIB_PutPixel2(nX1,nY1,uTmpColor);
if(e>0){nX1-=1;e-=dy;}
nY1-=1;
e+=dx;
}
}
}
}
}
void GLIB_PutPalLine(int nPosX1, int nPosY1, int nPosX2, int nPosY2, u32 uData)
{
int dx,dy,e;
dx=nPosX2-nPosX1;
dy=nPosY2-nPosY1;
if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(nPosX1<=nPosX2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosY1+=1;e-=dx;}
nPosX1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(nPosY1<=nPosY2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosX1+=1;e-=dy;}
nPosY1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(nPosX1<=nPosX2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosY1-=1;e-=dx;}
nPosX1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(nPosY1>=nPosY2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosX1+=1;e-=dy;}
nPosY1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(nPosX1>=nPosX2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosY1+=1;e-=dx;}
nPosX1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(nPosY1<=nPosY2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosX1-=1;e-=dy;}
nPosY1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 5/8 octant
{
e=dy-dx/2;
while(nPosX1>=nPosX2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosY1-=1;e-=dx;}
nPosX1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(nPosY1>=nPosY2)
{
GLIB_PutPalData(nPosX1,nPosY1,uData);
if(e>0){nPosX1-=1;e-=dy;}
nPosY1-=1;
e+=dx;
}
}
}
}
}
void GLIB_ClearFrame2(u32 c)
{
int i, j;
for(j=0; j<oGlib.m_uVsz; j++)
for(i=0; i<oGlib.m_uHsz; i++)
GLIB_PutPixel2(i, j, c);
}
void GLIB_ClearFrame4(u32 uCValue, ALPHA_SEL eSel)
{
int i, j;
u32 uAlphaVal = (eSel == ALPHA_0) ? 0 : 1;
#if 0
u32 uTmpColor =
(oGlib.m_eCSpace == ARGB8) ? (ARGB8_ALPHA_MASK & uAlphaVal<<7 | uCValue) :
(oGlib.m_eCSpace == ARGB16) ? (ARGB16_ALPHA_MASK & uAlphaVal<<15 | uCValue) :
(oGlib.m_eCSpace == ARGB24) ? (ARGB24_ALPHA_MASK & uAlphaVal<<24 | uCValue) : 0xffffffff;
#else
u32 uTmpColor =
(oGlib.m_eCSpace == ARGB8) ? (uAlphaVal<<7 | uCValue) :
(oGlib.m_eCSpace == ARGB16) ? (uAlphaVal<<15 | uCValue) :
(oGlib.m_eCSpace == ARGB24) ? (uAlphaVal<<23 | uCValue) : 0xffffffff;
#endif
if (uTmpColor == 0xffffffff)
Assert(0);
for(j=0; j<oGlib.m_uVsz; j++)
for(i=0; i<oGlib.m_uHsz; i++)
GLIB_PutPixel2(i, j, uTmpColor);
}
void GLIB_ClearPalFrame(u32 uData)
{
int i, j;
// u32 uCnt = 0;
for(j=0; j<oGlib.m_uVsz; j++)
for(i=0; i<oGlib.m_uHsz; i++)
GLIB_PutPalData(i, j, uData);
}
void GLIB_InitFont(void)
{
oGlib.m_pFont8x15 = (u8 *)font8x15;
GLIB_SetFontColor(C_WHITE, C_BLACK, 0);
}
void GLIB_SetFontColor(COLOR eFontColor, COLOR eBgColor, bool bIsBgTransparent)
{
oGlib.m_fontColor = eFontColor;
oGlib.m_bgColor = eBgColor;
oGlib.m_bIsBgTransparent = bIsBgTransparent;
}
void GLIB_Printf(u32 x, u32 y, const char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
GLIB_PutString(x,y,string);
va_end(ap);
}
void GLIB_PutString(u32 x, u32 y, char *str)
{
int i,j,k;
int x1=x;
int oneLine;
u8 *oneLetter;
for(i=0;i<strlen(str);i++)
{
oneLetter = oGlib.m_pFont8x15+(str[i]-START_ASCII)*15;
for(j=0; j<=(FONT_END_LINE-FONT_START_LINE); j++)
{
oneLine=oneLetter[j+FONT_START_LINE];
for(k=0;k<8;k++)
{
if(oneLine&(1<<k))
GLIB_PutPixel(x1+7-k,y+j,oGlib.m_fontColor);
else if(!oGlib.m_bIsBgTransparent)
GLIB_PutPixel(x1+7-k,y+j,oGlib.m_bgColor);
}
}
x1=x1+8;
}
}
// Below code will be modified on modifying g2d(g2d class use this function)
#if 0
void GLIB::MakeColor(u32 uRed, u32 uGreen, u32 uBlue, u32& color)
{
if (oGlib.m_uBpp == 15) {
color = ((uRed&0x1f)<<10) | ((uGreen&0x1f)<<5) | (uBlue&0x1f);
} else if (oGlib.m_uBpp == 16) {
color = ((uRed&0x1f)<<11) | ((uGreen&0x3f)<<5) | (uBlue&0x1f);
} else if (oGlib.m_uBpp == 18) {
color = ((uRed&0x3f)<<12) | ((uGreen&0x3f)<<6) | (uBlue&0x3f);
} else if (oGlib.m_uBpp == 24) {
color = ((uRed&0xff)<<16) | ((uGreen&0xff)<<8) | (uBlue&0xff);
} else {
Assert(0);
}
}
#else
void GLIB_MakeColor(u32 uRed, u32 uGreen, u32 uBlue, u32 *color)
{
if (oGlib.m_uBpp == 16) {
*color = ((uRed&0x1f)<<11) | ((uGreen&0x3f)<<5) | (uBlue&0x1f);
} else if (oGlib.m_uBpp == 18) {
*color = ((uRed&0x3f)<<12) | ((uGreen&0x3f)<<6) | (uBlue&0x3f);
} else if (oGlib.m_uBpp == 24) {
*color = ((uRed&0xff)<<16) | ((uGreen&0xff)<<8) | (uBlue&0xff);
} else {
Assert(0);
}
}
#endif
void GLIB_SetAlpha(COLOR eColor, u32 uAlpha)
{
u32 idx = (u32)eColor;
oGlib.m_uColorValue[idx] = oGlib.m_uColorValue[idx]&(0x00ffffff)|((uAlpha&0x0f)<<24);
}
void GLIB_DrawPattern(u32 uWidth, u32 uHeight)
{
u32 uSubWidth, uSubHeight;
// uWidth and uHeight are multiple of eight
Assert( !((uWidth%8) || (uHeight%8)) );
GLIB_ClearFrame(C_WHITE);
// Draw Color Bar
uSubWidth = uWidth/8;
uSubHeight = uHeight/2;
GLIB_FillRectangle(0, 0, uSubWidth, uSubHeight, C_RED);
GLIB_FillRectangle(uSubWidth*1, 0, uSubWidth, uSubHeight, C_GREEN);
GLIB_FillRectangle(uSubWidth*2, 0, uSubWidth, uSubHeight, C_BLUE);
GLIB_FillRectangle(uSubWidth*3, 0, uSubWidth, uSubHeight, C_CYAN);
GLIB_FillRectangle(uSubWidth*4, 0, uSubWidth, uSubHeight, C_MAGENTA);
GLIB_FillRectangle(uSubWidth*5, 0, uSubWidth, uSubHeight, C_YELLOW);
GLIB_FillRectangle(uSubWidth*6, 0, uSubWidth, uSubHeight, C_BLACK);
GLIB_FillRectangle(uSubWidth*7, 0, uSubWidth, uSubHeight, C_WHITE);
// Draw Pattern
uSubWidth = uWidth/2;
GLIB_PutRectangle(0, uSubHeight, uWidth, uSubHeight, C_RED);
GLIB_PutLine(0, uSubHeight, uWidth-1, uHeight-1, C_BLACK);
GLIB_PutLine(uWidth, uSubHeight, 0, uHeight-1, C_MAGENTA);
uSubWidth = uWidth/2;
GLIB_PutLine(uSubWidth, uSubHeight, uSubWidth, uHeight-1, C_GREEN);
uSubHeight = uHeight*3/4;
GLIB_PutLine(0, uSubHeight, uWidth-1, uSubHeight, C_BLUE);
}
void GLIB_DrawPattern2(u32 uWidth, u32 uHeight)
{
u32 uSubHSz, uSubVSz;
Assert( !((uWidth%8) || (uHeight%8)) );
uSubHSz = uWidth/2;
uSubVSz = uHeight/4;
GLIB_FillRectangle(0, 0, uSubHSz, uSubVSz, C_GREEN);
GLIB_FillRectangle(uSubHSz, 0, uSubHSz, uSubVSz, C_BLUE);
GLIB_FillRectangle(0, uSubVSz, uSubHSz, uSubVSz, C_WHITE);
GLIB_FillRectangle(uSubHSz, uSubVSz, uSubHSz, uSubVSz, C_YELLOW);
uSubHSz = uWidth/4;
uSubVSz = uHeight/2;
GLIB_FillRectangle(0, uSubVSz, uSubHSz, uSubVSz, C_MAGENTA);
GLIB_FillRectangle(uSubHSz*1, uSubVSz, uSubHSz, uSubVSz, C_YELLOW);
GLIB_FillRectangle(uSubHSz*2, uSubVSz, uSubHSz, uSubVSz, C_CYAN);
GLIB_FillRectangle(uSubHSz*3, uSubVSz, uSubHSz, uSubVSz, C_WHITE);
uSubHSz = uWidth/2;
uSubVSz = uHeight/2;
GLIB_PutLine(uSubHSz, 0, 0, uSubVSz-1, C_BLACK);
GLIB_PutLine(uSubHSz, 0, uWidth-1, uSubVSz-1, C_BLACK);
GLIB_PutLine(0, uSubVSz-1, uSubHSz-1, uHeight-1, C_BLACK);
GLIB_PutLine(uSubHSz-1, uHeight-1, uWidth-1, uSubVSz-1, C_BLACK);
GLIB_PutLine(0, 0, uWidth-1, uHeight-1, C_RED);
GLIB_PutLine(uWidth-1, 0, 0, uHeight-1, C_GREEN);
GLIB_PutRectangle(0, 0, uWidth, uHeight, C_RED);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -