📄 thumb.c
字号:
}
//***************************************************************************
// Function : _THUMBNAIL_ClearScreen
// Abstract : This function will clear the screen to the color of the background.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes : This function will clear all data in frame buffer.
//***************************************************************************
void _THUMBNAIL_ClearScreen(void)
{
#ifndef NO_PICTURECD
HAL_JPEGDecode(HAL_JPEG_STOP_DECODE);
_THUMBNAIL_JPEG_PSFB(TRUE);
#endif
}
//***************************************************************************
// Function : THUMBNAIL_Entry
// Abstract : Call this function to enter thumbnail mode.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes : This function will initialize _bChangeToNextPic, _bStop,
// : _wThumbnailIndex, _wThumbnailPlayIndex, __bPageNO and dwPreTime.
//***************************************************************************
void THUMBNAIL_Entry(void)
{
#ifndef NO_PICTURECD
/*
if (__bThumbnailMode)
return;
*/
OSD_Output(MSG_GUI, OSD_UI_THUMBNAIL, 0xFF); //tell OSD enter thumbnail mode
//initialize some global variables when entering thumbnail first time.
_THUMBNAIL_Initial();
//CoCo2.39, disable video to prvent see wrong data when File Manager to Thumbnail.
HAL_Display(HAL_DISPLAY_VIDEO, FALSE); //CoCo1.24a, don't disable the video display for "摧紇" issue
//CoCo2.31, wait the "disable video" action OK before doing JPEG reset.
__dwCheckTime = UTL_GetSysTimer();
while ((UTL_GetSysTimer() - __dwCheckTime ) < COUNT_100_MSEC)
{
W99AV_ReadDRAMData (0xC1, &__dwTemp);
if (HIWORD(__dwTemp) == 0) //The "disable video" action is OK.
break;
}
HAL_JPEGDecode(HAL_JPEG_STOP_DECODE);
__bAttrPlayNew = ATTR_JPG;
//UTL_SetPlayMode(MODE_PLAYVIDEO);
//__btActiveFrame = !__btActiveFrame;
__btActiveFrame = 0;
_THUMBNAIL_ClearScreen();
W99AV_WriteDRAMData(W99AV_DRAM_JPEG_HCS, 0);
W99AV_WriteDRAMData(W99AV_DRAM_JPEG_VCS, 0);
//CoCo2.27, Tune JPEG buffer.
if (__bDVDROM)
{
W99AV_WriteDRAMData(W99AV_DRAM_JPEG_HCW, (((DWORD)HAL_DISPLAY_DVD_JPEG_WIDTH) << 16));
W99AV_WriteDRAMData(W99AV_DRAM_JPEG_VCW, (((DWORD)HAL_DISPLAY_DVD_JPEG_HEIGHT) << 16));
}
else
{
W99AV_WriteDRAMData(W99AV_DRAM_JPEG_HCW, (((DWORD)HAL_DISPLAY_CD_JPEG_WIDTH) << 16));
W99AV_WriteDRAMData(W99AV_DRAM_JPEG_VCW, (((DWORD)HAL_DISPLAY_CD_JPEG_HEIGHT) << 16));
}
HAL_Display(HAL_DISPLAY_JPEG, HAL_JPEG_DECODE);
HAL_Display(HAL_DISPLAY_VIDEO, TRUE); //CoCo1.25, should enable video always to prevent from entering thumbnail mode when first JPEG slide show is not decoded OK and the video is disabled.
//Initialize OSD in the new mode.
_THUMBNAIL_EnterNewMode();
#endif
}
//***************************************************************************
// Function : _THUMBNAIL_CheckPlayPageBoundary
// Abstract : This function will check if we have decoded all thumbnails
// : in a page.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes : Use _wThumbnailPlayIndex and __bPageNO to judge
// : Modify _bStop
//***************************************************************************
void _THUMBNAIL_CheckPlayPageBoundary(void)
{
#ifndef NO_PICTURECD
if (_THUMBNAIL_CheckPagePlayEnd()) //All thumbnails has been decoded in a page.
{
_bStop = TRUE;
_THUMBNAIL_UpdateHighlight(THUMBNAIL_UPDATE_HIGHLIGHT_DRAW);
_THUMBNAIL_DisplayPageInfo();
}
#endif
}
//***************************************************************************
// Function : _THUMBNAIL_UpdateHighlight
// Abstract : This function will Update the highlight.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes : _wHPos==>left, _wHALTemp==>right, _wHALTemp1==>top, __wTemp==>bottom
//***************************************************************************
void _THUMBNAIL_UpdateHighlight(BYTE bUpdate)
{
#ifdef SUPPORT_FM_BUTTONS
if ((bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_DRAW) && (_bCursorType == THUMBNAIL_CURSOR_BUTTON))
return; //The cursor is at the button. Don't update VCD3.0 highlight.
if (__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC)
{
//__rcHALVCD30Area.wLeft = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_DISPLAY_WIDTH * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
_wHPos = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_DISPLAY_WIDTH * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
//__rcHALVCD30Area.wLeft -= THUMBNAIL_TUNE_THUMB_FRAME_H_NTSC;
//_wHPos -= THUMBNAIL_TUNE_THUMB_FRAME_H_NTSC;
_wHPos -= _bTuneThumbFrame_H;
//__rcHALVCD30Area.wRight = __rcHALVCD30Area.wLeft + THUMBNAIL_DISPLAY_WIDTH - THUMBNAIL_FRAME_THICKNESS * 2;
_wHALTemp = _wHPos + THUMBNAIL_DISPLAY_WIDTH + THUMBNAIL_TUNE_DISPLAY_WIDTH_NTSC - THUMBNAIL_FRAME_THICKNESS * 2;
if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
//__rcHALVCD30Area.wTop = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
_wHALTemp1 = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
else //general mode
//__rcHALVCD30Area.wTop = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
_wHALTemp1 = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
//__rcHALVCD30Area.wTop -= THUMBNAIL_TUNE_THUMB_FRAME_V_NTSC;
//_wHALTemp1 -= THUMBNAIL_TUNE_THUMB_FRAME_V_NTSC;
_wHALTemp1 -= _bTuneThumbFrame_V;
//__rcHALVCD30Area.wBottom = __rcHALVCD30Area.wTop + THUMBNAIL_DISPLAY_HEIGHT_NTSC - THUMBNAIL_FRAME_THICKNESS * 2;
__wTemp = _wHALTemp1 + THUMBNAIL_DISPLAY_HEIGHT_NTSC + THUMBNAIL_TUNE_DISPLAY_HEIGHT_NTSC- THUMBNAIL_FRAME_THICKNESS * 2;
}
else
{
//__rcHALVCD30Area.wLeft = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + (THUMBNAIL_DISPLAY_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
_wHPos = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + (THUMBNAIL_DISPLAY_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
//__rcHALVCD30Area.wLeft -= THUMBNAIL_TUNE_THUMB_FRAME_H_PAL;
//_wHPos -= THUMBNAIL_TUNE_THUMB_FRAME_H_PAL;
_wHPos -= _bTuneThumbFrame_H;
//__rcHALVCD30Area.wRight = __rcHALVCD30Area.wLeft + (THUMBNAIL_DISPLAY_WIDTH+THUMBNAIL_TUNE_DISPLAY_WIDTH_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
_wHALTemp = _wHPos + (THUMBNAIL_DISPLAY_WIDTH+THUMBNAIL_TUNE_DISPLAY_WIDTH_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
//__rcHALVCD30Area.wTop = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
_wHALTemp1 = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
else //general mode
//__rcHALVCD30Area.wTop = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
_wHALTemp1 = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
//__rcHALVCD30Area.wTop -= THUMBNAIL_TUNE_THUMB_FRAME_V_PAL;
//_wHALTemp1 -= THUMBNAIL_TUNE_THUMB_FRAME_V_PAL;
_wHALTemp1 -= _bTuneThumbFrame_V;
//__rcHALVCD30Area.wBottom = __rcHALVCD30Area.wTop + (THUMBNAIL_DISPLAY_HEIGHT_NTSC+THUMBNAIL_TUNE_DISPLAY_HEIGHT_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
__wTemp = _wHALTemp1 + (THUMBNAIL_DISPLAY_HEIGHT_NTSC+THUMBNAIL_TUNE_DISPLAY_HEIGHT_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
}
if (bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_DRAW)
__GDIParm.u.RectParm.bColor = THUMBNAIL_PALETTE_ENTRY_HIGHLIGHT;
else
__GDIParm.u.RectParm.bColor = PAL_ENTRY_COLOR_TRANSPARENT;
//SET_RECT(__GDIParm.u.RectParm.rect, __rcHALVCD30Area.wLeft, __rcHALVCD30Area.wTop, __rcHALVCD30Area.wRight, __rcHALVCD30Area.wBottom);
SET_RECT(__GDIParm.u.RectParm.rect, _wHPos, _wHALTemp1, _wHALTemp, __wTemp);
//Draw the highlight in the file window.
GDI_FillRect((PPARM_RECT)&__GDIParm);
if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST)
{
//if (FM_GetFileType(__ProgIdxList[_wThumbnailIndex].wSubIndex) != EXTNAME_JPG)
if (__pProgContent[_wThumbnailIndex].bExtID != EXTNAME_JPG)
{
if ((bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_CLEAR) && (_wThumbnailIndex > (__bProgramMaxEntry-1)))
return;
_THUMBNAIL_ShowFileExtInProgramList((BYTE)(_wThumbnailIndex%PROGRAM_LIST_TOTAL_NUM_IN_PAGE), bUpdate);
}
}
#else //Use the selected frame to represet current cursor.
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
_THUMBNAIL_GetPosition((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE));
#endif
if (bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_DRAW)
{
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
_THUMBNAIL_UsePSFBDrawFrame(THUMBNAIL_HIGHLIGHT_COLOR);
#else
_THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_SELECT);
#endif
}
else //clear highlight
{
if (_wThumbnailIndex > _wThumbnailPlayIndex)
{
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
_THUMBNAIL_UsePSFBDrawFrame(THUMBNAIL_BACKGROUND_COLOR);
#else
_THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_CLEAR);
#endif
}
else
{
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
_THUMBNAIL_UsePSFBDrawFrame(THUMBNAIL_FRAME_COLOR);
#else
_THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_NORMAL);
#endif
}
}
#endif //SUPPORT_FM_BUTTONS
}
//***************************************************************************
// Function : _THUMBNAIL_CheckUpBoundary
// Abstract : This function will check if the highlight exceeds the
// : up item or not.
// Arguments : none.
// Return : TRUE ==> exceed up item.
// : FALSE ==> not exceed up item.
// Side Effect : none.
// Notes :
//***************************************************************************
BYTE _THUMBNAIL_CheckUpBoundary(void)
{
#ifndef NO_PICTURECD
#ifdef SUPPORT_FM_BUTTONS
if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
{
_bTHUMBNAILTemp = _bProgramPageNo;
}
else //general mode
{
_bTHUMBNAILTemp = __bPageNO;
}
if (_wThumbnailIndex < (COLUMN_NUM + _bTHUMBNAILTemp * _bThumbnailTotalNum[_bThumbnailSubMode]))
return TRUE;
#else
if (_wThumbnailIndex < (COLUMN_NUM + __bPageNO * TOTAL_NUM_IN_PAGE))
return TRUE;
#endif //SUPPORT_FM_BUTTONS
#endif //NO_PICTURECD
return FALSE;
}
//***************************************************************************
// Function : _THUMBNAIL_CheckDownBoundary
// Abstract : This function will check if the highlight exceeds the
// : down item or not.
// Arguments : none.
// Return : TRUE ==> exceed down item.
// : FALSE ==> not exceed down item.
// Side Effect : none.
// Notes :
//***************************************************************************
BYTE _THUMBNAIL_CheckDownBoundary(void)
{
#ifndef NO_PICTURECD
#ifdef SUPPORT_FM_BUTTONS
if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
{
_bTHUMBNAILTemp = _bProgramPageNo;
}
else //general mode
{
_bTHUMBNAILTemp = __bPageNO;
}
if (((_wThumbnailIndex + COLUMN_NUM) >= ((_bTHUMBNAILTemp+1)*_bThumbnailTotalNum[_bThumbnailSubMode])) ||
((_wThumbnailIndex + COLUMN_NUM) >= _wThumbTotalFiles))
return TRUE;
#else
if (((_wThumbnailIndex + COLUMN_NUM) >= ((__bPageNO+1)*TOTAL_NUM_IN_PAGE)) ||
((_wThumbnailIndex + COLUMN_NUM) >= _wThumbTotalFiles))
return TRUE;
#endif //SUPPORT_FM_BUTTONS
#endif //NO_PICTURECD
return FALSE;
}
//***************************************************************************
// Function : _THUMBNAIL_CheckRightBoundary
// Abstract : This function will check if the highlight exceeds the
// : right item or not.
// Arguments : none.
// Return : TRUE ==> exceed right item.
// : FALSE ==> not exceed right item.
// Side Effect : none.
// Notes :
//***************************************************************************
BYTE _THUMBNAIL_CheckRightBoundary(void)
{
#ifndef NO_PICTURECD
if (((_wThumbnailIndex % COLUMN_NUM + 1) >= COLUMN_NUM) ||
((_wThumbnailIndex+1) >= _wThumbTotalFiles))
return TRUE;
#endif
return FALSE;
}
//***************************************************************************
// Function : _THUMBNAIL_CheckLeftBoundary
// Abstract : This function will check if the highlight exceeds the
// : left item or not.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -