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

📄 uigraph.c

📁 嵌入工linux开发的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
		return;

	if(x0+radius>GUI_SCREEN_WIDTH-1)
		return;

	if(y0-radius<0)
		return;

	if(y0+radius>GUI_SCREEN_HEIGHT-1)
		return;


	guiEnterWCS();

	if(iStyle==GUI_HATCH)
		step = 2;
	else
		step = 1;

	x1 = x0-radius;

	preX = x1;  preDY = 0;
	for(ix=x1; ix<=x0; ix+=step)
	{
		iy = floor(sqrt(radius*radius-(x0-ix)*(x0-ix)));

		if(iy>preDY+1)
		{
			guiDrawLine (handle,  preX, y0-preDY, ix, y0-iy, iColor, iStyle );
			guiDrawLine (handle,  preX, y0+preDY, ix, y0+iy, iColor, iStyle );
			guiDrawLine (handle,  x0+x0-preX, y0-preDY, x0+x0-ix, y0-iy, iColor, iStyle );
			guiDrawLine (handle,  x0+x0-preX, y0+preDY, x0+x0-ix, y0+iy, iColor, iStyle );
			preX = ix;  preDY = iy;
			
		}

		/*if(iy==radius)
		{
			guiDrawLine ( preX, y0-radius, x0+x0-preX, y0-radius, iColor, iStyle );
			guiDrawLine ( preX, y0+radius, x0+x0-preX, y0+radius, iColor, iStyle );
		}*/

	}
	if(radius>5)
	{
		/*guiDrawHLine (x0-1, x0+1, y0-radius, iColor, iStyle );
		guiDrawHLine (x0-1, x0+1, y0+radius, iColor, iStyle );
		*/
		guiDrawLine (handle, x0-1, y0-radius, x0+1, y0-radius, iColor, iStyle );
		guiDrawLine (handle, x0-1, y0+radius, x0+1, y0+radius, iColor, iStyle );

	}

	guiExitWCS();
	return;
}


DLL_EXP(void) guiFillCircle (HNDL handle, int x0, int y0, int radius, int iColor, int iStyle)
{
	int ix, iy, x1, y1, preX, preDY;
	int i, step;

	iColor &= 0x000000ff;
	if(x0-radius<0)
		return;

	if(x0+radius>GUI_SCREEN_WIDTH-1)
		return;

	if(y0-radius<0)
		return;

	if(y0+radius>GUI_SCREEN_HEIGHT-1)
		return;

	guiEnterWCS();

	if(iStyle==GUI_HATCH)
		step = 2;
	else
		step = 1;

	//x1 = x0-radius;
	y1 = y0-radius;

	preX = x1;  preDY = 0;
	for(iy=y1+1; iy<=y0; iy+=step)
	{
		ix = floor(sqrt(radius*radius-(y0-iy)*(y0-iy)));

		if(iStyle==GUI_HATCH)
		{
				for(i=x0-ix; i<x0+ix; i++)
				{				
					if(i%2)
					{
						displayDrawPixel(i, iy, iColor);
						displayDrawPixel(i, y0+y0-iy, iColor);					
					}
				}
		
		}
		else
		{
			/*guiDrawHLine (x0-ix, x0+ix, iy, iColor, iStyle );
			guiDrawHLine (x0-ix, x0+ix, y0+y0-iy, iColor, iStyle );
			*/
			guiDrawLine (handle, x0-ix, iy, x0+ix, iy, iColor, iStyle );
			guiDrawLine (handle, x0-ix, y0+y0-iy, x0+ix, y0+y0-iy, iColor, iStyle );
			//preX = ix;  preDY = iy;
			
		}

	}

	if(radius>5)
	{
		/*
		guiDrawHLine (x0-2, x0+2, y0-radius, iColor, iStyle );
		guiDrawHLine (x0-2, x0+2, y0+radius, iColor, iStyle );		
		guiDrawVLine (x0-radius, y0-2, y0+2, iColor);
		guiDrawVLine (x0+radius, y0-2, y0+2, iColor);
		*/
		guiDrawLine (handle, x0-2, y0-radius, x0+2, y0-radius, iColor, iStyle );
		guiDrawLine (handle, x0-2, y0+radius, x0+2, y0+radius, iColor, iStyle );		
		guiDrawLine (handle, x0-radius, y0-2, x0-radius, y0+2, iColor, iStyle);
		guiDrawLine (handle, x0+radius, y0-2, x0+radius, y0+2, iColor, iStyle);
	}

	guiExitWCS();
	return;
}



#ifdef __WIN32__
DLL_EXP(void) guiShowImage( int x1, int y1, int x2, int y2,int s1,int s2, const BYTE *image )
{
	return;
}
#endif


/* call when init system */
void guiInitialGraphMode( void )   
{
	int iSize;
	unsigned char *pImgBuf;

	displayInitial();

	iSize = guiGetImageSize(0, 0, GUI_SCREEN_WIDTH-1, GUI_SCREEN_HEIGHT-1);
	pImgBuf = (unsigned char *)kernelMalloc(iSize+IMAGE_HEADER_LEN);  

	//gGraphMode = BMP_4BIT_STYLE;
	gScreenBuffer = pImgBuf;

}
 
DLL_EXP(int)  guiGetImageWidth( const BYTE *pImage )
{

	//struct pdaImage  *pImageHeader;
	int iWidth;
	
	if(pImage[4])
	{
		//pImageHeader = (struct pdaImage *)pImage;
		//iRet = (int)(pImageHeader->width[1]);
		iWidth = (int)pImage[1];
	}
	else
		iWidth = (int)pImage[3];

	return iWidth;

}

DLL_EXP(int)  guiGetImageHeight( const BYTE *pImage )
{
	//struct pdaImage  *pImageHeader;
	int    iHeight;
	
	if(pImage[4])
	{
		//pImageHeader = (struct pdaImage *)pImage;
		//iRet = (int)(pImageHeader->height[1]);
		iHeight = (int)pImage[3];
	}
	else
		iHeight = (int)pImage[7];

	return iHeight;
}


DLL_EXP(BYTE) guiGetImageMode( const BYTE *pImage )
{
	//struct pdaImage  *pImageHeader;
	unsigned char byMode;

	if(pImage[4]==0)
	{
		// from Disassembly
		/*if(pImage[11]==BMP_2BIT_STYLE)
			byMode = BMP_1BIT_STYLE;
		else if(pImage[11]==BMP_4BIT_STYLE)
			byMode = BMP_2BIT_STYLE;	
		*/

		byMode = pImage[11];
	}
	else
		byMode = pImage[4];

	return byMode;
}

                                                                               
                                    
// call displaySaveImageSize(x1, y1, x2, y2), notice header of image
DLL_EXP(int)  guiGetImageSize( int x1, int y1, int x2, int y2 )
{
	//pdaGetImageSize(x1, y1, x2, y2);

	int iSize, width, height, count;

	/*iSize = displaySaveImageSize(x1, y1, x2, y2);

#ifndef __WIN32__
	iSize += 12;
#endif
*/
	width = x2-x1+1;
	height = y2-y1+1;
	count  = (((width-1) >> 2) + 1);
	iSize = count*height+12;

	return iSize;
}

DLL_EXP(int)  guiGetImageSizeFromImage(const BYTE *pImage)
{
	int iWidth, iHeight, iSize, iCount;
	//BYTE byMode, byTemp;

	iWidth = guiGetImageWidth(pImage);
	iHeight = guiGetImageHeight(pImage);

	/*byMode= *(pImage+4);
	if(byMode==0) 
	{
		iSize =  guiGetImageSize(1,1, iWidth, iHeight);
		return iSize;
	}
	*/

	/*	if(*(pImage+4))
		byMode = *(pImage+4);
	else
		byMode = *(pImage+11);
	
	byTemp = gGraphMode;
	gGraphMode = byMode;
	iSize = displaySaveImageSize(0, 0, iWidth-1, iHeight-1);	
	gGraphMode = byTemp;

#ifndef __WIN32__
	iSize += 12;
#endif
*/
	iCount  = (((iWidth-1) >> 2) + 1);
	iSize = iCount*iHeight+12;
	return iSize;
}

// style unused
DLL_EXP(void) guiClearBlock(HNDL handle, int left, int top, int right, int bottom, int color, int style)
{
	int ViewLeft, ViewTop, ViewRight, ViewBottom;
	int x1, y1, x2, y2, iRet;
	TRect ViewRect;
	//int iRet;

	color &= 0x000000ff;

	iRet = _guiGetHandleView(handle, &ViewLeft, &ViewTop, &ViewRight, &ViewBottom);
	//if(!iRet)
	if(iRet!=STATUS_OK)
		return;

	guiEnterWCS();

	ViewRect.left  = ViewLeft;   ViewRect.top    = ViewTop;
	ViewRect.right = ViewRight;  ViewRect.bottom = ViewBottom;
	
	x1 = left;    y1 = top;
	x2 = right;    y2 = bottom;
	
	_guiConvertXY(handle, &x1, &y1);
	_guiConvertXY(handle, &x2, &y2);
	
#if 1
	iRet = _guiGetOverlapRect(&ViewRect, &x1, &y1, &x2, &y2);
	//if(!iRet)
	if(iRet!=STATUS_OK)
	{
		guiExitWCS();
		return;
	}
	
#endif
	pdaClearBlock(x1, y1, x2, y2 , color);

	guiExitWCS();
	return;
}

/*
#ifdef __WIN32__
unsigned int	__cursorStyle;
short		__cursorPosX=0,  __cursorPosY=0, __cursorWidth=3, __cursorHeight=12;
unsigned char 	__CURSOR_BUF[1024], __cursorToggle=0;

void pdaSetCursorStyle (short format, short width, short height, unsigned char blink, unsigned char divisor)
{
	// cursor off
	if (!width && !height)
	{

	   __cursorStyle = 0;
	   if ( __cursorToggle )
	   	return;
	}
	else
	{
		// cursor blink
		__cursorWidth = width;
		__cursorHeight = height;
		__cursorStyle = 0x80400000;
	}
	
	displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
                         __cursorPosY+__cursorHeight-1, __CURSOR_BUF);
    
	__cursorToggle = 0x00;	
	invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
                    __cursorPosY+__cursorHeight-1, __CURSOR_BUF);
	displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
                            __cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
	return;
}

void pdaSetCursorPos(short x, short y)
{
	if((__cursorToggle)&&(gEnableCursor))
	{
		displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
	
	}
	__cursorToggle = 0;
	
	__cursorPosX = x;
	__cursorPosY = y;
	if(gEnableCursor)
	{
		displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
		__cursorToggle = ~__cursorToggle;
	
	}
	return;
}

#endif

DLL_EXP(void) guiDisableCursor()
{
	gEnableCursor = FALSE;
	if(__cursorToggle)
	{
		displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
	
	}
	
	__cursorToggle = 0;

	gEnableCursor = FALSE;
	
	return;
}

DLL_EXP(void) guiEnableCursor()
{
	
	displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
                         __cursorPosY+__cursorHeight-1, __CURSOR_BUF);
    
	invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
                    __cursorPosY+__cursorHeight-1, __CURSOR_BUF);

	displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
                            __cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
	
	__cursorToggle = ~__cursorToggle;
	
	gEnableCursor = TRUE;

	return;
}


DLL_EXP(void) guiSetCursorSize(int width, int height)
{

	if((__cursorToggle)&&(gEnableCursor))
	{
		displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
	
	}
	__cursorToggle = 0;
	
	__cursorWidth = width;
	__cursorHeight = height;

	if(gEnableCursor)
	{
		displaySaveImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		invertImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);
		
		displayRestoreImage(__cursorPosX, __cursorPosY, __cursorPosX+__cursorWidth-1, 
			__cursorPosY+__cursorHeight-1, __CURSOR_BUF);                            
		__cursorToggle = ~__cursorToggle;
	
	}

	return;
}


DLL_EXP(void) guiGetCursorPos(int *left, int *top)
{
	
	*left = __cursorPosX;
	*top  = __cursorPosY;
	return;
}*/

⌨️ 快捷键说明

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