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

DVD

开发平台:

C/C++

  1. #include "global.h"
  2. #include "func.h" 
  3. #include "memmap.h"
  4. #include "util.h" 
  5. #include "graph.h"
  6. #include "framebuf.h"
  7. #include "macro.h"
  8. #include "stc.h"
  9. #include "cfont.h"
  10. #include "vfdfunc.h"
  11. #include "osd.h"
  12. #include "image.h"
  13. #include "iop.h"
  14. #include "memcfg.h"
  15. #include "ircmd.h"
  16. #include "dsp3_if.h"
  17. #include "user_init.h"
  18. #include "nesinit.h"
  19. #include "fs96602.h"
  20. #include "fsNAV.h"
  21. #include "fsGUI.h"
  22. #include "user_if.h"
  23. extern UINT16  Hl_x;
  24. extern UINT16  Hl_y;
  25. extern UINT16  Hl_len;
  26. extern UINT16  Hl_high;
  27. extern UINT16  Hl_x_btn;
  28. extern UINT16  Hl_y_btn;
  29. extern UINT16  Hl_len_btn;
  30. extern UINT16  old_file_page;         // index of current page
  31. extern UINT16  old_dir_page;
  32. extern UINT16  refresh_file_page;
  33. extern UINT16  refresh_dir_page;
  34. #ifdef HANYANG_LR_CHANGE_PAGE  //Maoyong for hanyang 2004.07.01
  35. extern void FSGUI_Dir2FileArea(void);
  36. #endif
  37. void FSGUI_Init()
  38. {
  39. pFsJpeg->scroll_len = 0;
  40. pFsJpeg->scroll_step = 0;
  41. pFsJpeg->Dir_Count = 0;
  42. pFsJpeg->File_Count = 0;            // number of file in current page
  43. pFsJpeg->File_Page_Count = 0;            // number of file page in current directory
  44. pFsJpeg->dir_page_now = 0;
  45. pFsJpeg->file_page_now = 0;            // index of current page
  46. old_dir_page = 0xffff;
  47. old_file_page = 0xffff;
  48. Hl_x = 0;
  49. Hl_y = 0;
  50. Hl_len = 0;
  51. Hl_high = 0;
  52. Hl_x_btn = 0;
  53. Hl_y_btn = 0;
  54. Hl_len_btn = 0;
  55. pFsJpeg->ControlArea = CNT_AREA_FILE;
  56. refresh_file_page = 1;
  57. refresh_dir_page = 1;
  58. }
  59. //Maoyong 2004.07.01. here is a common function for IR key to change fs file page
  60. //maybe used Left/Right or other pairs IR keys to do.
  61. //Should define the way for scroll page with SUPPORT_CHANGE_FILE_PAGE at the same time
  62. #ifdef SUPPORT_CHANGE_FILE_DIR_PAGE
  63. /*============================================================================
  64. Note: (1)file page up down in current directory range, just do up down highlight
  65.       (2)dir page up down in the button's all directory 
  66. =============================================================================*/
  67. extern void FSGUI_FileAreaUpdownRefresh(void);
  68. extern BYTE jpg_break_up_down;
  69. extern void FSGUI_File2DirArea(void);
  70. /*****************************************************************************
  71. Function:       int IsValidAreaChangePage(int direction)
  72. Description:    check if in FILE/DIR in file List state
  73. Input:          none
  74. Output:         1: valid GUI area to change page; 0: not
  75. ******************************************************************************/
  76. int IsValidAreaChangePage(void)
  77. {
  78.     if( ( cd_type_loaded == CDROM) && 
  79.         ( (pFsJpeg->gifsState == FS_STATE_LIST) || (pFsJpeg->gifsState == FS_STATE_MP3) ) &&
  80.         (JPEG_THUMBNAIL_MODE != pFsJpeg->g_nJpegMode )&&
  81.         ( (pFsJpeg->ControlArea == CNT_AREA_FILE) || (pFsJpeg->ControlArea == CNT_AREA_DIR) ) )
  82.         return 1;
  83.     else
  84.         return 0;
  85. }
  86. /*****************************************************************************
  87. Function: int IsValidRangeChangePage(int direction)
  88. Description:  check if in a valid range to change page
  89. Input:        direction: 1 = next page, 0 = prev page
  90. Output:       1: valid range to change page; 0: not
  91. *****************************************************************************/
  92. int IsValidRangeChangePage(int direction)
  93. {
  94.     int btn_dirs = 0;   
  95.     int dir_total_trk = 0;
  96.     int i = 0, j = 0;
  97.     if( ( (pFsJpeg->gifsState == FS_STATE_LIST) || (pFsJpeg->gifsState == FS_STATE_MP3) ) &&
  98.         (JPEG_THUMBNAIL_MODE != pFsJpeg->g_nJpegMode ) ){
  99.         if( pFsJpeg->ControlArea == CNT_AREA_FILE ) {  //for file page change
  100.             dir_total_trk = pFsJpeg->file_specify_in_dir;         
  101.             //check current track if overflow or underflow
  102.             if( ( (direction == 1) && (pFsJpeg->fsnav_trk_will + PER_PAGE > dir_total_trk ) ) || // in last dir
  103.              ( (direction == 0) && (pFsJpeg->fsnav_trk_will < PER_PAGE) ) )
  104.                 return 0;
  105.             else
  106.                 return 1;
  107.         }else if( pFsJpeg->ControlArea == CNT_AREA_DIR ) { //for dir page change
  108.             btn_dirs = pFsJpeg->count_dir[pFsJpeg->gifsFuncBtn - FS_FUNC_MP3]; 
  109.             if(btn_dirs <= PER_PAGE)
  110.                 return 0;
  111.             
  112.             //check how much dirs left by direction    
  113.             if(direction) {    
  114.                 for( i = pFsJpeg->fsnav_dir_will; i< pFsJpeg->fsnav_dir_cnt - 1; i++) {
  115.                     if( iso9660_dir[i].type & (0x01 << pFsJpeg->gifsFuncBtn) )
  116.                         j++;
  117.                 }
  118.             } else {       
  119.                 for( i = 0; i< pFsJpeg->fsnav_dir_will; i++) {
  120.                     if( iso9660_dir[i].type & (0x01 << pFsJpeg->gifsFuncBtn) )
  121.                         j++;
  122.                 }
  123.             }
  124.             
  125.             if(j >= PER_PAGE )
  126.                 return 1;
  127.         }
  128.     }
  129.     return  0;
  130. }
  131. /*****************************************************************************
  132. Function: void FSGUI_UpdownDirPage(int direction)
  133. Input:    direction: 1 = next page, 0 = prev page
  134. Output:   0: not do page change, 1: has do page change
  135. *****************************************************************************/
  136. void FSGUI_UpdownDirPage(int iUpdown)
  137. {
  138.     int diff, pre_find_dir, i ;
  139.     if(iUpdown){
  140.         diff =1;
  141.         pre_find_dir = 0;
  142.     } else {
  143.         diff = -1;
  144.         pre_find_dir = 1;
  145.     }
  146.     
  147.     for( i = 0; i< PER_PAGE; i++){
  148.         pFsJpeg->fsnav_dir_will += diff;
  149.         FSGUI_PreFindDir(&(pFsJpeg->fsnav_dir_will), pre_find_dir); //panxing for yuxing,2002-4-11
  150.         CalcDirNow(&(pFsJpeg->fsnav_dir_will));
  151.         FSShowDirIcon();
  152.         DirList();
  153.     }
  154.     FSGUI_File2DirArea();
  155. }
  156. /*****************************************************************************
  157. Function: void FSGUI_UpdownFilePage(int direction)
  158. Input:    direction: 1 = next page, 0 = prev page
  159. Output:   0: not do page change, 1: has do page change
  160. *****************************************************************************/
  161. void FSGUI_UpdownFilePage(int iUpdown)
  162. {
  163.     int i;
  164.     
  165.     if(iUpdown){
  166.         for(i = 0; i<PER_PAGE; i++){
  167.             if (pFsJpeg->file_will < (pFsJpeg->File_Count - 1)) {
  168.                 (pFsJpeg->file_will)++;
  169.                 pFsJpeg->fsnav_trk_will = pFsJpeg->file_array[pFsJpeg->file_will] - pFsJpeg->first_mp3_entry;
  170.             } else  {
  171.                 if (pFsJpeg->file_page_will < (pFsJpeg->File_Page_Count - 1))
  172. {
  173.                     pFsJpeg->file_page_will++;
  174.                     PrepareForChangeFilePage(pFsJpeg->file_page_will, 0, 0);
  175.                 }
  176.            }
  177.         } //for loop i
  178.     } else { // if(iUpDown)
  179.         for(i = 0; i<PER_PAGE; i++) {    
  180.             if (pFsJpeg->file_will > 0) {
  181.                 (pFsJpeg->file_will)--;
  182.                 pFsJpeg->fsnav_trk_will = pFsJpeg->file_array[pFsJpeg->file_will] - pFsJpeg->first_mp3_entry;
  183.             } else {
  184.                 if (pFsJpeg->file_page_will) {
  185.                     pFsJpeg->file_page_will--;
  186.                     PrepareForChangeFilePage(pFsJpeg->file_page_will, 0, 1);
  187.                 }
  188.             }
  189.         }//for loop i
  190.     }// if(iUpDown)            
  191.     ShowFileIcon();
  192.     FileList(); 
  193.     FSGUI_FileAreaUpdownRefresh();
  194.     FSGUI_Dir2FileArea();       //for un highlight the current playing file  
  195. }
  196. /************************************************************
  197. Function: int FSGUI_ChangFileDirPage(int direction)
  198. Input:    direction: 1 = next page, 0 = prev page
  199. Output:   0: not do page change, 1: has do page change
  200. *************************************************************/
  201. int FSGUI_ChangFileDirPage(int direction)
  202. {
  203.     if( !IsValidRangeChangePage(direction) ){
  204.             invalid_key();
  205.             return 0;       //no need to do page up down
  206.     }else if (pFsJpeg->ControlArea == CNT_AREA_FILE) {
  207.         FSGUI_UpdownFilePage(direction);
  208.         return 1;
  209.     }else if(pFsJpeg->ControlArea == CNT_AREA_DIR ){
  210.         FSGUI_UpdownDirPage(direction);
  211.         return 1;
  212.     }
  213.     return 0;
  214. }
  215. #endif //#ifdef SUPPORT_CHANGE_FILE_DIR_PAGE
  216. #if 0//yltseng merged to fsgui.c
  217. extern BYTE* get_font_entry(int, int);
  218. void FSGUI_ShowChar_SR(int x, int y, BYTE c, BYTE iY, UINT16 iCbCr) //Jeff 20020823
  219. {
  220. int     i, j, i4x, j2x;
  221. BYTE    *pFont;
  222. UINT32  my16Bits;
  223. #ifdef OSD_FONT_COMPRESS
  224. pFont = (BYTE *)(SDRAM_BASE + COMP_OSD_FONT * 1024 + font_table[c]);
  225. #else        
  226. pFont = (BYTE *)font_table[c];
  227. #endif        
  228. //draw a character
  229. for (i = 0; i < 12; i++)
  230. {
  231. BYTE c1, c2;
  232. i4x = i << 2;
  233. c1 = pFont[3 + i4x];
  234. c2 = pFont[4 + i4x];
  235. my16Bits = (c1 << 8) | c2;
  236. for (j = 0; j < 8; j++)
  237. {
  238. j2x = j << 1;
  239. if ((1 << j2x) & my16Bits)
  240. {
  241. *Y_XYB_SR( (x+8-j), (y+i) ) = iY;
  242. *C_XYB_SR( (x+8-j), (y+i) ) = iCbCr;
  243. }
  244.         }
  245. }
  246. }
  247. #if defined (USE_SMALL_FONT) && (defined (MP3_LARGE_GUI) || defined(FS_BMP_GUI))
  248. //libing 2005-1-5 21:23
  249. void FSGUI_ShowChar (BYTE vid, int x, int y, BYTE c, BYTE iY, UINT16 iCbCr) //Jeff 20020823
  250. {//libing modified it 2004-12-01 17:48 
  251.     // Modified by yltseng 20040329 to reduce some computation
  252. int     p, i, j;
  253. unsigned  uiData;
  254. unsigned  data, data1; 
  255. BYTE    *pFont = NULL;
  256. pFont = get_font_entry(0,c);
  257.     if( !pFont )
  258.         return;
  259.     //pFont += 3;
  260.          p = 2;   
  261. //draw a character
  262. for (i = 0; i < 16; i++)
  263. {
  264. if(i%2==0)
  265. {
  266. data = pFont[++p];
  267. data1 = pFont[++p] & 0xf0;
  268. uiData = data<<4 | data1>>4;
  269. }else{
  270.         data = pFont[p] & 0x0f;
  271.         data1 = pFont[++p];
  272.         uiData = data<<8 | data1; 
  273.                 }
  274. for (j = 0; j < 12; j++)
  275. {
  276. if ((1 << j) & uiData) 
  277. {
  278. if (vid == 2)
  279. {
  280. *Y_XYB( (x+12-j), (y+i) ) = iY;
  281. *C_XYB( (x+12-j), (y+i) ) = iCbCr;
  282. }
  283. else
  284. {
  285. *Y_XY( (x + 12 - j), (y+i) ) = iY;
  286. *C_XY( (x + 12 - j), (y+i) ) = iCbCr;
  287. }
  288. }
  289. }
  290. }
  291. }
  292. #elif defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI) //Maoyong 2003/12/19 add  for 720*480 MP3 GUI
  293. void FSGUI_ShowChar (BYTE vid, int x, int y, BYTE c, BYTE iY, UINT16 iCbCr) //Jeff 20020823
  294. {
  295.     // Modified by yltseng 20040329 to reduce some computation
  296. int     i, j;
  297. UINT16  uiData;
  298. BYTE    *pFont = NULL;
  299. pFont = get_font_entry(0,c);
  300.     if( !pFont )
  301.         return;
  302.     pFont += 3;
  303. //draw a character
  304. for (i = 0; i < 24; i++)
  305. {
  306. uiData = ( pFont[0] << 8 ) | pFont[1];
  307. for (j = 0; j < 16; j++)
  308. {
  309. if ((1 << j) & uiData) 
  310. {
  311. *Y_XY( (x + 16 - j), (y+i) ) = iY;
  312. *C_XY( (x + 16 - j), (y+i) ) = iCbCr;
  313. }
  314. }
  315.         pFont += 2;
  316. }
  317. }
  318. #elif defined (USE_SMALL_FONT) && (!defined (MP3_LARGE_GUI) && !defined(FS_BMP_GUI))
  319. //libing 2005-1-6 9:18
  320. void FSGUI_ShowChar(BYTE vid, int x, int y, BYTE c, BYTE iY, UINT16 iCbCr) //Jeff 20020823
  321. {//libing modified it 2004-12-01 17:48
  322.     // Modified by yltseng 20040329 to reduce some computation
  323. int     p, i, j;
  324. unsigned  uiData;
  325. unsigned  data, data1; 
  326. BYTE    *pFont = NULL;
  327. pFont = get_font_entry(0,c);
  328.     if( !pFont )
  329.         return;
  330.     //pFont += 3;
  331.          p = 1;   
  332. //draw a character
  333. for (i = 0; i < 8; i++)
  334. {
  335. p +=2;
  336. data = pFont[p];
  337. data1 = pFont[++p] & 0xf0;
  338. uiData = data<<4 | data1>>4;
  339. unsigned uiOffsetBit = 0x01;
  340. for (j = 0; j < 12; j++)
  341. {
  342. if (uiOffsetBit & uiData) 
  343. {
  344. if (vid == 2)
  345. {
  346. *Y_XYB( (x+12-j), (y+i) ) = iY;
  347. *C_XYB( (x+12-j), (y+i) ) = iCbCr;
  348. }
  349. else
  350. {
  351. *Y_XY( (x + 12 - j), (y+i+1) ) = iY;
  352. *C_XY( (x + 12 - j), (y+i+1) ) = iCbCr;
  353. }
  354. }
  355. uiOffsetBit <<= 2;
  356. }
  357. }
  358. }
  359. #else//#if defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI) //Maoyong 2003/12/19 add  for 720*480 MP3 GUI
  360. void FSGUI_ShowChar(BYTE vid, int x, int y, BYTE c, BYTE iY, UINT16 iCbCr) //Jeff 20020823
  361. {
  362.     // Modified by yltseng 20040329. Reduce computation and local variables
  363. int     i, j;
  364.     UINT16  uiData;
  365. BYTE    *pFont;
  366. pFont = get_font_entry(0,c);
  367.     if( !pFont )
  368.         return;
  369.         
  370.     pFont += 3;
  371. //draw a character
  372. #ifdef PULIANG_6PIC_GUI //yaowh add 05-02-04
  373. if (JPEG_THUMBNAIL_MODE == pFsJpeg->g_nJpegMode)
  374. for (i = 0; i < 24; i++)
  375. {
  376. uiData = ( pFont[0] << 8 ) | pFont[1];
  377. for (j = 0; j < 16; j++)
  378. {
  379. if ((1 << j) & uiData) 
  380. {
  381. *Y_XY( (x + 16 - j), (y+i) ) = iY;
  382. *C_XY( (x + 16 - j), (y+i) ) = iCbCr;
  383. }
  384. }
  385.         pFont += 2;
  386. }
  387. else
  388. #endif
  389. for (i = 0; i < 12; i++)
  390. {
  391.         uiData = (pFont[0] << 8) | pFont[1];
  392.         UINT32 uiOffsetBit = 0x01;
  393. for (j = 0; j < 8; j++)
  394. {
  395. if ( uiOffsetBit & uiData )
  396. {
  397. if (vid == 2)  //Jeff 20020823
  398. {
  399. *Y_XYB( (x+8-j), (y+i) ) = iY;
  400. *C_XYB( (x+8-j), (y+i) ) = iCbCr;
  401. }
  402. else
  403. {
  404. *Y_XY( (x+8-j), (y+i) ) = iY;
  405. *C_XY( (x+8-j), (y+i) ) = iCbCr;
  406. }
  407. }
  408.             uiOffsetBit <<= 2;
  409.         }
  410.         pFont += 4;
  411. }
  412. }
  413. #endif//if defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI)
  414. #ifdef FS_BMP_GUI
  415. /*
  416.     Function:in NTSC mode, show 1/4 size char for jpeg file information
  417.     Creator:Feeling
  418. */
  419. void FSGUI_ShowLittleChar(BYTE vid, int x, int y, BYTE c, BYTE iY, UINT16 iCbCr) 
  420. {
  421.     // Modified by yltseng 20040329. Reduce computation and local variables
  422. int     i, j;
  423.      UINT16  uiData;
  424. BYTE    *pFont;
  425. pFont = get_font_entry(0,c);
  426.     if( !pFont )
  427.         return;
  428.     pFont += 3;
  429. //draw a character
  430. for (i = 0; i < 12; i++)
  431. {
  432.         uiData = (pFont[0] << 8) | pFont[1];
  433.         UINT32 uiOffsetBit = 0x01;
  434. for (j = 0; j < 8; j++)
  435. {
  436. if ( uiOffsetBit & uiData )
  437. {
  438. if (vid == 2)  //Jeff 20020823
  439. {
  440. *Y_XYB( (x+8-j), (y+i) ) = iY;
  441. *C_XYB( (x+8-j), (y+i) ) = iCbCr;
  442. }
  443. else
  444. {
  445. *Y_XY( (x+8-j), (y+i) ) = iY;
  446. *C_XY( (x+8-j), (y+i) ) = iCbCr;
  447. }
  448. }
  449.             uiOffsetBit <<= 2;
  450.         }
  451.         pFont += 4;
  452. }
  453. }
  454. #endif//#ifdef FS_BMP_GUI
  455. #endif//#if 0//yltseng merged to fsgui.c