📄 msapi_osd.c
字号:
{
return;
}
else if ( ( pclrBtn->y + pclrBtn->height ) > NEWUI_MAIN_MENU_GWIN_HEIGHT )
{
return;
}
else*/ if ( pclrBtn->radius > pclrBtn->width / 2 || pclrBtn->radius > pclrBtn->height / 2 )
{
return;
}
/* draw round block */
msAPI_OSD_DrawRoundBlock(pclrBtn);
/* draw text */
if(pclrBtn->bStringIndexWidth == CHAR_IDX_1BYTE)
{
if(*pu8Str == 0)
return;
}
else
{
if(*((U16*)pu8Str) == 0)
return;
}
pclrBtn->x += pclrBtn->radius;
pclrBtn->width -= 2 * pclrBtn->radius;
msAPI_OSD_DrawText(font_handle, pu8Str, pclrBtn);
pclrBtn->x -= pclrBtn->radius;
pclrBtn->width += 2 * pclrBtn->radius;
}
#if 0
/*****************************************************************************************************/
void msAPI_OSD_DrawBitmap(BMPHANDLE Handle, U16 u16StartX, U16 u16StartY, GEBitmapFmt bmpfmt)
{
GEPoint v0;
v0.x = u16StartX;
v0.y = u16StartY;
if(bmpfmt.bBmpColorKeyEnable)
MDrv_GE_SetSCK(ENABLE, &bmpfmt.clrrange.color_s, &bmpfmt.clrrange.color_e);
//bmpfmt.bScale = FALSE;
MDrv_GE_DrawBitmap(Handle, &v0, &bmpfmt);
MDrv_GE_SetSCK(DISABLE, NULL, NULL);
}
#endif
/******************************************************************************/
/// API for draw block::
/// @param Handle \b IN bitmap handle
/// @param u16StartX \b IN x coordinate
/// @param u16StartY \b IN y coordinate
/// @param bmpfmt \b IN bitmap format
/******************************************************************************/
void msAPI_OSD_DrawBitmap(BMPHANDLE Handle, U16 u16StartX, U16 u16StartY, GEBitmapFmt bmpfmt)
{
#if GE_DRIVER_TEST
//if(bmpfmt.bBmpColorKeyEnable)
// MDrv_GE_SetSCK(ENABLE, &bmpfmt.clrrange.color_s, &bmpfmt.clrrange.color_e);
PESet.PE_Enable_Flag = GE_PE_FLAG_SCK ;
//PESet.PE_Enable_Flag = GE_PE_FLAG_ALPHABLENDING ;
PESet.sck_set.sck_hth.u32Num = 0xff00ff;
PESet.sck_set.sck_lth.u32Num = 0xff00ff;
PESet.sck_set.sck_mode = 0x11;
//PESet.ABL.abl_const = 0x808080;
//PESet.ABL.dcoef = PESet.ABL.scoef = 0x3;
MDrv_GE_PixelEngine(&PESet);
//MDrv_GE_SetAlpha(ENABLE,0x3, 0x3,0x80808080);
BitbltInfo.bmphandle = Handle;
BitbltInfo.BitbltCoordinate.v0_x = u16StartX;
BitbltInfo.BitbltCoordinate.v0_y = u16StartY;
BitbltInfo.BitbltCoordinate.width = bmpfmt.width;
BitbltInfo.BitbltCoordinate.height = bmpfmt.height;
BitbltInfo.BitbltCoordinate.v2_x = 0;
BitbltInfo.BitbltCoordinate.v2_y = 0;
BitbltInfo.dst_fm = 0x17;
BitbltInfo.src_fm = 0x17;
if(bmpfmt.bScale)
BitbltInfo.BmpFlag = GEBBT_FLAG_STBB;
else
BitbltInfo.BmpFlag = GE_FLAG_DEFAULT;
MDrv_GE_DrawBitmap2(&BitbltInfo);
//MDrv_GE_SetSCK(DISABLE, NULL, NULL);
PESet.PE_Enable_Flag = GE_PE_FLAG_DEFAULT ;
MDrv_GE_PixelEngine(&PESet);
#else
GEPoint v0;
v0.x = u16StartX;
v0.y = u16StartY;
if (bmpfmt.bBmpColorKeyEnable)
{
MDrv_GE_SetSCK(ENABLE, CK_OP_EQUQL, GE_FMT_ARGB8888, &bmpfmt.clrrange.color_s, &bmpfmt.clrrange.color_e);
}
bmpfmt.clrrange.color_s.r = 0xeF;
bmpfmt.clrrange.color_s.g = 0x0;
bmpfmt.clrrange.color_s.b = 0xeF;
bmpfmt.clrrange.color_e.r = 0xFF;
bmpfmt.clrrange.color_e.g = 0x0;
bmpfmt.clrrange.color_e.b = 0xFF;
MDrv_GE_SetSCK(ENABLE, CK_OP_EQUQL, GE_FMT_ARGB8888, &bmpfmt.clrrange.color_s, &bmpfmt.clrrange.color_e);
MDrv_GE_SetNearestMode(false);
MDrv_GE_SetPatchMode(true);
//bmpfmt.bScale = FALSE;
MDrv_GE_DrawBitmap(Handle, &v0, &bmpfmt);
MDrv_GE_SetNearestMode(false);
MDrv_GE_SetPatchMode(false);
MDrv_GE_SetSCK(DISABLE, CK_OP_EQUQL, GE_FMT_ARGB8888, NULL, NULL);
#endif
#if 0
MDrv_Timer_Delayms(500);
BitbltInfo.BmpFlag = GE_FLAG_DEFAULT;
MDrv_GE_DrawBitmap2(&BitbltInfo);
MDrv_Timer_Delayms(500);
if(bmpfmt.bScale)
BitbltInfo.BmpFlag = GEBBT_FLAG_STBB;
else
BitbltInfo.BmpFlag = GE_FLAG_DEFAULT;
MDrv_GE_DrawBitmap2(&BitbltInfo);
#endif
}
/******************************************************************************/
/// API for draw bitmap specifically for subtitle:
/// @param Handle \b IN bitmap handle
/// @param u16StartX \b IN x coordinate
/// @param u16StartY \b IN y coordinate
/// @param bmpfmt \b IN bitmap format
/******************************************************************************/
void msAPI_OSD_DrawBitmap_Subtitle(BMPHANDLE Handle, U16 u16StartX, U16 u16StartY, GEBitmapFmt bmpfmt)
{
GEPoint v0;
v0.x = u16StartX;
v0.y = u16StartY;
if (bmpfmt.bBmpColorKeyEnable)
{
MDrv_GE_SetSCK(ENABLE, CK_OP_EQUQL, GE_FMT_I8, &bmpfmt.clrrange.color_s, &bmpfmt.clrrange.color_e);
}
MDrv_GE_SetNearestMode(true);
MDrv_GE_SetPatchMode(true);
//bmpfmt.bScale = FALSE;
MDrv_GE_DrawBitmap(Handle, &v0, &bmpfmt);
MDrv_GE_SetNearestMode(false);
MDrv_GE_SetPatchMode(false);
MDrv_GE_SetSCK(DISABLE, CK_OP_EQUQL, GE_FMT_I8, NULL, NULL);
}
void msAPI_OSD_DrawColorKeyBitmap(BMPHANDLE Handle, U16 u16StartX, U16 u16StartY, GEBitmapFmt bmpfmt)
{
GEPoint v0;
v0.x = u16StartX;
v0.y = u16StartY;
if (bmpfmt.bBmpColorKeyEnable)
{
MDrv_GE_SetSCK(ENABLE, CK_OP_EQUQL, GE_FMT_ARGB8888, &bmpfmt.clrrange.color_s, &bmpfmt.clrrange.color_e);
}
if (bmpfmt.bScale && bmpfmt.bBmpColorKeyEnable)
MDrv_GE_SetNearestMode(true);
else
MDrv_GE_SetNearestMode(false);
MDrv_GE_SetPatchMode(true);
MDrv_GE_DrawBitmap(Handle, &v0, &bmpfmt);
MDrv_GE_SetNearestMode(false);
MDrv_GE_SetPatchMode(false);
MDrv_GE_SetSCK(DISABLE, CK_OP_EQUQL, GE_FMT_ARGB8888, NULL, NULL);
}
#endif // #if (!BOOTLOADER_SYSTEM)
/******************************************************************************/
/// API for set clip window::
/// @param x0 \b IN start x coordinate
/// @param y0 \b IN start y coordinate
/// @param x1 \b IN end x coordinate + 1 (not included in window)
/// @param y1 \b IN end y coordinate + 1 (not included in window)
/******************************************************************************/
void msAPI_OSD_SetClipWindow(U16 x0, U16 y0, U16 x1, U16 y1)
{
ClipWindow.x0 = x0;
ClipWindow.y0 = y0;
ClipWindow.x1 = x1;
ClipWindow.y1 = y1;
MDrv_GE_SetClipWindow(x0, y0, x1 - 1, y1 - 1);
}
void msAPI_OSD_GetClipWindow(U16 *pX0, U16 *pY0, U16 *pX1, U16 *pY1)
{
*pX0 = ClipWindow.x0;
*pY0 = ClipWindow.y0;
*pX1 = ClipWindow.x1;
*pY1 = ClipWindow.y1;
//MDrv_GE_GetClipWindow(pX0, pY0, pX1, pY1);
}
void msAPI_OSD_BackupClipWindow(void)
{
ClipWindowBackup.x0 = ClipWindow.x0;
ClipWindowBackup.y0 = ClipWindow.y0;
ClipWindowBackup.x1 = ClipWindow.x1;
ClipWindowBackup.y1 = ClipWindow.y1;
}
#if 1// kevin 071224 //(!BOOTLOADER_SYSTEM)
/******************************************************************************/
/// API for set Dither::
/// @param bEnable \b IN turn on/off
/******************************************************************************/
void msAPI_OSD_SetDither(BOOLEAN bEnable)
{
MDrv_GE_SetDither(bEnable);
}
#if (KEEP_UNUSED_FUNC == 1)
/******************************************************************************/
/// API for set rotation::
/// @param locrotate \b IN local rotation
/// @param glorotate \b IN global rotation
/******************************************************************************/
void msAPI_OSD_SetRotation(U8 locrotate,U8 glorotate)
{
MDrv_GE_SetRotate(locrotate);
}
#endif
#if 0
/******************************************************************************/
/// API for displaying dragging effect between two full-screen bitmap:
/// This effect will show the first pic, and will move to right of screen and the second pic will enter the left side of screen.
/// @param BMPHANDLE mainhandle \b, the main-menu bitmap handle (on the right side)
/// @param BMPHANDLE subhandle \b, the sub-mainmenu bitmap handle(on the left side)
/// @param OSD_SLIDE_SPEED SLIDESPEED \b, the sliding speed
/******************************************************************************/
void msAPI_OSD_BitmapDisplaySlideShow(BMPHANDLE mainhandle, BMPHANDLE subhandle, OSD_SLIDE_SPEED SLIDESPEED, COMBO_OSD_STATUS COMBOOSDSTATUS)
{
U8 u8FbID,u8FbID1;
Bitmap_Info BitmapTable,BitmapTable1;
GEBitmapFmt bmpfmt;
GEPoint ppoint;
U16 draw_w, draw_w_1;
MSAPI_OSDRegion CopyFB,PasteFB;
U16 i=0;
U16 j=0;
U16 interval;
// Get the properties of current FB, and the two drawing pics
u8FbID=msAPI_GOP_GWIN_GetFBfromGWIN(msAPI_GOP_GWIN_GetCurrentWinId());
MDrv_MIU_Get_BitmapInfo(mainhandle, &BitmapTable);
MDrv_MIU_Get_BitmapInfo(subhandle, &BitmapTable1);
//To generating a framebuffer to save the sub-mainmenu pic
u8FbID1=msAPI_GOP_GWIN_GetFreeFBID();
msAPI_GOP_GWIN_CreateFB(u8FbID1, BitmapTable1.width, BitmapTable1.height, BitmapTable1.fmt);
msAPI_GOP_GWIN_Switch2FB(u8FbID1);
ppoint.x=0;
ppoint.y=0;
bmpfmt.bScale=false;
bmpfmt.height=BitmapTable1.height;
bmpfmt.width=BitmapTable1.width;
MDrv_GE_DrawBitmap(subhandle, &ppoint, &bmpfmt);
//Switch gwin to display animate
msAPI_GOP_GWIN_Switch2Gwin(msAPI_GOP_GWIN_GetCurrentWinId());
//To generating a dissapear effect of right pic
msAPI_GOP_GWIN_Enable(msAPI_GOP_GWIN_GetCurrentWinId(),TRUE);
//parameter settings of main-menu pic
draw_w = BitmapTable.width;
ppoint.y=0;
bmpfmt.bScale=false;
//parameter settings of sub-mainmenu pic
CopyFB.fbID=u8FbID1;
PasteFB.fbID=u8FbID;
CopyFB.y=0;
PasteFB.y=0;
PasteFB.x=0;
CopyFB.height=BitmapTable1.height;
PasteFB.height=BitmapTable1.height;
draw_w_1=BitmapTable1.width;
//Start to generating dragging effect
//choose speed
switch (SLIDESPEED)
{
case OSD_SLIDE_SPEED_FAST:
{
interval=48;
break;
}
case OSD_SLIDE_SPEED_MEDIUM:
{
interval=16;
break;
}
case OSD_SLIDE_SPEED_SLOW:
{
interval=4;
break;
}
default:
interval=16;
break;
}
switch (COMBOOSDSTATUS)
{
case OSD_MAIN:
{
msAPI_OSD_BitmapScalingAnimate(mainhandle,OSD_SLOW);
osd_status=OSD_SUB_MAIN;
break;
}
case OSD_SUB_MAIN:
{
//main page slides to the right, and sub-mainmenu slides from left to right
for (i=1;i<=(draw_w)/interval;i+=1)
{
ppoint.x=i*interval;
MDrv_GE_DrawBitmap(mainhandle, &ppoint, &bmpfmt);
CopyFB.x=draw_w_1-i*interval;
CopyFB.width=i*interval;
PasteFB.width=i*interval;
msAPI_OSD_CopyRegion(&CopyFB, &PasteFB);
}
osd_status=OSD_SUB_SUB_MAIN;
break;
}
case OSD_SUB_SUB_MAIN:
{
//The reverse action of above action
//parameter settings of mainmenu pic
draw_w = BitmapTable.width;
ppoint.y=0;
bmpfmt.bScale=false;
//parameter settings of sub-mainmenu pic
CopyFB.fbID=u8FbID1;
PasteFB.fbID=u8FbID;
CopyFB.y=0;
PasteFB.y=0;
PasteFB.x=0;
CopyFB.height=BitmapTable1.height;
PasteFB.height=BitmapTable1.height;
draw_w_1=BitmapTable1.width;
for (j=1;j<=(draw_w_1)/interval-1;j+=1)
{
CopyFB.x=j*interval;
CopyFB.width=draw_w_1-j*interval;
PasteFB.width=draw_w_1-j*interval;
msAPI_OSD_CopyRegion(&CopyFB, &PasteFB);
if (j==(draw_w_1)/interval-1)
{
j=(draw_w_1)/interval;
}
ppoint.x=draw_w-j*interval;
MD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -