📄 fsgui_bmpui.c
字号:
//make some changes for the GUI not blink .
if(HL_show == fsnav_dir_HL)
ShowCurrentDirPlaying();
else
{
FSGUI_ClearArea(FS_AREA_DIRITEM,HL_show);
FSShowDirIcon();
ShowDirItem(HL_show,iso9660_dir[pFsJpeg->dir_array[HL_show]].name);//resume the last HL
}
break;
case CNT_AREA_MP3BUTTON:
{
if (pFsJpeg->gifsFuncBtn== FS_FUNC_MP3)
FSGUI_DrawOneButton(FS_FUNC_MP3, DOWN_STATE);
else
FSGUI_DrawOneButton(FS_FUNC_MP3, UP_STATE);
}
break;
case CNT_AREA_JPEGBUTTON:
{
if (pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG)
FSGUI_DrawOneButton(FS_FUNC_JPEG, DOWN_STATE);
else
FSGUI_DrawOneButton(FS_FUNC_JPEG, UP_STATE);
}
break;
#if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
case CNT_AREA_GAMEBUTTON:
{
if (pFsJpeg->gifsFuncBtn == FS_FUNC_GAME)
FSGUI_DrawOneButton(FS_FUNC_GAME, DOWN_STATE);
else
FSGUI_DrawOneButton(FS_FUNC_GAME, UP_STATE);
}
break;
#endif
#ifdef SUPPORT_FILE_SYSTEM_MODE
case CNT_AREA_OTHERBUTTON:
{
if (pFsJpeg->gifsFuncBtn == FS_FUNC_OTHER)
FSGUI_DrawOneButton(FS_FUNC_OTHER, DOWN_STATE);
else
FSGUI_DrawOneButton(FS_FUNC_OTHER, UP_STATE);
}
break;
#endif
#ifdef SUPPORT_MIDI
case CNT_AREA_MIDIBUTTON:
{
if (pFsJpeg->gifsState == FS_FUNC_MIDI)
FSGUI_DrawOneButton(FS_FUNC_MIDI, DOWN_STATE);
else
FSGUI_DrawOneButton(FS_FUNC_MIDI, UP_STATE);
}
break;
#endif
default: break;
}
// draw current HL
switch (pFsJpeg->ControlArea)
{
case CNT_AREA_FILE:
{
HL_show = pFsJpeg->file_will;
old_ControlArea = CNT_AREA_FILE;
DrawSelectedRectWithSide (fsArea[FS_AREA_FILEITEM].xStart, FS_DIRLIST_YSTART + HL_show * FS_FILELIST_YSTEP , HL_Width, HL_Heighth, HL_Y, HL_CRCB, HL_SIDE_Y, HL_SIDE_CRCB );
ShowFileIcon();
fontFocus();
FSShowFileItem(HL_show , FS_GetFileProperty(pFsJpeg->file_array[HL_show],FILE_PROPERTY_NAME));//resume the last HL
//FSShowFileItem(HL_show , iso9660_file[pFsJpeg->file_array[HL_show]].name);//resume the last HL
fontunFocus();
/// NOTE:
// These code are put here ,for they will used by FSGUI_Refresh()/FSGUI_CmdLeft/FSGUI_CmdRight()
// if MP3_Lyrics_Drawed is 1,then show lyrics.
//zhaoyanhua add 2003-9-1 17:49
#ifdef MP3_TXT_DISPLAY
ShowLyricsWhileHL();
#endif
}
break;
case CNT_AREA_DIR:
{
HL_show = pFsJpeg->dir_current;
old_ControlArea = CNT_AREA_DIR;
DrawSelectedRectWithSide(fsArea[FS_AREA_DIRITEM].xStart, FS_DIRLIST_YSTART + HL_show * FS_FILELIST_YSTEP, HL_Width, HL_Heighth, HL_Y, HL_CRCB,HL_SIDE_Y ,HL_SIDE_CRCB);
FSShowDirIcon();
fontFocus();
ShowDirItem(HL_show,iso9660_dir[pFsJpeg->dir_array[HL_show]].name);//resume the last HL
fontunFocus();
}
break;
case CNT_AREA_MP3BUTTON:
{
old_ControlArea = CNT_AREA_MP3BUTTON;
FSGUI_DrawOneButton(FS_FUNC_MP3, HL_STATE);
}
break;
case CNT_AREA_JPEGBUTTON:
{
old_ControlArea = CNT_AREA_JPEGBUTTON;
FSGUI_DrawOneButton(FS_FUNC_JPEG, HL_STATE);
}
break;
#if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
case CNT_AREA_GAMEBUTTON:
{
old_ControlArea = CNT_AREA_GAMEBUTTON;
FSGUI_DrawOneButton(FS_FUNC_GAME, HL_STATE);
}
break;
#endif
#ifdef SUPPORT_FILE_SYSTEM_MODE
case CNT_AREA_OTHERBUTTON:
{
old_ControlArea = CNT_AREA_OTHERBUTTON;
FSGUI_DrawOneButton(FS_FUNC_OTHER, HL_STATE);
}
break;
#endif
#ifdef SUPPORT_MIDI
case CNT_AREA_MIDIBUTTON:
{
old_ControlArea = CNT_AREA_MIDIBUTTON;
FSGUI_DrawOneButton(FS_FUNC_MIDI, HL_STATE);
}
break;
#endif
default: break;
}
}
void ShowCurrentFilePlaying()
{
//avoid when HL and the current page in the same item,not show HL. zhaoyanhua 3-7-15 21:12
if (pFsJpeg->ControlArea == CNT_AREA_FILE)
{
#if 0
if (HL_show == fsnav_file_HL)
return;
#endif
}
FSGUI_ClearArea(FS_AREA_FILEITEM,fsnav_file_HL);
//not to disappear symbol of mp3,suqiaoli add,2004-10-9
ShowFileIcon();
FSShowFileItem(fsnav_file_HL, FS_GetFileProperty(pFsJpeg->file_array[fsnav_file_HL],FILE_PROPERTY_NAME));//resume the last HL
//FSShowFileItem(fsnav_file_HL, iso9660_file[pFsJpeg->file_array[fsnav_file_HL]].name);//resume the last HL
#ifdef NEW_MP3_GUI_DEBUG
printf("***ShowCurrentFile ,file_page_now = %d,file_page_will = %d,file_current =%d\n",pFsJpeg->file_page_now,pFsJpeg->file_page_will,pFsJpeg-> file_current);
#endif
//In the same page ,show the HL.
if ((pFsJpeg->file_page_will) == (pFsJpeg->file_page_now) )
{
fsnav_file_HL = (pFsJpeg->file_current);
FileList();//feeling 2004-07-28
DrawSelectedRectWithSide (fsArea[FS_AREA_FILEITEM].xStart, FS_DIRLIST_YSTART + fsnav_file_HL * FS_FILELIST_YSTEP , HL_Width, HL_Heighth, PLAYING_Y, PLAYING_CRCB, PLAYING_SIDE_Y, PLAYING_SIDE_CRCB );
ShowFileIcon();
fontFocus();
FSShowFileItem(fsnav_file_HL, FS_GetFileProperty(pFsJpeg->file_array[fsnav_file_HL],FILE_PROPERTY_NAME));
//FSShowFileItem(fsnav_file_HL, iso9660_file[pFsJpeg->file_array[fsnav_file_HL]].name);//
fontunFocus();
}
}
/*
* FUNC: to show current dir which is playing.
*
* Creator: zhaoyanhua
* date: 3-7-2 12:56
*/
void ShowCurrentDirPlaying()
{
UINT16 dir_now = 0,dir_will = 0;
if (pFsJpeg->ControlArea == CNT_AREA_DIR)
{
#if 0//zhoayanhua mask 2004-2-2 17:16
if (HL_show == fsnav_dir_HL)
return;
#endif
}
//clear the last HL DirItem.
FSGUI_ClearArea(FS_AREA_DIRITEM,fsnav_dir_HL);
ShowDirItem(fsnav_dir_HL, iso9660_dir[pFsJpeg->dir_array[fsnav_dir_HL]].name);//resume the last HL
FSShowDirIcon();
//locate the positon of fsnav_dir_will and fsnav_dir_now in the current type(MP3/JPEG/GAME).
dir_will = antiAnchorDir(pFsJpeg->fsnav_dir_will);
dir_now = antiAnchorDir(pFsJpeg->fsnav_dir_now);
//In the same page ,show the HL.
if ((dir_will / PER_PAGE) == (dir_now / PER_PAGE) )
{
fsnav_dir_HL = dir_now % PER_PAGE;
DrawSelectedRectWithSide(fsArea[FS_AREA_DIRITEM].xStart, FS_DIRLIST_YSTART + fsnav_dir_HL * FS_FILELIST_YSTEP, HL_Width, HL_Heighth, PLAYING_Y, PLAYING_CRCB, PLAYING_SIDE_Y, PLAYING_SIDE_CRCB );
FSShowDirIcon();
fontFocus();
ShowDirItem(fsnav_dir_HL, iso9660_dir[pFsJpeg->dir_array[fsnav_dir_HL]].name);
fontunFocus();
}
}
/* Description:
* Draw a Triange in given postion
* NOTE:
* I divide a isoceles triangle into two right-angled triangles.
* Their Hypotenuse has contrarily slope.
*
* INPUT:
* xStart ---> x postion
* yStart ---> y postion
* iBottom ---> the bottom of the Triange
* iHight ----> the height of the Triange
* iDir ----> UP
* DOWN
* RETURN:
* if can not draw the Triangle in the given point (xStart, yStart) return FALSE
* else return TRUE
*
* Creator: zhaoyanhua
* Date: 2004-6-11 17:08
*
*/
BYTE DrawTriangle(UINT16 xStart, UINT16 yStart, UINT16 iBottom, UINT16 iHight, BYTE iDir, UINT16 iColorY, UINT16 iColorCrCb)
{
UINT16 a = iBottom/2;
UINT16 b = iHight;
UINT16 iSlope = b/a;
int i = 0, j = 0, k = 0;
INT8 iSign = 0;
INT16 iMaxHight = 0;
if (iDir == 1)
{
//error check
if ((yStart - b) < 0)//
return FALSE;
iSign = 1;
iMaxHight = b;
}
else
{
//error check
if ((yStart + b) > 480)//exceed the screen max line
return FALSE;
iSign = -1;
iMaxHight = -b;
}
//printf("#### Draw Triangle -Slope:%d-iSign:%d-\n",iSlope,iSign);
//draw left part: right-angled triangle(which right angle in its right)
for (i = 0; i < a; i++)
{
//for dir = 1 y = b/a*x; start point(0,0)
//for dir = 0, y = -b/a*x start point(0,0)
j = (iSign)*iSlope * i;
for (k = 0; k <= (iSign*j); k++)
{
//printf("11111111Draw Trigle : i:%d, iSign * iMaxHight: %d,j = :%d k:%d--\n",i,iSign * iMaxHight,j,k);
//for dir = 1, when draw left part, yStart increase in negative direction
//for dir = 0, when draw left part, ystart inscreese in positive direction
*Y_XY((xStart + i), (yStart+ k*((-1)*iSign))) = iColorY;
*C_XY((xStart + i), (yStart+ k*((-1)*iSign))) = iColorCrCb;
}
if (j >= (iSign * iMaxHight))
break;
}
//draw right part:right-angled triangle(which right angle in its left)
for (i = a; i < iBottom; i++)
{
//for dir = 1,line : y = (a+b)-b/a*x; start point(a,-b)
//for dir = 0,line : y = -(a+b)+b/a*x; start point(a,b)
j = (iSign)*(a + b - (iSlope*i));
for (k = 0; k <= (iSign*j); k++)
{
//printf("2222222Draw Trigle : i:%d, j = :%d,k:%d--\n",i, j,k);
//for dir = 1, when draw left part, yStart increase in negative direction
//for dir = 0, when draw left part, ystart inscreese in positive direction
*Y_XY((xStart + i), (yStart + k*((-1)*iSign))) = iColorY;
*C_XY((xStart + i), (yStart + k*((-1)*iSign))) = iColorCrCb;
}
if ((j*iSign) <= 0)
break;
}
return TRUE;
}
/*
* Description:
* draw a reverse bmp with iLayoutIndex bmp.
* INPUT:
* xStart ---> x start postion
* yStart ---> y Start postion
* iLayoutIndex ---> the index in g_aBitmapLayout
* iMode -----> reverse mode(veer)
*
*
*/
void FSGUI_DrawReverseBmp(UINT16 xStart, UINT16 yStart, BYTE iLayoutIndex, BYTE iMode __attribute__((unused)))
{
extern void ReverseImg(const BYTE ImgOriData [ ], BYTE ImgTransData [ ], BYTE iMode);
const BITMAP_LAYOUT* pLayout = &g_aBitmapLayout[iLayoutIndex];
BYTE iWidth = *(g_aBitmap[pLayout->uiIndex]+0);
BYTE iHeight = *(g_aBitmap[pLayout->uiIndex]+1);
if (iHeight % 4)
iHeight = (iHeight/4+1)*4;
BYTE ReverseBmp[iWidth*iHeight+3];
//only draw bmp no need repeat
if ((pLayout->uiXRepeat != 0)
||(pLayout->uiYRepeat != 0))
return;
ReverseImg(g_aBitmap[pLayout->uiIndex],ReverseBmp, 1);
FrameBuf_DrawBmp(xStart, yStart,
ReverseBmp,
//g_aBitmap[pLayout->uiIndex],
g_aPalette[pLayout->uiPalette]);
}
/*
* FUNC: to show title string on left of the top buttons.
*
* Creator: feeling
* date: 2004-06-21
*/
void FSGUI_ShowBtnTitle(void)
{
#ifdef GPS_MP3_UI//frank.huang 050927
return;//don't show button title in gps_mp3 ui
#endif
//show buttton title string
switch(pFsJpeg->gifsFuncBtn)
{
case FS_FUNC_IDLE:
psprintf(linebuf,"%s","WAITING");
break;
case FS_FUNC_MP3:
psprintf(linebuf,"%s","MUSIC");
break;
case FS_FUNC_JPEG:
psprintf(linebuf,"%s","PHOTO");
break;
#if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
case FS_FUNC_GAME:
psprintf(linebuf,"%s","GAME");
break;
#endif
#ifdef SUPPORT_FILE_SYSTEM_MODE
case FS_FUNC_OTHER:
psprintf(linebuf,"%s","VIDEO");
break;
#endif
}
FSGUI_DrawBackGround(fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].xStart,
fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].yStart,
fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].xSize,
fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].ySize,
LAY_TAB_BAR2_2); //clear the background
FSGUI_ShowString(fsArea[FS_AREA_BUTTONTITLE].xStart,
fsArea[FS_AREA_BUTTONTITLE].yStart,
linebuf,
FS_FONTCOLOR_TITLE_Y,
FS_FONTCOLOR_TITLE_CrCb);
}
/*
* FUNC: to show font color when Focus on font.
*
* Creator: suqiaoli
* date: 2004-6-28
*/
void fontFocus(void)
{
file_focus_y = BLACK_Y;
file_focus_CrCb = BLACK_CRCB;
}
/*
* FUNC: to show font color when not Focus on font
*
* Creator: suqiaoli
* date: 2004-6-28
*/
void fontunFocus(void)
{
file_focus_y = FS_FONTCOLOR_FILE_Y;
file_focus_CrCb = FS_FONTCOLOR_FILE_CrCb;
}
/*
* FUNC: to show selected item ,two sides and a rect
* side width = rect with
* side height = 1 piexl
*
* Creator: suqiaoli
* date: 2004-7-9
*/
void DrawSelectedRectWithSide(UINT16 xStart, UINT16 yStart, UINT16 xLen, UINT16 yLen, UINT16 RectY, UINT16 RectCrCb,UINT16 SideY ,UINT16 SideCrCb)
{
FrameBuf_DrawLine( xStart, yStart -1, xLen, 1, SideY, SideCrCb );
FrameBuf_DrawRect( xStart, yStart, xLen, yLen, RectY, RectCrCb );
FrameBuf_DrawLine( xStart, yStart + yLen , xLen, 1, SideY, SideCrCb );
}
#endif//#ifdef FS_BMP_GUI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -