fsGUI_BmpUI.c
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:38k
源码类别:

DVD

开发平台:

C/C++

  1. /**************************************************************
  2. ** FILE
  3. ** fsGUI_BmpUI.c
  4. **
  5. ** DESCRIPTION
  6. ** On the base of fsGUI_new.c, build a new GUI with bmp for MP3/JPEG/GAME.
  7. **
  8. **
  9. **   Creator: zhaoyanhua
  10. **   Date:    2004-6-3 10:17
  11. ****************************************************************/
  12. #include "global.h"
  13. #include "func.h"
  14. #include "memmap.h"
  15. #include "util.h"
  16. #include "graph.h"
  17. #include "memcfg.h"
  18. #include "framebuf.h"
  19. #include "macro.h"
  20. #include "stc.h"
  21. #include "cfont.h"
  22. #include "vfdfunc.h"
  23. #include "osd.h"
  24. #include "image.h"
  25. #include "nesinit.h"
  26. #include "fs96602.h"
  27. #include "fsNAV.h"
  28. #include "fsGUI.h"
  29. #include "fsGUI1.h"
  30. #include "fsGUI1.h"
  31. //#include "fsGUI_new.h"
  32. #ifdef JPG_EFFECT
  33. #include "jpegeffect.h"
  34. #endif
  35. #ifdef FS_BMP_GUI
  36. #include "FrameBuf_BmpUI.h"
  37. #include "fsGUI_Palette.h"
  38. #include "fsGUI_Bmp.h"
  39. #include "fsGUI_BmpUI.h"
  40. const BITMAP_LAYOUT g_aBitmapLayout[] =
  41. {
  42.     //absolute postion
  43.     {0,   0,   720,     0,   0,   1}, //bg.bmp top line                 //0
  44.     {0,   171,   720,     0,   1,   1}, //bg.bmp middle line                 //0
  45.     {0,   382,   720,     0,   2,   1}, //bg.bmp bottom line              //1
  46.     {54,  27,    0,     0,   3,   1}, //tab_bar2-1.bmp                  //2
  47.     {244, 35,    0,     0,   7,   0},//MP3_icon_L.bmp                   //3
  48.     {348, 35,    0,     0,   8,   0},//JPG_icon_L.bmp                   //4
  49. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  50.     {555, 34,    0,     0,   9,   0},//VIDEO_icon_L.bmp                 //5
  51.     {454, 33,    0,     0,   10,   0},//GAME_icon_L.bmp                  //6
  52. #else 
  53.     {449, 36,    0,     0,   9,   0},//VIDEO_icon_L.bmp                 //5
  54.     {560, 35,    0,     0,   10,   0},//GAME_icon_L.bmp                  //6
  55. #endif    
  56.     {78,  76,    0,     0,   11,  1},//playing_bar_3_1.bmp              //7
  57.     {635, 76,    0,     0,   12,  1},//playing_bar_3_3                  //8
  58.     {99,  84,    0,     0,   14,  0},//animation1.bmp                   //9
  59.     {99,  84,    0,     0,   15,  0},//animation2.bmp                   //10
  60.     //opsite postion. when use these bmp, must add its start position
  61.     {0,    0,    105,     1,    4,  1},//tab_bar2-2.bmp                   //11
  62.     {0,    0,    105,     1,    5,  0},//tab_bar_shine.bmp                //12
  63.     {0,    0,    105,     1,    6,  1},//tab_bar_down.bmp                 //13
  64.     {0,    0,    0,     0,   13,  1},//playing_bar_3_2.bmp              //14
  65.     {0,    0,    0,     0,   16,  1},//FILE bg Cornre LT                //15
  66.     {0,    0,    0,     0,   17,  1},//FILE bg Cornre RT                //16
  67.     {0,    0,    0,     0,   18,  1},//FILE bg Cornre LB                //17
  68.     {0,    0,    0,     0,   19,  1},//FILE bg Cornre RB                //18
  69.     {0,    0,    0,     0,   20,  0},//MP3_icon_S.bmp                   //19
  70.     {0,    0,    0,     0,   21,  0},//JPEG_icon_S.bmp                  //20
  71. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  72.     {0,    0,    0,     0,   22,  1},//Game_icon_S.bmp                 //22
  73.     {0,    0,    0,     0,   23,  0},//Video_icon_S.bmp                  //23
  74. #else
  75.     {0,    0,    0,     0,   22,  0},//Video_icon_S.bmp                 //22
  76.     {0,    0,    0,     0,   23,  1},//Game_icon_S.bmp                  //23
  77. #endif    
  78.     {0,    0,    0,     0,   24,  1},//FileBg10_0.bmp                   //23
  79.     {0,    0,    0,     0,   25,  1},//FileBg10_1.bmp                   //24
  80.     {0,    0,    0,     0,   26,  1},//FileBg10_2.bmp                   //25
  81.     {0,    0,    0,     0,   27,  1},//FileBg10_3.bmp                   //26
  82.     {0,    0,    0,     0,   28,  1},//FileBg10_4.bmp                   //27
  83.     {0,    0,    0,     0,   29,  1},//FileBg10_5.bmp                   //28
  84.     {0,    0,    0,     0,   30,  1},//FileBg10_6.bmp                   //29
  85.     {0,    0,    0,     0,   31,  1},//FileBg10_7.bmp                   //30
  86.     {0,    0,    0,     0,   32,  1},//FileBg10_8.bmp                   //31
  87.     {0,    0,    0,     0,   33,  1},//FileBg10_9.bmp                   //32
  88.     {0,    0,    0,     0,   34,  1},//folder_icon                      //33
  89. };
  90. /* 
  91.  * Description:
  92.  *      Draw all the buttons,including background and icon
  93.  * NOTE:
  94.  *      This function has be defined in fsGUI_pub.c
  95.  *     
  96.  *      we only modify the codes of DrawButton. 
  97.  *
  98.  *Creater:
  99.  * feeling
  100.  *Date:
  101.  * 2004-06-08
  102.  */
  103. void DrawButton(void)
  104. {
  105. BYTE iBtnState = 0;
  106. #ifdef AUDIO_SHOW_SAVER
  107.      if (bDisableGUI) return;
  108. #endif
  109.     //draw the left and right edge of button array 
  110.     FSGUI_LayoutBmp(LAY_TAB_BAR2_1);
  111.     //draw the backgroud
  112.     FSGUI_DrawBackGround(fsArea[FS_AREA_BUTTONBACKGROUND].xStart,
  113. fsArea[FS_AREA_BUTTONBACKGROUND].yStart,
  114. fsArea[FS_AREA_BUTTONBACKGROUND].xSize,
  115. fsArea[FS_AREA_BUTTONBACKGROUND].ySize,
  116. LAY_TAB_BAR2_2);
  117.     //draw the buttons
  118. //draw MP3 button
  119. if (pFsJpeg->gifsMP3Count) 
  120. {
  121. if (pFsJpeg->ControlArea == CNT_AREA_MP3BUTTON)
  122. iBtnState = HL_STATE;
  123. else if (pFsJpeg->gifsFuncBtn == FS_FUNC_MP3)
  124. iBtnState = DOWN_STATE;
  125. else
  126. iBtnState = UP_STATE;
  127. FSGUI_DrawOneButton(FS_FUNC_MP3,iBtnState);     
  128. }
  129. else
  130. {
  131. FSGUI_DrawOneButton(FS_FUNC_MP3, UP_STATE);
  132. }
  133. //draw JPEG button
  134. if (pFsJpeg->gifsJPEGCount)
  135. {
  136. if (pFsJpeg->ControlArea == CNT_AREA_JPEGBUTTON)
  137. iBtnState = HL_STATE;
  138. else if (pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG)
  139. iBtnState = DOWN_STATE;
  140. else
  141. iBtnState = UP_STATE;
  142. FSGUI_DrawOneButton(FS_FUNC_JPEG, iBtnState);     
  143. }
  144. else
  145. {
  146. FSGUI_DrawOneButton(FS_FUNC_JPEG, UP_STATE);
  147. }
  148. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  149. //draw GAME button
  150. if (pFsJpeg->gifsGAMECount)
  151. {
  152. if (pFsJpeg->ControlArea == CNT_AREA_GAMEBUTTON)
  153. iBtnState = HL_STATE;
  154. else if (pFsJpeg->gifsFuncBtn == FS_FUNC_GAME)
  155. iBtnState = DOWN_STATE;
  156. else
  157. iBtnState = UP_STATE;
  158. FSGUI_DrawOneButton(FS_FUNC_GAME, iBtnState);     
  159. }
  160. else
  161. {
  162. FSGUI_DrawOneButton(FS_FUNC_GAME, UP_STATE);
  163. }
  164. #endif//#ifdef SUPPORT_NESGAME
  165. #ifdef SUPPORT_FILE_SYSTEM_MODE
  166. //draw video button
  167. if (pFsJpeg->gifsOtherCount)
  168. {
  169. if (pFsJpeg->ControlArea == CNT_AREA_OTHERBUTTON)
  170. iBtnState = HL_STATE;
  171. else if (pFsJpeg->gifsFuncBtn == FS_FUNC_OTHER)
  172. iBtnState = DOWN_STATE;
  173. else
  174. iBtnState = UP_STATE;
  175. FSGUI_DrawOneButton(FS_FUNC_OTHER,iBtnState);     
  176. }
  177. else
  178. {
  179. FSGUI_DrawOneButton(FS_FUNC_OTHER, UP_STATE);
  180. }
  181. #endif
  182. FSGUI_ShowBtnTitle();
  183. #ifdef DISP_REGION_BOTTOM
  184. //if define OSD_BMP_DISPLAY, Jpeg Thumnail state display should show in top,
  185. //and quit Thumbnail state,display should show in bottom,so note jpeg mode here.
  186. if (pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG)
  187.     pFsJpeg->g_nJpegMode = JPEG_NORMAL_MODE;
  188. #endif
  189. }//end DrawButton
  190. /* 
  191.  * Description:
  192.  *      draw the bmp defined in g_aBitLayout[] according to the index.
  193.  *
  194.  * INPUT:
  195.  *      LayoutIndex --> index of g_aBitMapLayout[]
  196.  *
  197.  */
  198. void FSGUI_LayoutBmp(UINT8 LayoutIndex)
  199. {
  200.     const BITMAP_LAYOUT* pLayout  =  &g_aBitmapLayout[LayoutIndex];
  201.    
  202.     //only draw bmp no need repeat
  203.     if ((pLayout->uiXRepeat != 0) 
  204.        ||(pLayout->uiYRepeat != 0))
  205.         return;
  206.     
  207.     FrameBuf_DrawBmp(pLayout->uiXPos, pLayout->uiYPos, 
  208.                      g_aBitmap[pLayout->uiIndex],
  209.                      g_aPalette[pLayout->uiPalette]);
  210.     
  211. }
  212. /* 
  213.  * Description:
  214.  *      draw the bmp defined in g_aBitmapLayout[] according to the index.
  215.  *
  216.  * NOTE:
  217.  *      the postion of the bmp is not fixed ,it can be variable.
  218.  *    
  219.  * INPUT:
  220.  *      xStart      --> the bmp x position
  221.  *      yStart      ---> the bmp y position
  222.  *      LayoutIndex --> index of g_aBitmapLayout[]
  223.  *
  224.  */
  225. void FSGUI_LayPosVariableBmp(UINT16 xStart, UINT16 yStart,UINT8 LayoutIndex)
  226. {
  227.     const BITMAP_LAYOUT* pLayout  =  &g_aBitmapLayout[LayoutIndex];
  228.    
  229.     //only draw bmp no need repeat
  230.     if ((pLayout->uiXRepeat != 0) 
  231.        ||(pLayout->uiYRepeat != 0))
  232.         return;
  233.     
  234.     //the position of the bmp is fixed ,can not draw with this function.
  235.     if ((pLayout->uiXPos != 0) || (pLayout->uiYPos != 0))
  236.         return;
  237.     
  238.     FrameBuf_DrawBmp(xStart, yStart, 
  239.                      g_aBitmap[pLayout->uiIndex],
  240.                      g_aPalette[pLayout->uiPalette]);
  241.   
  242. }
  243. /*
  244.  *  Description:
  245.  *      Draw a background by repeating the same bmp in Framebuf
  246.  *  NOTE:
  247.  *      the bmp is a bmp of Line generally,this only for a line,which width is 1 piexl
  248.  *
  249.  *  INPUT:   
  250.  *      xStart  -->  the background x start position
  251.  *      yStart  -->  the background y start position
  252.  *      xRepeat  --> bmp repeat times in x axis
  253.  *      yRepeat -->  bmp repreat times in y axis
  254.  *      LayoutIndex --> index of g_aBitMapLayout[]
  255.  * Creator: zhaoyanhua
  256.  * Date: 2004-6-3 10:07
  257.  * Update:  suqiaoli 2004-6-8 
  258.  * Update:  yltseng  2004-6-23 
  259.  */
  260. void FSGUI_DrawBackGround(UINT16 xStart, UINT16 yStart, UINT16 xRepeat, UINT16 yRepeat,UINT8 LayoutIndex)
  261. {
  262.     const BITMAP_LAYOUT* pLayout   = &g_aBitmapLayout[LayoutIndex];
  263.     const UINT8 *bmp               = g_aBitmap[pLayout->uiIndex];
  264.     const YCrCb_COLOR *Palette     = g_aPalette[pLayout->uiPalette];
  265.     
  266.     int i               = 0;
  267.     int j               = 0;
  268.     int k               = 0;
  269.     const BYTE *pBmp    = bmp + 3;
  270.     int iBmpWidth       = bmp[0];
  271.     int iBmpHeigth      = bmp[1];
  272.     UINT32  uiYBase     = SDRAM_BASE + 1024 * REF0_LUMA + xStart;
  273.     UINT32  uiCBase     = SDRAM_BASE + 1024 * REF0_CHROMA + 2 * ( xStart >> 1 );
  274.     for (j = 0; j < iBmpHeigth; j++)
  275.     {
  276.         BYTE*   pY  = (BYTE*)   ( uiYBase + OFFSET_Y( yStart + j ) );
  277.         UINT16* pC  = (UINT16*) ( uiCBase + OFFSET_C( (yStart + j) >> 1 ) );
  278.         
  279.         //draw pixel start from x axis
  280.         for (i = 0; i < iBmpWidth; i++)
  281.         {         
  282.             int ColorIndex = *pBmp++;            
  283.             if (ColorIndex == 0)    //index 0 is transparent
  284.                 continue;
  285.             
  286.             YCrCb_COLOR PixelValue  = *(Palette+ColorIndex); 
  287.             pY[i]                   =   PixelValue.uiY;
  288.             pC[i>>1]                =   PixelValue.uiCrCb;
  289.         }
  290.         
  291.         //one bmp in x axis has been drawn. 
  292.         //Its data has been saved in pY[], and pC[]
  293.         //so we can draw the other same bmp(repeat) with the same pY,pCrcb
  294.         BYTE* pNextY  = pY;        
  295.         for( k = 1; k < xRepeat; k++ )
  296.         {
  297.             pNextY += iBmpWidth;
  298.             UINT16* pNextC = pC + ( ( iBmpWidth * k ) >> 1 );
  299.                         
  300.             for( i = 0; i < iBmpWidth; i++ )
  301.             {
  302.                 pNextY[i]       = pY[i];
  303.                 pNextC[i>>1]    = pC[i>>1];
  304.             }
  305.         }
  306.     }    
  307. /*    
  308.     int i = 0;
  309.     int j = 0;
  310.     
  311.     const BITMAP_LAYOUT* pLayout = &g_aBitmapLayout[LayoutIndex];
  312.     const UINT8 *pBmp = g_aBitmap[pLayout->uiIndex];
  313.     const YCrCb_COLOR *pPalette     = g_aPalette[pLayout->uiPalette];
  314.     
  315.     UINT8 uiWidth   = pBmp[0];
  316.     UINT8 uiHeight  = pBmp[1];
  317.     UINT16 uiCurX;
  318.     UINT16 uiCurY;
  319.     
  320.     for (j = 0, uiCurY = yStart; j < yRepeat; j++, uiCurY += uiHeight )
  321.     {
  322.         for (i = 0, uiCurX = xStart; i < xRepeat; i++, uiCurX += uiWidth )
  323.         {
  324.             FrameBuf_DrawBmp( uiCurX, uiCurY, pBmp,pPalette); 
  325.         }
  326.     }
  327. */    
  328. }
  329. /*
  330.  * Description:
  331.  *      draw one button according its type.
  332.  * 
  333.  * INPUT:
  334.  *      type ---> FS_FUNC_MP3    NOTE: different type has different button icon.
  335.  *                FS_FUNC_JPEG  
  336.  *                FS_FUNC_GAME
  337.  *                FS_FUNC_OTHERS
  338.  
  339.  *      state --> HL_STATE       //HL in this button
  340.  *                DOWN_STATE    //now playing the type file
  341.  *                UP_STATE     //has no HL and no playing file
  342.  *
  343.  *Creater:feeling
  344.  *
  345.  *Date:2004-06-08
  346.  */
  347. void FSGUI_DrawOneButton(BYTE type, BYTE state)
  348. {
  349.     const BITMAP_LAYOUT* pBgLayout;
  350.     UINT8  uiBgIndex = 0, uiIcnIndex = 0, uiBgYPos = 0;
  351.     UINT16 uiBgXPos = 0;
  352. //    return;
  353.     //decide the backgroud line of the button,
  354.     //according to which state it is, highlighted,pressed or normal
  355.     switch(state)
  356.     {
  357.         case HL_STATE:
  358.             uiBgIndex = LAY_TAB_BAR_SHINE;
  359.             uiBgYPos = BTN_BG_HL_YPOS;
  360.             break;
  361.         case DOWN_STATE:
  362.             uiBgIndex = LAY_TAB_BAR_DOWN;
  363.             uiBgYPos = BTN_BG_DOWN_YPOS;
  364.             break;
  365.         case UP_STATE:
  366.             uiBgIndex = LAY_TAB_BAR2_2;
  367.             uiBgYPos = BTN_BG_UP_YPOS;
  368.             break;
  369.     }      
  370.     pBgLayout = &g_aBitmapLayout[uiBgIndex];
  371.     
  372.     //decide the backgroud x y pos and icon on the button, 
  373.     //according to which type it represents, mp3,jpg,vide,or game.
  374.     switch(type)
  375.     {
  376.         case FS_FUNC_MP3:
  377.             uiIcnIndex = LAY_MP3_ICON_L;
  378.             uiBgXPos = MP3_BTN_BG_XPOS;
  379.             break;
  380.         case FS_FUNC_JPEG:
  381.             uiIcnIndex = LAY_JPG_ICON_L;
  382.             uiBgXPos = MP3_BTN_BG_XPOS + (FS_FUNC_JPEG - FS_FUNC_MP3) * BTN_BG_XOFFSET;
  383.             break;
  384. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  385.         case FS_FUNC_GAME:
  386.             uiIcnIndex = LAY_GAME_ICON_L;
  387.             uiBgXPos = MP3_BTN_BG_XPOS + (FS_FUNC_GAME - FS_FUNC_MP3) * BTN_BG_XOFFSET;
  388.             break;
  389. #endif //#ifdef SUPPORT_NESGAME
  390.             
  391. #ifdef SUPPORT_FILE_SYSTEM_MODE
  392.         case FS_FUNC_OTHER:
  393.             uiIcnIndex = LAY_VIDEO_ICON_L;
  394.             uiBgXPos = MP3_BTN_BG_XPOS + (FS_FUNC_OTHER - FS_FUNC_MP3) * BTN_BG_XOFFSET;
  395.             break;
  396. #endif //#ifdef SUPPORT_FILE_SYSTEM_MODE
  397. #ifdef SUPPORT_MIDI
  398.     case FS_FUNC_MIDI:
  399.         break;
  400. #endif     
  401.     }//end switch(type)
  402.     //draw the backgroud line and layout the icon
  403.     FSGUI_DrawBackGround(uiBgXPos, uiBgYPos, 
  404.         pBgLayout->uiXRepeat, pBgLayout->uiYRepeat,
  405.                  uiBgIndex); //draw the backgroud
  406.           
  407.     FSGUI_LayoutBmp(uiIcnIndex);//layout the icon
  408.     
  409. }//end FSGUI_DrawOneButton
  410. /*
  411.  * Description:
  412.  *      Draw a rect with four corner,including dir scroll and fiel scroll background
  413.  * Note:
  414.  *      use 10 section pic to draw file and dir background
  415.  * 
  416.  * INPUT:
  417.  *      xStart  -->  the background x start position
  418.  *      yStart  -->  the background y start position
  419.  *      iWidth  -->  width of background
  420.  *      iHeight -->  height of background
  421.  *
  422.  * Creator:  suqiaoli
  423.  *
  424.  * Data:2004-6-10 
  425.  *
  426.  */
  427. void FSGUI_ShowBmpCornerRect(UINT16 xStart, UINT16 yStart,UINT16 iWidth, UINT16 iHeight)
  428. {
  429.     int i = 0;
  430.     int xRepeat = 0;
  431.     int yRepeat = 0;
  432.     
  433.     #define HLINE_WIDTH         22
  434.     #define HLINE_HEIGHT        2
  435.     #define VLINE_WIDTH         2
  436.     #define VLINE_HEIGHT        259
  437.     
  438.     xRepeat = iWidth/RECT_BG_BMP_WIDTH;
  439.     yRepeat = iHeight/RECT_BG_BMP_HEIGHT;
  440.    
  441.     //----Draw left line and right line
  442.     FrameBuf_DrawLine(xStart - 2 , yStart + 10 , 2, FILE_AREA_XLEN + 2, RECTLINE_Y,RECTLINE_CRCB );
  443.     FrameBuf_DrawLine(xStart + DIR_AREA_XLEN , yStart + 10, 2, FILE_AREA_XLEN + 2, RECTLINE_Y,RECTLINE_CRCB );
  444.     
  445.     //draw background with file_bg.bmp
  446.     FSGUI_DrawBackGround(xStart,yStart,xRepeat,yRepeat,LAY_FILE_BG_10_0);//first section
  447.     for (i = 0; i < 8; i ++)//8 sections
  448.     {
  449.         FSGUI_DrawBackGround(xStart,yStart + 12 + FS_FILELIST_YSTEP * i ,xRepeat,yRepeat,LAY_FILE_BG_10_1 + i );
  450.     }
  451.     FSGUI_DrawBackGround(xStart ,yStart + 12 + FS_FILELIST_YSTEP * 8 ,xRepeat,yRepeat,LAY_FILE_BG_10_9);//last section
  452.     
  453.     //Draw four corner
  454.     FSGUI_LayPosVariableBmp(xStart - 2, yStart,LAY_FILE_BG_CORNER_LT);//LT
  455.     FSGUI_LayPosVariableBmp(xStart + iWidth - 8 , yStart,LAY_FILE_BG_CORNER_RT);//RT
  456.     FSGUI_LayPosVariableBmp(xStart - 2, yStart + iWidth + 8,LAY_FILE_BG_CORNER_LB);//LB
  457.     FSGUI_LayPosVariableBmp(xStart + iWidth - 8 , yStart + iWidth + 8 ,LAY_FILE_BG_CORNER_RB);//RB
  458.     
  459.     //-----DrawScroll
  460.     //Draw 4 horizonal lines
  461.     FrameBuf_DrawLine(xStart + DIR_AREA_XLEN + 2 , yStart + 10 ,  HLINE_WIDTH, HLINE_HEIGHT, RECTSCROLL_LINE_Y,RECTSCROLL_LINE_CRCB );
  462.     FrameBuf_DrawLine(xStart + DIR_AREA_XLEN + 2, yStart + 32 ,  HLINE_WIDTH, HLINE_HEIGHT, RECTSCROLL_LINE_Y,RECTSCROLL_LINE_CRCB );
  463.     FrameBuf_DrawLine(xStart + DIR_AREA_XLEN + 2, yStart + DIR_AREA_YLEN - 34 , HLINE_WIDTH, HLINE_HEIGHT, RECTSCROLL_LINE_Y,RECTSCROLL_LINE_CRCB );
  464.     FrameBuf_DrawLine(xStart + DIR_AREA_XLEN + 2, yStart + DIR_AREA_YLEN - 12 , HLINE_WIDTH, HLINE_HEIGHT, RECTSCROLL_LINE_Y,RECTSCROLL_LINE_CRCB );
  465.     
  466.     //draw 1 vertical line
  467.     FrameBuf_DrawLine(xStart + DIR_AREA_XLEN + 24 , yStart + 10 , VLINE_WIDTH, VLINE_HEIGHT, RECTSCROLL_LINE_Y,RECTSCROLL_LINE_CRCB );
  468.     
  469.     //draw 2 arrows
  470.     DrawTriangle(xStart + DIR_AREA_XLEN + 8 , yStart + 23, 12, 6, 1, UPARROW_Y, UPARROW_CRCB); 
  471.     DrawTriangle(xStart + DIR_AREA_XLEN + 8 , yStart + DIR_AREA_YLEN - 23 , 12, 6, 0, DOWNARROW_Y, DOWNARROW_CRCB); 
  472.     
  473. }
  474. /*
  475.  * FUNC : Clear the item in Rectangle with four corner.
  476.  *        Main for:file icon,dir icon,file item,dir item.
  477.  * 
  478.  * INPUT:
  479.  *        iIndex :   Area index.
  480.  *        iItem  :   if iItem >= PER_PAGE, it means clear all items or dir icons ;
  481.  *                   if iItem <  PER_PAGE, it means clear current item
  482.  * Creator: Suqiaoli
  483.  * Date: 2004-6-10
  484.  */
  485. void FSGUI_ClearArea(UINT16 iIndex,UINT16 iItem)
  486. {
  487.     int i;
  488.     
  489.     if ((pFsJpeg->gifsState == FS_STATE_JPEG) && (pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG))
  490. return;
  491. //clear current file icon;
  492. if ((iIndex == FS_AREA_FILEICON) && (refresh_file_page==0))
  493. {
  494. FSGUI_DrawBackGround(fsArea[iIndex].xStart ,fsArea[iIndex].yStart + FS_FILELIST_YSTEP * pFsJpeg->file_current,fsArea[iIndex].xSize,1,LAY_FILE_BG_10_1 + pFsJpeg->file_current );
  495.     }
  496. else if ((iIndex == FS_AREA_FILEICON) && (refresh_file_page == 1))
  497. {// clear all file icon
  498. for (i = 0;i < 8;i ++)
  499.         {
  500.             FSGUI_DrawBackGround(fsArea[iIndex].xStart ,fsArea[iIndex].yStart + FS_FILELIST_YSTEP*i,fsArea[iIndex].xSize,1,LAY_FILE_BG_10_1 + i );
  501.         }
  502. else if (iItem > PER_PAGE)
  503. {//clear all items or dir icons
  504. for (i = 0;i < 8;i ++)
  505.         {
  506.             FSGUI_DrawBackGround(fsArea[iIndex].xStart  ,fsArea[iIndex].yStart + FS_FILELIST_YSTEP*i,fsArea[iIndex].xSize,1,LAY_FILE_BG_10_1 + i );
  507.         } 
  508. }
  509. else //iItem <= PER_PAGE
  510. {//clear current item
  511. FSGUI_DrawBackGround(fsArea[iIndex].xStart , fsArea[iIndex].yStart + iItem * 32, fsArea[iIndex].xSize, 1,LAY_FILE_BG_10_1+iItem);
  512. }
  513. }
  514. #if 0
  515. /*
  516.  * Description:
  517.  *      only for DIR and FILE RECT 
  518.  *      according the file state, draw its item.
  519.  *      1)when HL chaned from one file to another file, 
  520.  *        must redraw last HL file, HL current file.
  521.  *      2)when curent playing file changed ,must redraw 
  522.  *         last playing file, make the current file be playing sate. 
  523.  *
  524.  * INPUT:   
  525.  *      CurrentPos --->  this file position in DIR(FILE)RECT. It's value is 0~7 (if onepage has 8 fileitem).
  526.  *      iState     --->  the file current state
  527.  *                       HL_STATE       //HL in this button
  528.  *                       PRESS_STATE    //now playing the type file
  529.  *                       NONE_STATE     //has no HL and no playing file
  530.  *      iType      --->  the file in DIR RECT 
  531.  *                             or in FILE RECT
  532.  *
  533.  */
  534. void FSGUI_UpdateItem(UINT16 CurrentPos, BYTE iState, BYTE iType)
  535. {
  536.    #if 0
  537.     //according its iState select its backgroud bmp.
  538.     //background start position according its iType and CurrentPos.
  539.     if (iState == NONE_STATE)
  540.         FrameBuf_DrawBackGround();
  541.     else//HL_STATE / Press_STATE
  542.         FrameBuf_DrawRect();
  543.         
  544.     //Show file item String
  545.     FSGUI_ShowString();
  546.     #endif
  547. }
  548. #endif
  549. /*
  550.  * Description:
  551.  *      Draw file area scroll
  552.  *
  553.  * Creator:suqioali
  554.  * Data:2004-6-15 
  555.  *
  556.  */
  557. void DrawScroll(void)
  558. {
  559.     int  x, y, xRepeat, yRepeat;
  560.     x = fsArea[FS_AREA_SLOT].xStart;
  561.     y = fsArea[FS_AREA_SLOT].yStart;
  562.     xRepeat = fsArea[FS_AREA_SLOT].xSize;
  563.     yRepeat = fsArea[FS_AREA_SLOT].ySize/FS_DIRSCROLLLEN_YSIZE;
  564.     
  565.     //FrameBuf_DrawRect(x, y, xSize, ySize,BLUE_Y, BLUE_CRCB);//Draw rect
  566.     FSGUI_DrawBackGround(x,y,xRepeat,yRepeat,LAY_BG_3_2);
  567. }
  568. /*
  569.  * Description:
  570.  *      Draw file area move scroll
  571.  *
  572.  * Creator:suqioali
  573.  * Data:2004-6-15 
  574.  *
  575.  */
  576. void MoveScroll(UINT16 locate)
  577. {
  578.     
  579.     int y;
  580.     DrawScroll();
  581.     
  582.     if (( locate == pFsJpeg->File_Page_Count - 1)&& (pFsJpeg->File_Page_Count != 1))
  583.         y = ( fsArea[FS_AREA_MOVEBAR].yStart + fsArea[FS_AREA_MOVEBAR].ySize ) - pFsJpeg->scroll_step;//0x179
  584.     else
  585.         y = fsArea[FS_AREA_MOVEBAR].yStart + locate * pFsJpeg->scroll_step;
  586.         
  587.     FrameBuf_DrawRect(fsArea[FS_AREA_MOVEBAR].xStart, y, fsArea[FS_AREA_MOVEBAR].xSize, pFsJpeg->scroll_len,
  588.         SCROLL_Y, SCROLL_CRCB);
  589. }
  590. /*
  591.  * Description:
  592.  *      Draw dir area scroll
  593.  *
  594.  * Creator:suqioali
  595.  * Data:2004-6-15 
  596.  *
  597.  */
  598. void DIR_DrawScroll(void)
  599. {
  600.     int  x, y, xRepeat, yRepeat;
  601.     x = fsArea[FS_AREA_DIR_SLOT].xStart;
  602.     y = fsArea[FS_AREA_DIR_SLOT].yStart;
  603.     xRepeat = fsArea[FS_AREA_DIR_SLOT].xSize;
  604.     yRepeat = fsArea[FS_AREA_DIR_SLOT].ySize/FS_DIRSCROLLLEN_YSIZE;
  605.     
  606.     //FrameBuf_DrawRect(x, y, xSize, ySize,BLUE_Y, BLUE_CRCB);
  607.     FSGUI_DrawBackGround(x,y,xRepeat,yRepeat,LAY_BG_3_2);
  608. }
  609. /*
  610.  * Description:
  611.  *      Draw dir area move scroll
  612.  *
  613.  * Creator:suqioali
  614.  * Data:2004-6-15 
  615.  *
  616.  */
  617. void DIR_MoveScroll(UINT16 locate)
  618. {
  619.     int y;
  620.     
  621.     DIR_DrawScroll();
  622.     
  623.     if (( locate == dir_count_page - 1)&& (dir_count_page != 1))
  624.         y = ( fsArea[FS_AREA_DIR_MOVEBAR].yStart + fsArea[FS_AREA_DIR_MOVEBAR].ySize ) - dir_scroll_step;
  625.     else
  626.         y = fsArea[FS_AREA_DIR_MOVEBAR].yStart + locate * dir_scroll_step;
  627.         
  628.     FrameBuf_DrawRect(fsArea[FS_AREA_DIR_MOVEBAR].xStart, y, fsArea[FS_AREA_DIR_MOVEBAR].xSize, dir_scroll_len,
  629.         SCROLL_Y, SCROLL_CRCB);
  630. }
  631. void SelectHL()
  632. {
  633.     int iFiles;
  634. #ifdef MP3_DIRECT_SELECT
  635.     iFiles = pFsJpeg->count_file[pFsJpeg->gifsFuncBtn - FS_FUNC_MP3];
  636. #else
  637.     iFiles = pFsJpeg->file_specify_in_dir;
  638. #endif
  639.     HL_Width = 252;
  640. //in order to display playing dir
  641. #if 0
  642.     //ShowHL();//move to the last of SelectHL() zhaoyanhua  2004-2-2 17:13
  643. #ifdef MP3_TXT_DISPLAY //zhaoyanhua add 2003-9-2 9:40
  644.     if ( ( (JPEG_Preview_drawed == DIR_LIST_IN_DIR_AREA)
  645.          &&(pFsJpeg->gifsFuncBtn != FS_FUNC_MP3) )
  646.       || ( (MP3_Lyrics_Drawed == DIR_LIST_IN_DIR_AREA)
  647.          &&(pFsJpeg->gifsFuncBtn == FS_FUNC_MP3)))//zhaoyanhua modify 2003-8-28 13:29
  648. #else
  649.     //to avoid the bug : when play JPEG, BUTTON->FILE  (RIGHT) or(UP) ,not draw DIR playing again.
  650.     //zhaoyanhua modify 2003-12-27 11:10
  651.     if ( ((JPEG_Preview_drawed == DIR_LIST_IN_DIR_AREA) &&(!(pFsJpeg->gifsbPreview))
  652.         &&(pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG))//for JPEG 
  653.       ||((JPEG_Preview_drawed == DIR_LIST_IN_DIR_AREA) && (pFsJpeg->gifsFuncBtn != FS_FUNC_JPEG))//for MP3/OTHER 
  654.        )
  655. #endif
  656. #endif
  657.         ShowCurrentDirPlaying();
  658.      ShowCurrentFilePlaying();
  659.     
  660. if ((old_ControlArea != pFsJpeg->ControlArea) 
  661.     || (pFsJpeg->ControlArea < CNT_AREA_MP3BUTTON))//only for right and left command or in dir and file area //feeling
  662.         ShowHL();
  663. }
  664. void ShowHL(void)
  665. {
  666.     #ifdef AUDIO_SHOW_SAVER
  667.     if (bDisableGUI) return;
  668.     #endif
  669.     // clear last HL
  670.     switch (old_ControlArea)
  671.     {
  672.         case  CNT_AREA_FILE:
  673.                 //zhaoyanhua add 2004-2-2 16:54
  674.                 //make some changes for the GUI not blink .
  675.                 if(HL_show == fsnav_file_HL)
  676.                     ShowCurrentFilePlaying();
  677.                 else
  678.                 {
  679.                     FSGUI_ClearArea(FS_AREA_FILEITEM,HL_show);
  680.                     ShowFileIcon();
  681.                     FSShowFileItem(HL_show, iso9660_file[pFsJpeg->file_array[HL_show]].name);//resume the last HL
  682.                 }
  683.                 break;
  684.         case  CNT_AREA_DIR:
  685.                 //zhaoyanhua add 2004-2-2 16:54
  686.                 //make some changes for the GUI not blink .
  687.                 if(HL_show == fsnav_dir_HL)
  688.                     ShowCurrentDirPlaying();
  689.                 else
  690.                 {
  691.                     FSGUI_ClearArea(FS_AREA_DIRITEM,HL_show);
  692.                     FSShowDirIcon();
  693.                     ShowDirItem(HL_show,iso9660_dir[pFsJpeg->dir_array[HL_show]].name);//resume the last HL
  694.                 }
  695.                 break;
  696.         case  CNT_AREA_MP3BUTTON:
  697.                 {
  698.                     if (pFsJpeg->gifsFuncBtn== FS_FUNC_MP3)
  699.                         FSGUI_DrawOneButton(FS_FUNC_MP3, DOWN_STATE);
  700.                     else
  701.                         FSGUI_DrawOneButton(FS_FUNC_MP3, UP_STATE);
  702.                 }
  703.                 break;
  704.         case  CNT_AREA_JPEGBUTTON:
  705.                 {
  706.              if (pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG)
  707.                         FSGUI_DrawOneButton(FS_FUNC_JPEG, DOWN_STATE);
  708.              else
  709.                         FSGUI_DrawOneButton(FS_FUNC_JPEG, UP_STATE);
  710.                 }
  711.                 break;
  712. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  713.         case  CNT_AREA_GAMEBUTTON:
  714.                 {
  715.          if (pFsJpeg->gifsFuncBtn == FS_FUNC_GAME)
  716.                         FSGUI_DrawOneButton(FS_FUNC_GAME, DOWN_STATE);
  717.          else
  718.                         FSGUI_DrawOneButton(FS_FUNC_GAME, UP_STATE);
  719.                 }
  720.                 break;
  721. #endif
  722. #ifdef SUPPORT_FILE_SYSTEM_MODE
  723.         case  CNT_AREA_OTHERBUTTON:
  724.                 {
  725.          if (pFsJpeg->gifsFuncBtn == FS_FUNC_OTHER)
  726.                         FSGUI_DrawOneButton(FS_FUNC_OTHER, DOWN_STATE);
  727.          else
  728.                         FSGUI_DrawOneButton(FS_FUNC_OTHER, UP_STATE);
  729.                 }
  730.                 break;
  731. #endif
  732. #ifdef SUPPORT_MIDI
  733.         case  CNT_AREA_MIDIBUTTON:
  734.             {
  735.      if (pFsJpeg->gifsState == FS_FUNC_MIDI)
  736.                     FSGUI_DrawOneButton(FS_FUNC_MIDI, DOWN_STATE);
  737.      else
  738.                     FSGUI_DrawOneButton(FS_FUNC_MIDI, UP_STATE);
  739.             }
  740.             break;
  741. #endif
  742.         default: break;
  743.    }
  744.     // draw current HL
  745.     switch (pFsJpeg->ControlArea)
  746.     {
  747.         case  CNT_AREA_FILE:
  748.                 {
  749.                     HL_show = pFsJpeg->file_will;
  750.                     old_ControlArea = CNT_AREA_FILE;
  751.                     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 );   
  752.                     ShowFileIcon();
  753.                     fontFocus();
  754.                     FSShowFileItem(HL_show , iso9660_file[pFsJpeg->file_array[HL_show]].name);//resume the last HL
  755.                     fontunFocus();
  756.                     /// NOTE:
  757.                     // These code are put here ,for they will used by FSGUI_Refresh()/FSGUI_CmdLeft/FSGUI_CmdRight()
  758.                     // if MP3_Lyrics_Drawed is 1,then show lyrics.
  759.                     //zhaoyanhua add 2003-9-1 17:49
  760.                     #ifdef MP3_TXT_DISPLAY
  761.                     ShowLyricsWhileHL();
  762.                     #endif    
  763.                 }
  764.                 break;
  765.         case  CNT_AREA_DIR:
  766.                 {
  767.                     HL_show = pFsJpeg->dir_current;
  768.                     old_ControlArea = CNT_AREA_DIR;
  769.                     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);
  770.                     FSShowDirIcon();
  771.                     fontFocus();
  772.                     ShowDirItem(HL_show,iso9660_dir[pFsJpeg->dir_array[HL_show]].name);//resume the last HL
  773.                     fontunFocus();
  774.                 }
  775.                 break;
  776.         case  CNT_AREA_MP3BUTTON:
  777.                 {
  778.                     old_ControlArea = CNT_AREA_MP3BUTTON;
  779.         FSGUI_DrawOneButton(FS_FUNC_MP3, HL_STATE);
  780.              }
  781.                 break;
  782.         case  CNT_AREA_JPEGBUTTON:
  783.                 {
  784.                     old_ControlArea = CNT_AREA_JPEGBUTTON;
  785.                     FSGUI_DrawOneButton(FS_FUNC_JPEG, HL_STATE);
  786.                 }
  787.                 break;
  788. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  789.         case  CNT_AREA_GAMEBUTTON:
  790.                 {
  791.                     old_ControlArea = CNT_AREA_GAMEBUTTON;
  792.         FSGUI_DrawOneButton(FS_FUNC_GAME, HL_STATE);
  793.                 }
  794.                 break;
  795. #endif
  796. #ifdef SUPPORT_FILE_SYSTEM_MODE
  797.         case  CNT_AREA_OTHERBUTTON:
  798.                 {
  799.                     old_ControlArea = CNT_AREA_OTHERBUTTON;
  800.                     FSGUI_DrawOneButton(FS_FUNC_OTHER, HL_STATE);
  801.                 }
  802.                 break;
  803. #endif
  804. #ifdef SUPPORT_MIDI
  805.         case  CNT_AREA_MIDIBUTTON:
  806.                 {
  807.                     old_ControlArea = CNT_AREA_MIDIBUTTON;
  808.             FSGUI_DrawOneButton(FS_FUNC_MIDI, HL_STATE);
  809.                 }
  810.                 break;
  811. #endif
  812.     default: break;
  813.     }
  814. }
  815. void ShowCurrentFilePlaying()
  816. {
  817.     //avoid when HL and the current page in the same item,not show HL. zhaoyanhua 3-7-15 21:12
  818.     if (pFsJpeg->ControlArea == CNT_AREA_FILE)
  819.     {
  820.     #if 0
  821.         if (HL_show == fsnav_file_HL)
  822.         return;
  823.     #endif
  824.     }
  825.     FSGUI_ClearArea(FS_AREA_FILEITEM,fsnav_file_HL);
  826.     //not to disappear symbol of mp3,suqiaoli add,2004-10-9
  827.     ShowFileIcon();
  828.     FSShowFileItem(fsnav_file_HL, iso9660_file[pFsJpeg->file_array[fsnav_file_HL]].name);//resume the last HL
  829.     #ifdef NEW_MP3_GUI_DEBUG
  830.     printf("***ShowCurrentFile ,file_page_now = %d,file_page_will = %d,file_current =%dn",pFsJpeg->file_page_now,pFsJpeg->file_page_will,pFsJpeg-> file_current);
  831.     #endif
  832.     //In the same page ,show the HL.
  833.     if ((pFsJpeg->file_page_will) == (pFsJpeg->file_page_now) )
  834.     {
  835.         fsnav_file_HL = (pFsJpeg->file_current);
  836.         FileList();//feeling 2004-07-28
  837.         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 );   
  838.         ShowFileIcon();
  839.         fontFocus();
  840.         FSShowFileItem(fsnav_file_HL, iso9660_file[pFsJpeg->file_array[fsnav_file_HL]].name);//                     
  841.         fontunFocus();
  842.     }
  843. }
  844. /*
  845.  * FUNC: to show current dir which is playing.
  846.  *
  847.  * Creator: zhaoyanhua
  848.  * date: 3-7-2 12:56
  849.  */
  850. void ShowCurrentDirPlaying()
  851. {
  852.     UINT16  dir_now = 0,dir_will = 0;
  853.     if (pFsJpeg->ControlArea == CNT_AREA_DIR)
  854.     {
  855. #if 0//zhoayanhua mask 2004-2-2 17:16
  856.         if (HL_show == fsnav_dir_HL)
  857.             return;
  858. #endif          
  859.     }
  860.     //clear the last HL DirItem.
  861.     
  862.     FSGUI_ClearArea(FS_AREA_DIRITEM,fsnav_dir_HL);
  863.     ShowDirItem(fsnav_dir_HL, iso9660_dir[pFsJpeg->dir_array[fsnav_dir_HL]].name);//resume the last HL
  864.     FSShowDirIcon();
  865.     //locate the positon of fsnav_dir_will and fsnav_dir_now  in the current type(MP3/JPEG/GAME).
  866.     dir_will = antiAnchorDir(pFsJpeg->fsnav_dir_will);
  867.     dir_now  =  antiAnchorDir(pFsJpeg->fsnav_dir_now);
  868.     //In the same page ,show the HL.
  869.     if ((dir_will / PER_PAGE) == (dir_now / PER_PAGE) )
  870.     {
  871.         fsnav_dir_HL = dir_now % PER_PAGE;
  872.         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 );   
  873.         FSShowDirIcon();
  874.         fontFocus();
  875.         ShowDirItem(fsnav_dir_HL, iso9660_dir[pFsJpeg->dir_array[fsnav_dir_HL]].name);
  876.         fontunFocus();
  877.     }
  878. }
  879. /* Description:
  880.  *    Draw a Triange in given postion
  881.  * NOTE:
  882.  *    I divide a isoceles triangle into two right-angled triangles.
  883.  *    Their Hypotenuse has contrarily  slope.
  884.  *
  885.  * INPUT:
  886.  *    xStart --->  x postion
  887.  *    yStart --->  y postion
  888.  *    iBottom ---> the bottom of the Triange
  889.  *    iHight ----> the height of the Triange
  890.  *    iDir   ----> UP    
  891.  *                 DOWN  
  892.  * RETURN:
  893.  *    if can not draw the Triangle in the given point (xStart, yStart) return FALSE    
  894.  *    else return TRUE
  895.  *
  896.  * Creator: zhaoyanhua 
  897.  * Date: 2004-6-11 17:08  
  898.  *
  899.  */
  900. BYTE  DrawTriangle(UINT16 xStart, UINT16 yStart, UINT16 iBottom, UINT16 iHight, BYTE iDir, UINT16 iColorY, UINT16 iColorCrCb) 
  901. {
  902.     UINT16  a = iBottom/2;
  903.     UINT16  b = iHight;   
  904.     UINT16  iSlope = b/a;
  905.     int  i = 0, j = 0, k = 0;
  906.     INT8  iSign = 0;
  907.     INT16 iMaxHight = 0;  
  908.     
  909.     if (iDir == 1)
  910.     {    
  911.         //error  check
  912.         if ((yStart - b) < 0)//
  913.             return FALSE;
  914.         
  915.         iSign = 1;
  916.         iMaxHight = b;
  917.     }
  918.     else 
  919.     {
  920.         //error check
  921.         if ((yStart + b) > 480)//exceed the screen max line
  922.             return FALSE;
  923.             
  924.         iSign = -1;
  925.         iMaxHight = -b;
  926.     }
  927.      
  928.     //printf("#### Draw Triangle -Slope:%d-iSign:%d-n",iSlope,iSign);
  929.     //draw left part: right-angled triangle(which right angle in its right) 
  930.     for (i = 0; i < a; i++)
  931.     {
  932.         //for dir = 1 y = b/a*x; start point(0,0)
  933.         //for dir = 0, y = -b/a*x start point(0,0)
  934.         j = (iSign)*iSlope * i;
  935.         
  936.         for (k = 0; k <= (iSign*j); k++)
  937.         {
  938.             //printf("11111111Draw Trigle : i:%d, iSign * iMaxHight: %d,j = :%d k:%d--n",i,iSign * iMaxHight,j,k);
  939.             //for dir = 1, when draw left part, yStart increase in negative direction
  940.             //for dir = 0, when draw left part, ystart inscreese in positive direction 
  941.             *Y_XY((xStart + i), (yStart+ k*((-1)*iSign))) = iColorY;
  942.             *C_XY((xStart + i), (yStart+ k*((-1)*iSign))) = iColorCrCb;
  943.         }
  944.         if (j >= (iSign * iMaxHight))
  945.             break;
  946.     }    
  947.     
  948.     //draw right part:right-angled triangle(which right angle in its left) 
  949.     for (i = a; i < iBottom; i++)
  950.     {
  951.         //for dir = 1,line : y = (a+b)-b/a*x; start point(a,-b)
  952.         //for dir = 0,line : y = -(a+b)+b/a*x; start point(a,b)
  953.         j = (iSign)*(a + b - (iSlope*i));
  954.         
  955.         for (k = 0; k <= (iSign*j); k++)
  956.         {
  957.             //printf("2222222Draw Trigle : i:%d, j = :%d,k:%d--n",i, j,k);
  958.             //for dir = 1, when draw left part, yStart increase in negative direction
  959.             //for dir = 0, when draw left part, ystart inscreese in positive direction 
  960.             *Y_XY((xStart + i), (yStart + k*((-1)*iSign))) = iColorY;
  961.             *C_XY((xStart + i), (yStart + k*((-1)*iSign))) = iColorCrCb;    
  962.         } 
  963.            
  964.         if ((j*iSign) <= 0)
  965.             break;
  966.     }
  967.     
  968.     return TRUE;
  969. }
  970. /*
  971.  * Description:
  972.  *     draw a reverse bmp with iLayoutIndex bmp.
  973.  * INPUT:
  974.  *    xStart  ---> x start postion
  975.  *    yStart  ---> y Start postion
  976.  *    iLayoutIndex ---> the index in g_aBitmapLayout
  977.  *    iMode ----->  reverse mode(veer)
  978.  *                 
  979.  *
  980.  */          
  981. void FSGUI_DrawReverseBmp(UINT16 xStart, UINT16 yStart, BYTE iLayoutIndex, BYTE iMode)
  982. {
  983.  
  984.     const BITMAP_LAYOUT* pLayout  =  &g_aBitmapLayout[iLayoutIndex];
  985.     BYTE iWidth = *(g_aBitmap[pLayout->uiIndex]+0);
  986.     BYTE iHeight = *(g_aBitmap[pLayout->uiIndex]+1);
  987.     
  988.     if (iHeight % 4)
  989.         iHeight = (iHeight/4+1)*4;
  990.     BYTE  ReverseBmp[iWidth*iHeight+3];
  991.     
  992.     //only draw bmp no need repeat
  993.     if ((pLayout->uiXRepeat != 0) 
  994.        ||(pLayout->uiYRepeat != 0))
  995.         return;
  996.     
  997.     ReverseImg(g_aBitmap[pLayout->uiIndex],ReverseBmp, 1);
  998.     
  999.     FrameBuf_DrawBmp(xStart, yStart, 
  1000.                      ReverseBmp,
  1001.                      //g_aBitmap[pLayout->uiIndex],
  1002.                      g_aPalette[pLayout->uiPalette]);
  1003.             
  1004.     
  1005. }
  1006. /*
  1007.  * FUNC: to show title string on left of the top buttons.
  1008.  *
  1009.  * Creator: feeling 
  1010.  * date: 2004-06-21
  1011.  */
  1012. void FSGUI_ShowBtnTitle(void)
  1013. {
  1014. //show buttton title string
  1015. switch(pFsJpeg->gifsFuncBtn)
  1016. {
  1017. case FS_FUNC_IDLE:
  1018.             psprintf(linebuf,"%s","WAITING");
  1019.             break;
  1020. case FS_FUNC_MP3:
  1021.             psprintf(linebuf,"%s","MUSIC");
  1022. break;
  1023. case FS_FUNC_JPEG:
  1024.             psprintf(linebuf,"%s","PHOTO");
  1025.             break;
  1026. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME)
  1027. case FS_FUNC_GAME:
  1028.             psprintf(linebuf,"%s","GAME");
  1029.             break;
  1030. #endif
  1031. #ifdef SUPPORT_FILE_SYSTEM_MODE
  1032. case FS_FUNC_OTHER:
  1033.             psprintf(linebuf,"%s","VIDEO");
  1034.             break;
  1035. #endif         
  1036. }
  1037.  FSGUI_DrawBackGround(fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].xStart,
  1038. fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].yStart,
  1039. fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].xSize,
  1040. fsArea[FS_AREA_BUTTONTITLE_BACKGROUND].ySize,
  1041. LAY_TAB_BAR2_2); //clear the background
  1042. FSGUI_ShowString(fsArea[FS_AREA_BUTTONTITLE].xStart,
  1043. fsArea[FS_AREA_BUTTONTITLE].yStart,
  1044. linebuf,
  1045. FS_FONTCOLOR_TITLE_Y,
  1046. FS_FONTCOLOR_TITLE_CrCb);
  1047. }
  1048. /*
  1049.  * FUNC: to show font color when Focus on font.
  1050.  *
  1051.  * Creator: suqiaoli
  1052.  * date: 2004-6-28 
  1053.  */
  1054. void fontFocus(void)
  1055. {
  1056.     file_focus_y = BLACK_Y;
  1057.     file_focus_CrCb = BLACK_CRCB;
  1058. }
  1059. /*
  1060.  * FUNC: to show font color when not Focus on font
  1061.  *
  1062.  * Creator: suqiaoli
  1063.  * date: 2004-6-28 
  1064.  */
  1065. void fontunFocus(void)
  1066. {
  1067.     file_focus_y = FS_FONTCOLOR_FILE_Y;
  1068.     file_focus_CrCb = FS_FONTCOLOR_FILE_CrCb;   
  1069. }    
  1070. /*
  1071.  * FUNC: to show selected item ,two sides and a rect
  1072.  *       side width = rect with
  1073.  *       side height = 1 piexl 
  1074.  *
  1075.  * Creator: suqiaoli
  1076.  * date: 2004-7-9 
  1077.  */
  1078. void DrawSelectedRectWithSide(UINT16 xStart, UINT16 yStart, UINT16 xLen, UINT16 yLen, UINT16 RectY, UINT16 RectCrCb,UINT16 SideY ,UINT16 SideCrCb)
  1079. {
  1080.     FrameBuf_DrawLine( xStart, yStart -1, xLen, 1, SideY, SideCrCb );
  1081.     FrameBuf_DrawRect( xStart, yStart, xLen, yLen, RectY, RectCrCb );
  1082.     FrameBuf_DrawLine( xStart, yStart + yLen , xLen, 1, SideY, SideCrCb );
  1083. }    
  1084. #endif//#ifdef FS_BMP_GUI