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 }
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); }
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 } }
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); } } } } }
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; }