亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gui_basic.c

?? 彩屏控制
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
================================================================================
File Name : GUI_Basic.c
Author    : LiYOng
Date      : 2008-12-12 15:51
Version   : 1.0
Decription: This file contains some basic functions for GUI, It need the LCD
            Drive functions
================================================================================
*/
#include "GUI_Basic.H"
#include "GUI_Type.H"
#include "fontlib.h"
/*
================================================================================
Function     : GUI_DrawRectangle( )
Description  : Draw a rectangle
Input        : -pRect, point to a rectangle structure
output       : None
================================================================================
*/
void GUI_DrawRectangle( RECT* pRect )
{
	LINE line;

	line.xs = pRect->xs;
	line.xe = pRect->xe;
	line.ys = pRect->ys;
	line.ye = pRect->ys;
	line.Color = pRect->Color;
	LCDDrawHRLine( &line );

	line.xe = pRect->xs;
	line.ye = pRect->ye;
	LCDDrawHRLine( &line );

	line.xs = pRect->xe;
	line.ys = pRect->ye;
	LCDDrawHRLine( &line );

	line.xe = pRect->xe;
	line.ye = pRect->ys;
	LCDDrawHRLine( &line );
}
/*
================================================================================
Function     : GUI_DrawLine( )
Description  : Draw a line
Input        : -pLine, point to a line structure
output       : None
================================================================================
*/
void GUI_DrawLine( LINE* pLine )
{
	INT32S   dx;						// 直線x軸差值變量
	INT32S   dy;          	// 直線y軸差值變量
	INT32S    dx_sym;				// x軸增長方向,為-1時減值方向,為1時增值方向
	INT32S    dy_sym;				// y軸增長方向,為-1時減值方向,為1時增值方向
	INT32S   dx_x2;					// dx*2值變量,用于加快運算速度
	INT32S   dy_x2;					// dy*2值變量,用于加快運算速度
	INT32S   di;						// 決策變量

	POINT    point;
	LINE     line;

	line.xs = pLine->xs;
	line.ys = pLine->ys;
	line.xe = pLine->xe;
	line.ye = pLine->ye;
	line.Color = pLine->Color;

  point.Color = pLine->Color;

	dx = line.xe - line.xs;
  dy = line.ye - line.ys;

 /* 判斷增長方向,或是否為水平線、垂直線、點 */
	if( dx > 0 )					// 判斷x軸方向
	{
		dx_sym = 1;					// dx>0,設置dx_sym=1
	}
	else
	{
		if( dx < 0 )
		{
			dx_sym = -1;		  // dx<0,設置dx_sym=-1
		}
		else
		{
			LCDDrawHRLine( &line );
			return;
		}
	}

	if( dy > 0 )							// 判斷y軸方向
	{
		dy_sym = 1;					// dy>0,設置dy_sym=1
	}
	else
	{
		if( dy < 0 )
		{
			dy_sym = -1;				// dy<0,設置dy_sym=-1
		}
		else
		{  // dy==0,畫水平線,或一點
			LCDDrawHRLine( &line );
			return;
		}
	}

	/* 將dx、dy取絕對值 */
	dx = dx_sym * dx;
	dy = dy_sym * dy;

	/* 計算2倍的dx及dy值 */
	dx_x2 = dx*2;
	dy_x2 = dy*2;

 /* 使用Bresenham法進行畫直線 */
	if( dx >= dy )						// 對于dx>=dy,則使用x軸為基準
	{
		di = dy_x2 - dx;
    while( line.xs != line.xe )
    {
			point.x = line.xs;
			point.y = line.ys;
			LCDDrawPoint( &point );
			line.xs += dx_sym;
			if( di < 0 )
			{
				di += dy_x2;			// 計算出下一步的決策值
			}
			else
			{
				di += dy_x2 - dx_x2;
				line.ys += dy_sym;
			}
    }
		LCDDrawPoint( &point );		// 顯示最后一點
	}
	else								// 對于dx<dy,則使用y軸為基準
	{
		di = dx_x2 - dy;
    while( line.ys != line.ye )
    {
			point.x = line.xs;
			point.y = line.ys;
			LCDDrawPoint( &point );
			line.ys += dy_sym;
			if(di<0)
			{
				di += dx_x2;
			}
			else
			{
				di += dx_x2 - dy_x2;
				line.xs += dx_sym;
			}
    }
		LCDDrawPoint( &point );		// 顯示最后一點
	}
}
/*
================================================================================
Name: PrintFont
Function: Display a character at a special area
Input:	1.Xs : Start position X
		2.Ys : Start position Y
		3.pFont : A pointer of a font structure
		4.Character : The ASCII code of the character.
Output: None
Note: The start position is inputted as a parameter, And the end position is calculated by the FONT
		structure.
Author: LiYong
Date  : 2008.08.09
================================================================================
*/
void	GUI_DisplayFont( INT8U	Xs, INT8U Ys, FONT* pFont, char Character )
{
	BitBlock	Block;
	INT32U	Bytes;
	INT8U DataBuffer[64];
	INT8U i;
	const unsigned char *offset;

	Block.Height = pFont->Height;
	Block.Width = pFont->Width;
	Block.Color = pFont->Color;
	Block.BackColor = pFont->BackColor;
	Block.xs = Xs;
	Block.ys = Ys;

	Bytes = pFont->Width >> 3;
	if( pFont->Width & 0x07 )
	{
	 	Bytes ++;
	}
	Bytes *= pFont->Height;
	Bytes *= Character - ' ';

	if( pFont->Height == 18 )
	{
	 	offset = (const unsigned char*)&FontLib_18;
	}
	else if( pFont->Height == 14 )
	{
	 	offset = (const unsigned char*)&FontLib_14;
	}
	else
	{
		return;
	}
	offset += Bytes;
	for( i = 0; i < 36; i ++ )
	{
		//DataBuffer[i] = pgm_read_byte( offset + i );	
	}

	
	Block.pData = DataBuffer;

	PrintBitBlock( &Block );
}
/*
========================================================================================================
Name: DisplayStr
Function: Display a character at a special area
Input:
    1.Xs : Start position X
		2.Ys : Start position Y
		3.pFont : A pointer of a font structure
		4.Str : The start address of a string
Output: None
Note: The start position is inputted as a parameter, And the end position is calculated by the FONT
		structure.
Author: LiYong
Date  : 2008.08.09
========================================================================================================
*/
void	GUI_DisplayStr( INT8U xs, INT8U ys, FONT* pFont, char* Str )
{
	while( *Str )
	{
		GUI_DisplayFont( xs, ys, pFont, *Str );
	 	Str ++;
		xs += pFont->Width;
	}
}
/*
================================================================================
Name: GUI_DrawCircle( )
Function: Display a cycle at a special area
Input:	-pCycle, A pinter point to a cycle structure
Output: None
Author: LiYong
Date  : 2008.08.09
================================================================================
*/
void  GUI_DrawCircle( CIRCLE* pCircle )
{
   INT8S  draw_x0, draw_y0;			// 劊圖點坐標變量
   INT8S  draw_x1, draw_y1;
   INT8S  draw_x2, draw_y2;
   INT8S  draw_x3, draw_y3;
   INT8S  draw_x4, draw_y4;
   INT8S  draw_x5, draw_y5;
   INT8S  draw_x6, draw_y6;
   INT8S  draw_x7, draw_y7;
   INT8S  xx, yy;					// 畫圓控制變量

   INT8S  di;						// 決策變量
   POINT point;

   point.Color = pCircle->Color;

   /* 參數過濾 */
   if(0 == pCircle->r ) return;

   /* 計算出8個特殊點(0、45、90、135、180、225、270度),進行顯示 */
   point.x = draw_x0 = draw_x1 = pCircle->x;
   point.y = draw_y0 = draw_y1 = pCircle->y + pCircle->r;

   if( draw_y0 < GUI_LCM_YMAX ) LCDDrawPoint( &point );	// 90度

   point.x = draw_x2 = draw_x3 = pCircle->x;
   point.y = draw_y2 = draw_y3 = pCircle->y - pCircle->r;
   if( draw_y2 >= 0 ) LCDDrawPoint( &point );			// 270度


   point.x = draw_x4 = draw_x6 = pCircle->x + pCircle->r;
   point.y = draw_y4 = draw_y6 = pCircle->y;
   if(draw_x4<GUI_LCM_XMAX) LCDDrawPoint( &point );	// 0度

   point.x = draw_x5 = draw_x7 = pCircle->x - pCircle->r;
   point.y = draw_y5 = draw_y7 = pCircle->y;
   if(draw_x5>=0) LCDDrawPoint( &point );			// 180度
   if(1==pCircle->r) return;					// 若半徑為1,則已圓畫完


   /* 使用Bresenham法進行畫圓 */
   di = 3 - 2*pCircle->r;					// 初始化決策變量

   xx = 0;
   yy = pCircle->r;
   while(xx<yy)
   {  if(di<0)
	  {  di += 4*xx + 6;
	  }
	  else
	  {  di += 4*(xx - yy) + 10;

	     yy--;
		 draw_y0--;
		 draw_y1--;
		 draw_y2++;
		 draw_y3++;
		 draw_x4--;
		 draw_x5++;
		 draw_x6--;
		 draw_x7++;
	  }

	  xx++;
	  draw_x0++;
	  draw_x1--;
	  draw_x2++;
	  draw_x3--;
	  draw_y4++;
	  draw_y5++;
	  draw_y6--;
	  draw_y7--;


	  /* 要判斷當前點是否在有效范圍內 */
	  if( (draw_x0<=GUI_LCM_XMAX)&&(draw_y0>=0) )
	  {
	  	point.x = draw_x0;
	  	point.y = draw_y0;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x1>=0)&&(draw_y1>=0) )
	  {
	  	point.x = draw_x1;
	  	point.y = draw_y1;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x2<=GUI_LCM_XMAX)&&(draw_y2<=GUI_LCM_YMAX) )
	  {
	  	point.x = draw_x2;
	  	point.y = draw_y2;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x3>=0)&&(draw_y3<=GUI_LCM_YMAX) )
	  {
	  	point.x = draw_x3;
	  	point.y = draw_y3;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x4<=GUI_LCM_XMAX)&&(draw_y4>=0) )
	  {
	  	point.x = draw_x4;
	  	point.y = draw_y4;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x5>=0)&&(draw_y5>=0) )
	  {
	  	point.x = draw_x5;
	  	point.y = draw_y5;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x6<=GUI_LCM_XMAX)&&(draw_y6<=GUI_LCM_YMAX) )
	  {
	  	point.x = draw_x6;
	  	point.y = draw_y6;
	  	LCDDrawPoint( &point );
	  }
	  if( (draw_x7>=0)&&(draw_y7<=GUI_LCM_YMAX) )
	  {
	  	point.x = draw_x7;
	  	point.y = draw_y7;
	  	LCDDrawPoint( &point );
	  }
	}
}
/*
================================================================================
Name: GUI_DrawCircleFill( )
Function: Display a cycle at a special area and fill its area
Input:	-pCycle, A pinter point to a cycle structure
Output: None
Author: LiYong
Date  : 2008.08.09
================================================================================
*/
void  GUI_DrawCircleFill( CIRCLE* pCircle )
{
   INT8S  draw_x0, draw_y0;			// 劊圖點坐標變量
   INT8S  draw_x1, draw_y1;
   INT8S  draw_x2, draw_y2;
   INT8S  draw_x3, draw_y3;
   INT8S  draw_x4, draw_y4;
   INT8S  draw_x5, draw_y5;
   INT8S  draw_x6, draw_y6;
   INT8S  draw_x7, draw_y7;
   INT8S  fill_x0, fill_y0;			// 填充所需的變量,使用垂直線填充
   INT8S  fill_x1;
   INT8S  xx, yy;					// 畫圓控制變量

   INT8S  di;						// 決策變量
   POINT   point;
   LINE    line;

   point.Color = pCircle->Color;
   line.Color = pCircle->Color;



   /* 參數過濾 */
   if(0==pCircle->r) return;

   /* 計算出4個特殊點(0、90、180、270度),進行顯示 */
   point.x = draw_x0 = draw_x1 = pCircle->x;
   point.y = draw_y0 = draw_y1 = pCircle->y + pCircle->r;
   if(draw_y0<GUI_LCM_YMAX)
   {
      LCDDrawPoint( &point );
   }

   point.x = draw_x2 = draw_x3 = pCircle->x;
   point.y = draw_y2 = draw_y3 = pCircle->y - pCircle->r;
   if(draw_y2>=0)
   {
   		LCDDrawPoint( &point );
   }

   point.x = draw_x4 = draw_x6 = pCircle->x + pCircle->r;
   point.y = draw_y4 = draw_y6 = pCircle->y;
   if(draw_x4<GUI_LCM_XMAX)
   {
   		LCDDrawPoint( &point );	// 0度
      fill_x1 = draw_x4;
   }
   else
   {
   		fill_x1 = GUI_LCM_XMAX;
   }
   fill_y0 = pCircle->y;							// 設置填充線條起始點fill_x0
   fill_x0 = pCircle->x - pCircle->r;						// 設置填充線條結束點fill_y1
   if(fill_x0<0) fill_x0 = 0;
	 line.xs = fill_x0;
	 line.ys = fill_y0;
	 line.ye = fill_y0;
	 line.xe = fill_x1;
   LCDDrawHRLine( &line );

   point.x = draw_x5 = draw_x7 = pCircle->x - pCircle->r;
   point.y = draw_y5 = draw_y7 = pCircle->y;
   if(draw_x5>=0)
   {
   		LCDDrawPoint( &point );	// 180度
   }
   if(1==pCircle->r) return;


   /* 使用Bresenham法進行畫圓 */
   di = 3 - 2*pCircle->r;							// 初始化決策變量

   xx = 0;
   yy = pCircle->r;
   while(xx<yy)
   {  if(di<0)
	  {  di += 4*xx + 6;
	  }
	  else
	  {  di += 4*(xx - yy) + 10;

	     yy--;
		 draw_y0--;
		 draw_y1--;
		 draw_y2++;
		 draw_y3++;
		 draw_x4--;
		 draw_x5++;
		 draw_x6--;
		 draw_x7++;
	  }

	  xx++;
	  draw_x0++;
	  draw_x1--;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久日韩精品一区二区五区| 亚洲超碰97人人做人人爱| 亚洲免费在线视频| 性做久久久久久久久| 国产成人亚洲综合a∨婷婷图片| 色婷婷精品大在线视频| 精品国产欧美一区二区| 亚洲人成亚洲人成在线观看图片| 久久精品国产久精国产| 一本色道亚洲精品aⅴ| 久久精品免费在线观看| 日韩av一级片| 在线观看日产精品| 国产精品电影院| 国产91精品免费| 精品久久一区二区三区| 亚洲成人动漫精品| 91猫先生在线| 18成人在线视频| 粗大黑人巨茎大战欧美成人| 欧美变态tickle挠乳网站| 亚洲成人免费视频| 色婷婷av一区| 亚洲精品中文在线影院| 成人av网站在线观看免费| 国产网站一区二区三区| 激情六月婷婷综合| 精品成人免费观看| 久久疯狂做爰流白浆xx| 7777女厕盗摄久久久| 亚洲国产综合视频在线观看| 91蜜桃在线观看| 一区二区三区电影在线播| 99久久精品国产一区| 中文字幕在线观看不卡视频| 成a人片国产精品| 亚洲欧洲三级电影| 99麻豆久久久国产精品免费| 中文字幕乱码久久午夜不卡| 国产精品一卡二卡| 日本一区二区电影| av成人老司机| 一区二区三区精品在线| 欧美日韩国产综合视频在线观看| 亚洲精品va在线观看| 日本高清不卡一区| 亚洲国产成人av网| 欧美一区二区视频免费观看| 久久精品国产亚洲高清剧情介绍| 欧美电影免费观看高清完整版在线 | 国内成人自拍视频| 国产日韩亚洲欧美综合| 成a人片亚洲日本久久| 亚洲综合自拍偷拍| 日韩一级片网站| 国产一区二区三区蝌蚪| 国产精品久久久久久久久久久免费看 | 欧美韩日一区二区三区| 色综合中文字幕国产| 亚洲日本va在线观看| 欧美性猛交一区二区三区精品| 天天影视涩香欲综合网| 日韩一区和二区| 成人毛片在线观看| 亚洲国产毛片aaaaa无费看| 欧美精品久久久久久久多人混战| 久久99久国产精品黄毛片色诱| 国产精品网站在线观看| 欧美性xxxxxxxx| 丁香激情综合五月| 亚洲国产精品尤物yw在线观看| 精品国产精品网麻豆系列| 9色porny自拍视频一区二区| 丝袜诱惑制服诱惑色一区在线观看| 日韩欧美在线不卡| 色老综合老女人久久久| 久久66热偷产精品| 亚洲精品v日韩精品| 欧美精品一区二区三| 欧美午夜免费电影| 豆国产96在线|亚洲| 日韩精品福利网| 亚洲精品一二三| 久久亚洲春色中文字幕久久久| 欧美性高清videossexo| 国产成人在线免费| 日韩电影在线观看电影| 中文字幕一区二区三中文字幕 | 成人a级免费电影| 日韩精品乱码av一区二区| 中文一区二区在线观看| 日韩视频免费观看高清完整版在线观看 | 欧美极品xxx| 制服丝袜中文字幕一区| 色哟哟一区二区在线观看| 国产精品一品二品| 久久成人久久爱| 偷拍一区二区三区四区| 亚洲欧美日韩国产一区二区三区| 国产清纯白嫩初高生在线观看91 | 国产乱码精品一区二区三区av| 天天操天天综合网| 亚洲精品视频免费观看| 国产精品久久久久久久久免费相片 | 成人精品视频一区二区三区尤物| 七七婷婷婷婷精品国产| 亚洲一区在线观看网站| 亚洲精品国产高清久久伦理二区| 国产精品视频一二三| 久久久久国产精品麻豆ai换脸 | 日日欢夜夜爽一区| 亚洲一区免费视频| 亚洲免费成人av| 一区二区三区欧美在线观看| 亚洲天堂精品视频| 亚洲欧洲日产国产综合网| 国产精品进线69影院| 国产精品久久久99| 国产精品成人免费精品自在线观看 | 免费在线观看日韩欧美| 性欧美疯狂xxxxbbbb| 亚洲成a人v欧美综合天堂| 日韩高清中文字幕一区| 男人操女人的视频在线观看欧美| 蜜桃精品视频在线观看| 激情综合色丁香一区二区| 黑人巨大精品欧美一区| 国产一区二区三区日韩| 成人免费毛片高清视频| 91免费看片在线观看| 欧美三级中文字| 日韩一区二区三区免费观看| 精品久久久三级丝袜| 国产欧美一二三区| 亚洲精品亚洲人成人网在线播放| 亚洲国产精品一区二区www| 日韩av成人高清| 国产福利一区在线| 色综合久久久久网| 91超碰这里只有精品国产| 26uuu色噜噜精品一区| 亚洲欧美中日韩| 五月激情综合网| 国产精品综合一区二区三区| 972aa.com艺术欧美| 欧美精品xxxxbbbb| 久久久久久久久久看片| 一区二区三区毛片| 免费av网站大全久久| 成人午夜在线播放| 欧美无乱码久久久免费午夜一区| 精品入口麻豆88视频| 亚洲视频你懂的| 六月丁香婷婷久久| 99re亚洲国产精品| 日韩一卡二卡三卡| 亚洲婷婷在线视频| 色噜噜狠狠一区二区三区果冻| 日韩视频免费直播| 亚洲欧美区自拍先锋| 激情五月播播久久久精品| 91国产免费观看| 国产三级精品三级在线专区| 亚洲国产成人高清精品| 成人一级视频在线观看| 日韩视频一区二区三区在线播放| 亚洲三级在线免费观看| 黑人巨大精品欧美一区| 欧美日韩日日夜夜| 中文字幕一区二区三区不卡| 久久精品国产精品亚洲综合| 91丨porny丨中文| 欧美韩国一区二区| 看电影不卡的网站| 欧美美女一区二区三区| 亚洲日韩欧美一区二区在线| 韩国女主播一区| 日韩欧美你懂的| 日本vs亚洲vs韩国一区三区二区 | 国产精品久久夜| 激情文学综合插| 6080日韩午夜伦伦午夜伦| 亚洲黄一区二区三区| 成人av资源站| 中文字幕不卡三区| 国产在线播放一区三区四| 6080日韩午夜伦伦午夜伦| 亚洲大尺度视频在线观看| 91亚洲精品一区二区乱码| 国产精品久久久久一区| 丁香天五香天堂综合| 久久精品男人天堂av| 狠狠网亚洲精品| 久久久久久久久久久久电影| 美腿丝袜亚洲一区| 欧美本精品男人aⅴ天堂| 美女mm1313爽爽久久久蜜臀| 日韩午夜在线观看视频| 秋霞电影网一区二区| 欧美一区二区三区播放老司机|