Пример #1
0
void drawSquare(UINT16 x, UINT16 y, UINT16 w, UINT16 h, UINT8 bShIdx)
{
	OSD_RECT r;
	VSCR*	lpVscr ;
#if 0//def USE_LIB_GE
	lpVscr= OSD_GetTaskVscr(osal_task_get_current_id());
	OSD_SetRect(&r, x, y, w, h);
	OSD_DrawStyleRect(&r, bShIdx, lpVscr);
	
	OSD_UpdateVscr(lpVscr);
#else
	OSD_SetRect(&r, x, y, w, h);
	OSD_DrawStyleRect(&r, bShIdx, NULL);
#endif
}
Пример #2
0
void drawSquare(UINT16 x, UINT16 y, UINT16 w, UINT16 h, UINT8 bShIdx)
{
	struct OSDRect r;

	OSD_SetRect(&r, x, y, w, h);
	OSD_DrawStyleRect(&r, bShIdx, NULL);
}
Пример #3
0
void OSD_DrawProgressBarTick(PPROGRESS_BAR b,PGUI_RECT r, UINT16 bg_idx,PGUI_VSCR pVscr)
{
	UINT16	wIconWidth = 0, wIconHeight = 0;
	if(PBAR_STYLE_RECT_STYLE & b->bStyle)
		OSD_DrawStyleRect(r, b->wTickFg, pVscr);//ERR_LIBGE,b->wTickBg is a style not color
	else
	{
		if(OSD_GetLibInfoByWordIdx(b->wTickFg, LIB_ICON, &wIconWidth, &wIconHeight))//get mid rect ,check if icon
			OSDDrawPicSolidRectangle(pVscr, r, b->wTickFg,C_MIXER);//ERR_LIBGE,b->wTickBg is a style not color
		else//color index
			OSD_DrawRect2Vscr(r,b->wTickFg,pVscr);//ERR_LIBGE,b->wTickBg is a style not color
	}
}
Пример #4
0
void OSD_DrawProgressBarCell(PPROGRESS_BAR b,UINT8 bStyleIdx,UINT32 nCmdDraw)
{ 
	PGUI_VSCR		pVscr;
	INT16 	wLeft, wDig,wDigWidth,wDigHeight,wCount;
	GUI_RECT	r,iconrect;
	GUI_RECT MidRect;
	PWINSTYLE  	lpWinSty;
	UINT32 pbarstyle;
	UINT16 wIconWidth,wIconHeight;
	INT32 start_pos,end_pos,page_width,reverse;
	
	wIconWidth = 0;
	wIconHeight = 0;
	lpWinSty = g_gui_rscfunc.osd_get_win_style(bStyleIdx);
	if(OSD_GetUpdateType(nCmdDraw) == C_UPDATE_CONTENT)
		pbarstyle = (UINT32)(~0);
	else
		pbarstyle = bStyleIdx;
	
	OSD_SetRect2(&r, &b->head.frame);
	if(OSD_GetAttrSlave(b))
		pVscr=OSD_DrawSlaveFrame(&r, bStyleIdx);
	else
		pVscr=OSD_DrawObjectFrame(&r, pbarstyle);
	OSD_ProgressBarGetMidRect(b,&MidRect);
	OSD_DrawStyleRect(&MidRect, b->wTickBg, pVscr);//ERR_LIBGE,b->wTickBg is a style not color
	
	if(!OSD_ProgressBarCheckValid(b))//check data 
		return;

	if((GetProgressBarStyle(b) & PROGRESSBAR_HORI_NORMAL)||(GetProgressBarStyle(b) & PROGRESSBAR_HORI_REVERSE))
	{
		if(b->bX==0)//analog bar
		{
			if(b->nPos<b->nMin)
				wDigWidth = 0;
			else
				wDigWidth = MidRect.uWidth*(b->nPos-b->nMin)/(b->nMax-b->nMin);

			if(GetProgressBarStyle(b)&PROGRESSBAR_HORI_NORMAL)
				OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY,wDigWidth,MidRect.uHeight);
			else //reverse type
				OSD_SetRect(&iconrect,MidRect.uStartX+MidRect.uWidth-wDigWidth,MidRect.uStartY,wDigWidth,MidRect.uHeight);

			OSD_DrawProgressBarTick(b, &iconrect, lpWinSty->wBgIdx, pVscr);
		}
		else//digital bar
		{
			INT32 i ;
			if((b->nBlocks-1)*b->bX>=MidRect.uWidth)// Interval width is too large
				return;
			wDig = MidRect.uWidth/b->nBlocks;//wDig is the total tick width
			if(wDig<=1)
				return;
			wDigWidth = (MidRect.uWidth-(b->nBlocks-1)*b->bX)/b->nBlocks;//wDigWidth is the width for Foreback winstyle draw
			if(wDigWidth==0)
				wDigWidth =1;//at least is 1
			wCount = b->nMax-b->nMin;
			if(GetProgressBarStyle(b)&PROGRESSBAR_HORI_NORMAL)
			{
				for(i = b->nMin,wLeft=MidRect.uStartX; (i < b->nPos)&&(wLeft<MidRect.uStartX+MidRect.uWidth); wLeft += wDig, i += wCount/b->nBlocks)
				{/*i += wCount/b->nBlocks may cause divisibility problem,So we should assure right blocks,nMax,nMin value when using digital bar*/
					if(wLeft+wDigWidth-wDig>MidRect.uStartX+MidRect.uWidth)
						OSD_SetRect(&iconrect,wLeft,MidRect.uStartY,MidRect.uStartX+MidRect.uWidth-wLeft,MidRect.uHeight);
					else if (wLeft+wDigWidth>MidRect.uStartX+MidRect.uWidth)
						OSD_SetRect(&iconrect,wLeft,MidRect.uStartY,MidRect.uStartX+MidRect.uWidth-wLeft,MidRect.uHeight);
					else
						OSD_SetRect(&iconrect,wLeft,MidRect.uStartY,wDigWidth,MidRect.uHeight);

					OSD_DrawProgressBarTick(b, &iconrect, lpWinSty->wBgIdx, pVscr);
				}
			}
			else//PROGRESSBAR_HORI_REVERSE
			{
				wLeft = MidRect.uStartX+MidRect.uWidth-wDig;
				for(i = b->nMin,wLeft=MidRect.uStartX+MidRect.uWidth-wDig; (i < b->nPos)&&(wLeft >MidRect.uStartX); wLeft -= wDig, i += wCount/b->nBlocks)
				{
					if(wLeft+wDigWidth-wDig<MidRect.uStartX)
						OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY,wLeft-MidRect.uStartX,MidRect.uHeight);
					else if (wLeft-wDigWidth<MidRect.uStartX)
						OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY,wLeft-MidRect.uStartX,MidRect.uHeight);
					else
						OSD_SetRect(&iconrect,wLeft,MidRect.uStartY,wDigWidth,MidRect.uHeight);

					OSD_DrawProgressBarTick(b, &iconrect, lpWinSty->wBgIdx, pVscr);
				}
			}
		}
	}
	else
	{
		if(b->bY==0)//analog bar
		{
			if(b->nPos<b->nMin)
				wDigHeight = 0;
			else
				wDigHeight = MidRect.uHeight*(b->nPos-b->nMin)/(b->nMax-b->nMin);
			if(GetProgressBarStyle(b)&PROGRESSBAR_VERT_NORMAL)
				OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY,MidRect.uWidth,wDigHeight);
			else
				OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY+MidRect.uHeight-wDigHeight,MidRect.uWidth,wDigHeight);				

			OSD_DrawProgressBarTick(b, &iconrect, lpWinSty->wBgIdx, pVscr);
		}
		else//digital bar
		{
			INT32 i ;
			INT32 wRectTop;
			if((b->nBlocks-1)*b->bY>=MidRect.uHeight)//Interval width is too large
				return;
			wDig = MidRect.uHeight/b->nBlocks;
			if(wDig<=1)
				return;
			wDigHeight = (MidRect.uHeight-(b->nBlocks-1)*b->bY)/b->nBlocks;
			if(wDigHeight==0)
				wDigHeight=1;
			wCount = b->nMax-b->nMin;
			if(GetProgressBarStyle(b)&PROGRESSBAR_VERT_NORMAL)
			{
				for(i = b->nMin,wRectTop=MidRect.uStartY; (i < b->nPos)&&(wRectTop<MidRect.uStartY+MidRect.uHeight); wRectTop += wDig, i += wCount/b->nBlocks)
				{
					if(wRectTop+wDig-wDigHeight>MidRect.uStartY+MidRect.uHeight)
						OSD_SetRect(&iconrect,MidRect.uStartX,wRectTop,MidRect.uWidth,MidRect.uStartY+MidRect.uHeight-wRectTop);
					else if (wRectTop+wDigHeight>MidRect.uStartY+MidRect.uHeight)
						OSD_SetRect(&iconrect,MidRect.uStartX,wRectTop,MidRect.uWidth,MidRect.uStartY+MidRect.uHeight-wRectTop);
					else
						OSD_SetRect(&iconrect,MidRect.uStartX,wRectTop,MidRect.uWidth,wDigHeight);
					OSD_DrawProgressBarTick(b, &iconrect, lpWinSty->wBgIdx, pVscr);
				}
			}
			else
			{
				for(i = b->nMin,wRectTop=MidRect.uStartY+MidRect.uHeight-wDig; (i < b->nPos)&&(wRectTop>MidRect.uStartY); wRectTop -= wDig, i += wCount/b->nBlocks)
				{
					if(wRectTop+wDigHeight-wDig<MidRect.uStartY)
						OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY,MidRect.uWidth,wRectTop-MidRect.uStartY);
					else if(wRectTop-wDigHeight<MidRect.uStartY)
						OSD_SetRect(&iconrect,MidRect.uStartX,MidRect.uStartY,MidRect.uWidth,wRectTop-MidRect.uStartY);
					else
						OSD_SetRect(&iconrect,MidRect.uStartX,wRectTop,MidRect.uWidth,wDigHeight);
					OSD_DrawProgressBarTick(b, &iconrect, lpWinSty->wBgIdx, pVscr);
				}
			}
		}
	}
}
Пример #5
0
UINT32 gelib_olst_focuslide(POBJECT_HEAD psobj,POBJECT_HEAD ptobj,UINT32 param)
{//start and terminal point
	UINT16 i,yy,pyy,tyy,byy,hy,urevert,uborder;
	GUI_RECT rcvscr,rctop,rctborder,*psrct,*ptrct;
	PGUI_VSCR pvscr;
	PGUI_REGION pgma,pmem;

	psrct = &psobj->frame;
	ptrct = &ptobj->frame;
	if(gui_rctsize(psrct,ptrct) == 0)
		return (UINT32)(-1);//do not support focus slide
	else if(ge_version <= GE_MODULE_M3329D)
		return (UINT32)(-2);

	urevert = 0;
	uborder = 0;
	if((psrct->uStartX) != (ptrct->uStartX))
		return (UINT32)(-3);//do not support horizontal focus slide
	else if(ABS((psobj->bID) - (ptobj->bID))>1)
		return (UINT32)(-4);//uborder = 1;//return (UINT32)(-4);
	else if((psrct->uStartY)>(ptrct->uStartY))
		urevert = 1;
	
	hy = (ptrct->uHeight);
	tyy = MIN((psrct->uStartY),(ptrct->uStartY));
	byy = MAX((psrct->uStartY),(ptrct->uStartY))+(ptrct->uHeight);
	rcvscr.uStartX = (ptrct->uStartX);
	rcvscr.uStartY = tyy;
	rcvscr.uWidth = (ptrct->uWidth);
	rcvscr.uHeight = (byy - tyy);
	rctop.uHeight = hy;
	rctop.uStartX = (ptrct->uStartX);
	rctop.uWidth = (ptrct->uWidth);

	pvscr = OSD_GetTaskVscr(osal_task_get_current_id());
	OSD_SetVscrModified(pvscr);
	OSD_UpdateVscr(pvscr);	
	OSD_SetVscrSuspend(pvscr);
	
	pmem = gelib_getdstrgn(pvscr->root_layer,pvscr->root_rgn);
	pgma = gelib_getdstrgn(pvscr->dst_layer,pvscr->dst_rgn);

	if(uborder == 1)
	{
		if((psrct->uStartY)<(ptrct->uStartY))
			urevert = 1;
		else
			urevert = 0;
		
		rctop.uStartY = (psrct->uStartX);
		rctop.uStartY = (psrct->uStartY);
		rctop.uWidth = (psrct->uWidth);
		rctop.uHeight = (psrct->uHeight);
		rctborder.uStartX = (ptrct->uStartX);
		rctborder.uStartY = (ptrct->uStartY);
		rctborder.uWidth = (ptrct->uWidth);
		rctborder.uHeight = (ptrct->uHeight);
		for(i = 0;i < (rctop.uHeight); i += 2)
		{
			if(urevert)
			{
				rctop.uHeight -= 2;
				rctborder.uStartY = (ptrct->uStartY + ptrct->uHeight -i);
			}
			else
			{
				rctop.uStartY += 2;
				rctop.uHeight -= 2;
			}
			
			rctborder.uHeight = i;
			OSD_DrawStyleRect(&rctop,psobj->style.bHLIdx,pvscr);
			OSD_DrawStyleRect(&rctborder,ptobj->style.bHLIdx,pvscr);
			
			OSD_DrawObject(psobj,C_UPDATE_CONTENT);
			OSD_DrawObject(ptobj,C_UPDATE_CONTENT);
			gelib_flush_rgn(pgma,pmem,&rcvscr,&rcvscr,0);
			
			OSD_DrawStyleRect(&rctop,psobj->style.bShowIdx,pvscr);
			OSD_DrawStyleRect(&rctborder,ptobj->style.bShowIdx,pvscr);
			GELIB_EFFECT_DELAY(0);
		}
	}
	else
	{
		for(i = tyy;i < (byy-hy); i += 2)
		{
			if(urevert)
				rctop.uStartY = (byy-hy-i + tyy);
			else
				rctop.uStartY = i;
			OSD_DrawStyleRect(&rctop,psobj->style.bHLIdx,pvscr);
			
			OSD_DrawObject(psobj,C_UPDATE_CONTENT);
			OSD_DrawObject(ptobj,C_UPDATE_CONTENT);
			gelib_flush_rgn(pgma,pmem,&rcvscr,&rcvscr,0);
			
			OSD_DrawStyleRect(&rctop,psobj->style.bShowIdx,pvscr);
			GELIB_EFFECT_DELAY(0);
		}
	}
	
	pvscr = OSD_GetVscr(&rcvscr,VSCR_NULL); 
	OSD_DrawObject(psobj,C_UPDATE_ALL);
	OSD_TrackObject(ptobj,C_UPDATE_ALL);
	OSD_ClearVscrSuspend(pvscr);
	OSD_SetVscrModified(pvscr);
	OSD_UpdateVscr(pvscr);
	
	return 0;
}