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

📄 glib.c

📁 基于ARM平台的控制系统,自己带有MINIGUI,可以直接在VC下运行界面演示程序
💻 C
📖 第 1 页 / 共 3 页
字号:
//
//


//==========变宽水平线===================================================
void _DrawHorizontalLine(int nStartX,int nStartY,int nLength,int nSize,COLOR c)
{
	int i;
	for (i=0;i<nSize;i++)
	{
		GHAL_put_line(nStartX,nStartY+i,nStartX + nLength,nStartY+i,c);
	}
}
//==========变宽垂直线===================================================
void _DrawVerticalLine(int nStartX,int nStartY,int nLength,int nSize,COLOR c)
{
	int i;
	for(i=0;i<nSize;i++)
	{
		GHAL_put_line(nStartX+i,nStartY,nStartX+i,nStartY+nLength,c);
	}
}

//=================空心矩形============================================
void RectLine(int left,int top,int right,int bottom,COLOR color)
{
	DEBUG_Assert(right>left);
	DEBUG_Assert(bottom>top);
	
	GHAL_put_line(left,top,right,top,color);
	GHAL_put_line(left,bottom-1,right,bottom-1,color);
	GHAL_put_line(left,top,left,bottom,color);
	GHAL_put_line(right,top,right,bottom,color);
}


//=================填充矩形============================================
void RectFill(int left,int top,int right,int bottom,COLOR color)
{
	int		i;
	
	DEBUG_Assert(right>left);
	DEBUG_Assert(bottom>top);
	
	for(i=top;i<bottom;i++)
	{
		GHAL_put_line(left,i,right,i,color);
	}
}
//=================填充带边矩形============================================
void Rect(int left,int top,int right,int bottom,COLOR border_color,COLOR fill_color)
{
	RectFill(left,top,right,bottom,fill_color);
	RectLine(left,top,right,bottom,border_color);
}
//==================大圆角矩形==========================================
unsigned char cArcSingle[4][6]={
	{0x00,0x0c,0x10,0x20,0x40,0x40},
	{0x00,0xc0,0x20,0x10,0x10,0x08},
	{0x40,0x40,0x20,0x10,0x0c,0x00},
	{0x08,0x08,0x10,0x20,0xc0,0x00},
};
unsigned char cArcDouble[4][8]={
	{0x0f,0x1f,0x38,0x70,0xe0,0xc0,0xc0,0xc0},
	{0xf0,0xf8,0x1c,0x0e,0x07,0x03,0x03,0x03},
	{0xc0,0xc0,0xc0,0xe0,0x70,0x38,0x1f,0x0f},
	{0x03,0x03,0x03,0x07,0x0e,0x1c,0xf8,0xf0},
};
void RoundRectangle_Big(int left,int top,int right,int bottom,int bThickBorder)
{
	NANA_BITMAP pic;

	DEBUG_Assert(right>left);
	DEBUG_Assert(bottom>top);
	//DEBUG_Assert((nSize == 1) || (nSize == 2));
	
	RectFill(left,top,right,bottom,COLOR_FORGROUND);

	if(!bThickBorder)
	{
		GHAL_put_line(left+6,top,right-6,top,COLOR_BORDER);
		GHAL_put_line(left+6,bottom-1,right-6,bottom-1,COLOR_BORDER);
		GHAL_put_line(left,top+6,left,bottom-6,COLOR_BORDER);
		GHAL_put_line(right-1,top+6,right-1,bottom-6,COLOR_BORDER);
		
		pic.biBitCount = 1;
		pic.biColorMask = COLOR_BKGROUND;
		pic.biWidth = 6;
		pic.biHeight = 6;
		pic.biReverseColor = 0;

		pic.pData = cArcSingle[0];
		GHAL_put_bmp(left,top,&pic);
		pic.pData = cArcSingle[1];
		GHAL_put_bmp(right-6,top,&pic);
		pic.pData = cArcSingle[2];
		GHAL_put_bmp(left,bottom-6,&pic);
		pic.pData = cArcSingle[3];
		GHAL_put_bmp(right-6,bottom-6,&pic);
	}else
	{
		RectFill(left,top,right,bottom,COLOR_FORGROUND);

		GHAL_put_line(left+8,top,right-8,top,COLOR_BORDER);
		GHAL_put_line(left+8,top+1,right-8,top+1,COLOR_BORDER);

		GHAL_put_line(left+8,bottom-1,right-8,bottom-1,COLOR_BORDER);
		GHAL_put_line(left+8,bottom-2,right-8,bottom-2,COLOR_BORDER);

		GHAL_put_line(left,top+8,left,bottom-8,COLOR_BORDER);
		GHAL_put_line(left+1,top+8,left+1,bottom-8,COLOR_BORDER);

		GHAL_put_line(right-1,top+8,right-1,bottom-8,COLOR_BORDER);
		GHAL_put_line(right-2,top+8,right-2,bottom-8,COLOR_BORDER);

		pic.biBitCount = 1;
		pic.biColorMask = COLOR_BKGROUND;
		pic.biWidth = 8;
		pic.biHeight = 8;
		pic.biReverseColor = 0;
		
		pic.pData = cArcDouble[0];
		GHAL_put_bmp(left+1,top+1,&pic);
		pic.pData = cArcDouble[1];
		GHAL_put_bmp(right-9,top+1,&pic);
		pic.pData = cArcDouble[2];
		GHAL_put_bmp(left+1,bottom-9,&pic);
		pic.pData = cArcDouble[3];
		GHAL_put_bmp(right-9,bottom-9,&pic);
	}
}

//=============超小圆角矩形=========================================
void RoundRectangle_little(int left,int top,int right,int bottom)
{
	DEBUG_Assert(right>left);
	DEBUG_Assert(bottom>top);

	GHAL_put_line(left+2,top,right-2,top,COLOR_BORDER);
	GHAL_put_line(left+2,bottom-1,right-2,bottom-1,COLOR_BORDER);
	GHAL_put_line(left,top+2,left,bottom-2,COLOR_BORDER);
	GHAL_put_line(right-1,top+2,right-1,bottom-2,COLOR_BORDER);

	GHAL_put_pixel(left+1,top+1,COLOR_BORDER);
	GHAL_put_pixel(left+1,bottom-2,COLOR_BORDER);
	GHAL_put_pixel(right-2,top+1,COLOR_BORDER);
	GHAL_put_pixel(right-2,bottom-2,COLOR_BORDER);
}

//===========自定义小圆角矩形======================================
void RoundRectangle_custom(int left,int top,int right,int bottom,
						   int round_mode)
{
	DEBUG_Assert(right>left);
	DEBUG_Assert(bottom>top);
	
	GHAL_put_line(left+2,top,right-2,top,COLOR_BORDER);
	GHAL_put_line(left+2,bottom-1,right-2,bottom-1,COLOR_BORDER);
	GHAL_put_line(left,top+2,left,bottom-2,COLOR_BORDER);
	GHAL_put_line(right-1,top+2,right-1,bottom-2,COLOR_BORDER);
	
	if(round_mode & ROUND_LEFTTOP)
	{
		GHAL_put_pixel(left+1,top+1,COLOR_BORDER);
	}else{
		GHAL_put_pixel(left,top+1,COLOR_BORDER);
		GHAL_put_pixel(left+1,top,COLOR_BORDER);
		GHAL_put_pixel(left,top,COLOR_BORDER);
	}
	if(round_mode & ROUND_LEFTBOTTOM)
	{
		GHAL_put_pixel(left+1,bottom-2,COLOR_BORDER);
	}else{
		GHAL_put_pixel(left,bottom-2,COLOR_BORDER);
		GHAL_put_pixel(left+1,bottom-1,COLOR_BORDER);
		GHAL_put_pixel(left,bottom-1,COLOR_BORDER);
	}
	if(round_mode & ROUND_RIGHTTOP)
	{
		GHAL_put_pixel(right-2,top+1,COLOR_BORDER);
	}else{
		GHAL_put_pixel(right-2,top,COLOR_BORDER);
		GHAL_put_pixel(right-1,top+1,COLOR_BORDER);
		GHAL_put_pixel(right-1,top,COLOR_BORDER);
	}
	if(round_mode & ROUND_RIGHTBOTOM)
	{
		GHAL_put_pixel(right-2,bottom-2,COLOR_BORDER);
	}else{
		GHAL_put_pixel(right-2,bottom-1,COLOR_BORDER);
		GHAL_put_pixel(right-1,bottom-2,COLOR_BORDER);
		GHAL_put_pixel(right-1,bottom-1,COLOR_BORDER);
	}
}


///////////////////////////////////////////////////////////////////
//
// Window related
//
//

///////////////////////////////////////////////////////////////////
// 函数名	:void BoxFrame(int nStartX,int nStartY,int nWidth,int nHeigth,int nTitleHeight)
// 说明  	:画对话框的外框
// 输入参数	:
//			 nStartX,nStartY该位图起始X,Y地址
//			 nWidth ,nHeigth 高和宽
//			 nTitleHeight   标题栏的高度
unsigned char cBoxFramArcSingle[4][6]={
	{0x00,0x0f,0x1f,0x3f,0x7f,0x7f},
	{0x00,0xc0,0xe0,0xf0,0xf0,0xf8},
	{0x40,0x40,0x20,0x10,0x0c,0x00},
	{0x08,0x08,0x10,0x20,0xc0,0x00},
};
unsigned char cBoxFramArcDouble[4][8]={
	{0x0f,0x1f,0x3f,0x7f,0xff,0xff,0xff,0xff},
	{0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff},
	{0xc0,0xc0,0xc0,0xe0,0x70,0x38,0x1f,0x0f},
	{0x03,0x03,0x03,0x07,0x0e,0x1c,0xf8,0xf0},
};
void RoundWindowFrame(int left,int top,int right,int bottom,int bThick,int nTitleHeight)
{
	NANA_BITMAP pic;

	DEBUG_Assert(right>left);
	DEBUG_Assert(bottom>top);
	
	pic.biBitCount = 1;
	pic.biColorMask = 0;
	pic.biReverseColor = 0;
	


	if(!bThick)
	{
		RectFill(left,top,right,bottom,COLOR_BKGROUND );

		DrawHorizontalLine(left+6,top,right-left-12,6);
		DrawHorizontalLine(left+1,top+6,right-left-2,nTitleHeight-6);
		DrawHorizontalLine(left+6,bottom-1,right-left-12,1);
		DrawVerticalLine(left,top+6,bottom-top-12,1);
		DrawVerticalLine(right-1,top+6,bottom-top-12,1);

		pic.biHeight = 6;
		pic.biWidth = 6;
		
		pic.pData = cBoxFramArcSingle[0];
		GHAL_put_bmp(left,top,&pic);
		pic.pData = cBoxFramArcSingle[1];
		GHAL_put_bmp(right-6,top,&pic);
		pic.pData = cBoxFramArcSingle[2];
		GHAL_put_bmp(left,bottom-6,&pic);
		pic.pData = cBoxFramArcSingle[3];
		GHAL_put_bmp(right-6,bottom-6,&pic);
	}else
	{
		RectFill(left,top,right,bottom,COLOR_BKGROUND );

		DrawHorizontalLine(left+8,top,right-left-16,8);
		DrawHorizontalLine(left+2,top+8,right-left-4,nTitleHeight-8);
		DrawHorizontalLine(left+8,bottom-2,right-left-16,2);
		DrawVerticalLine(left,top+8,bottom-top-16,2);
		DrawVerticalLine(right-2,top+8,bottom-top-16,2);

		pic.biHeight = 8;
		pic.biWidth = 8;
		
		pic.pData = cBoxFramArcDouble[0];
		GHAL_put_bmp(left,top,&pic);
		pic.pData = cBoxFramArcDouble[1];
		GHAL_put_bmp(right-8,top,&pic);
		pic.pData = cBoxFramArcDouble[2];
		GHAL_put_bmp(left,bottom-8,&pic);
		pic.pData = cBoxFramArcDouble[3];
		GHAL_put_bmp(right-8,bottom-8,&pic);
		
	}
}

void ButtonFrame(int nStartX,int nStartY,int nWidth,int nHeigth,int nPressed)
{
	int left,top,right,bottom;

	DEBUG_Assert(nWidth>0);
	DEBUG_Assert(nHeigth>0);
	
	left = nStartX;
	right = nStartX + nWidth;
	top = nStartY;
	bottom = nStartY + nHeigth;

	RectFill(left,top,right,bottom,COLOR_FORGROUND);

	if(nPressed == 0)
	{
		RoundRectangle_little(left,top,right-1,bottom-1);

		//shadow
		GHAL_put_line(right-1,top+3,right-1,bottom-2,COLOR_SHADOW);
		//shadow edge
		GHAL_put_line(left+3,bottom-1,right-2,bottom-1,COLOR_SHADOW);
		//shadow point
		GHAL_put_pixel(right-2,bottom-2,COLOR_BORDER);
		GHAL_put_pixel(right-3,bottom-2,COLOR_BORDER);
		GHAL_put_pixel(right-2,bottom-3,COLOR_BORDER);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -