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

📄 glib.c

📁 三星 s3c6400测试代码
💻 C
📖 第 1 页 / 共 2 页
字号:
				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 + -