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

📄 fsgui_bmpui.c

📁 dvd里面的一个文件系统的代码
💻 C
📖 第 1 页 / 共 3 页
字号:
                //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 + -