📄 osdfm.c
字号:
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_ROOT_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_ROOT_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_UPFOLDER_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_UPFOLDER_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_UPFOLDER_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_UPFOLDER_ICON_SHADOW_1, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_UPFOLDER_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_UPFOLDER_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_FOLDER_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_FOLDER_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_FOLDER_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_FOLDER_ICON_SHADOW_1, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_FOLDER_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_FOLDER_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_JPEG_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_JPEG_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_JPEG_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_JPEG_ICON_SHADOW_1, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_JPEG_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_JPEG_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_MP3_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_MP3_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_MP3_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_MP3_ICON_SHADOW_1, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_MP3_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_MP3_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_WMA_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_WMA_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_WMA_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_WMA_ICON_SHADOW_1, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_WMA_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_WMA_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_OPENFOLDER_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_OPENFOLDER_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_OPENFOLDER_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_OPENFOLDER_ICON_SHADOW_1, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_OPENFOLDER_ICON_SHADOW_2, OSDFM_PALETTE_COLOR_OPENFOLDER_ICON_SHADOW_2, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_TIME_STRING, OSDFM_PALETTE_COLOR_TIME_STRING, FALSE);
#endif
GDI_SetMixRatio(OSDFM_MIX_RATIO_BACKGROUND); //The mix ration just effects the background
_OSDFM_ClearRegion(OSDFM_CLEAR_ALL_REGION);
#ifndef GDI_4_BIT_OSD
GDI_LoadPalette(2); //load color table for bitmap button.
//Set the color of the background for the circle button.
GDI_ChangePALEntry(BMP_ENTRY_BUTTON_COLOR_BG, OSDFM_PALETTE_COLOR_GENERAL_BACKGROUND, TRUE);
#endif //GDI_4_BIT_OSD
GDI_ActivateRegion(); //open GDI
}
//***************************************************************************
// Function : _OSDFM_UpdateFolderTitle
// Abstract : This function will update the title for the folder.
// Arguments : bDirID: The ID of the directory.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _OSDFM_UpdateFolderTitle(BYTE bDirID)
{
_wHPos = OSDFM_DISPLAY_TITLE_START_H + GDI_GetCodeStringWidth(aFMTotalFiles[_bOSDLang]);
if (_bOSDFMUpdate)
{
GDI_OUTPUT_TEXT(OSDFM_DISPLAY_TITLE_START_H, OSDFM_DISPLAY_TITLE_START_V, aFMTotalFiles[_bOSDLang]);
}
else
{
_OSDFM_ClearRegion(OSDFM_CLEAR_TITLE_SUB_REGION);
}
OSD_OutputNum(__pwFMFilesOfDir[bDirID], OSDFM_TITLE_NUM_INDEX);
GDI_DRAW_STRING(_wHPos, OSDFM_DISPLAY_TITLE_START_V);
}
//***************************************************************************
// Function : _OSDFM_UpdateFileTitle
// Abstract : This function will update the title for the file.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _OSDFM_UpdateFileTitle(void)
{
_wHPos = OSDFM_DISPLAY_TITLE_START_H + GDI_GetCodeStringWidth(aFMFileNumber[_bOSDLang]);
if (_bOSDFMUpdate)
{
GDI_OUTPUT_TEXT(OSDFM_DISPLAY_TITLE_START_H, OSDFM_DISPLAY_TITLE_START_V, aFMFileNumber[_bOSDLang]);
}
else
{
_OSDFM_ClearRegion(OSDFM_CLEAR_TITLE_SUB_REGION);
}
OSD_OutputNum((WORD)(__FMSelectCursor.wIndex - __pFMDirTree[__bFMActiveDir].bNoOfSubDir + 1), OSDFM_TITLE_NUM_INDEX);
GDI_DRAW_STRING(_wHPos, OSDFM_DISPLAY_TITLE_START_V);
_wHPos += GDI_GetStringWidth();
GDI_CopyCodeString(aFMSlash[OSDFM_TITLE_NUM_INDEX]);
GDI_DRAW_STRING(_wHPos, OSDFM_DISPLAY_TITLE_START_V);
_wHPos += GDI_GetStringWidth();
OSD_OutputNum(__pwFMFilesOfDir[__bFMActiveDir], OSDFM_TITLE_NUM_INDEX);
GDI_DRAW_STRING(_wHPos, OSDFM_DISPLAY_TITLE_START_V);
}
//***************************************************************************
// Function : _OSDFM_UpdateHighlight
// Abstract : This function will update the highlight.
// Arguments : bUpdate: UPDATE_HIGHLIGHT_DRAW: draw the highlight.
// : UPDATE_HIGHLIGHT_CLEAR: clear the highlight.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _OSDFM_UpdateHighlight(BYTE bUpdate)
{
if (bUpdate == UPDATE_HIGHLIGHT_DRAW)
{
_OSDFM_UpdateTitle();
#ifdef SUPPORT_FM_BUTTONS
_OSDFM_UpdateHelp();
#endif
}
if (__FMSelectCursor.bPosition != POS_BUTTON_LIST)
{
if (bUpdate == UPDATE_HIGHLIGHT_DRAW)
{
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND);
GDI_SetTextColor(TEXT_FG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_STRING_IN_FILE_WINDOW);
//For the background of the highlight
__GDIParm.u.RectParm.bColor = OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND;
}
else if (bUpdate == UPDATE_HIGHLIGHT_CLEAR)
{
_OSDFM_NormalFileWindowStringPalette();
//clear highlight
__GDIParm.u.RectParm.bColor = OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND;
}
}
switch (__FMSelectCursor.bPosition)
{
case POS_DIR_LIST:
//CoCo1.10, the background for serial number.
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND);
if (__FMSelectCursor.wIndex == 0)
{
//CoCo1.10, add the serial number for DIR
//draw serial number
OSD_OutputNum(1, OSDFM_FILE_WINDOW_NUM_INDEX);
GDI_DRAW_STRING((OSDFM_DISPLAY_LEFT_SERIAL_NUM_START_H-GDI_GetStringWidth()), OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V);
GDI_CopyCodeString(aFMROOT[_bOSDLang]);
_bOSDFMIconType = OSDFM_ICON_TYPE_ROOT;
#ifdef SUPPORT_UNICODE
_bOSDFMDrawUnicodeString = FALSE;
#endif
}
else if ((__FMSelectCursor.wIndex == 1) && _OSDFM_HaveUpFolder())
{
GDI_CopyCodeString(aFMUpDIR[_bOSDLang]);
_bOSDFMIconType = OSDFM_ICON_TYPE_UPFOLDER;
#ifdef SUPPORT_UNICODE
_bOSDFMDrawUnicodeString = FALSE;
#endif
}
else
{
//CoCo1.10, add the serial number for DIR
//draw serial number
OSD_OutputNum((__bFMActiveDir+1), OSDFM_FILE_WINDOW_NUM_INDEX);
GDI_DRAW_STRING((OSDFM_DISPLAY_LEFT_SERIAL_NUM_START_H-GDI_GetStringWidth()), (OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT));
_OSDFM_CopyDirString(__bFMActiveDir, POS_DIR_LIST);
#ifdef SUPPORT_UNICODE
_bOSDFMDrawUnicodeString = TRUE;
#endif
if (bUpdate == UPDATE_HIGHLIGHT_DRAW)
_bOSDFMIconType = OSDFM_ICON_TYPE_OPENFOLDER;
else
{
if (__bActiveDirChange) //change dir really
{
_bOSDFMIconType = OSDFM_ICON_TYPE_FOLDER;
__bActiveDirChange = FALSE;
}
else //Only KEY_RIGHT/KEY_LEFT to change the highlight.
_bOSDFMIconType = OSDFM_ICON_TYPE_OPENFOLDER;
}
}
//CoCo1.10, recover the highlight background after output the serial number.
//For the background of the highlight
if (bUpdate == UPDATE_HIGHLIGHT_DRAW)
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND);
#ifdef SUPPORT_DYNAMIC_FILE_LENGTH
#ifdef SUPPORT_UNICODE //CoCo2.36, support UNICODE string.
if (_bOSDFMDrawUnicodeString)
_bOSDFMTemp3 = GDI_GetUnicodeStringMaxWidth(_wOSDFMMaxStringSpace);
else
_bOSDFMTemp3 = GDI_GetStringWidth();
#else
_bOSDFMTemp3 = GDI_GetStringWidth();
#endif
//Set the rectange of highlight
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_ICON_LEFT_WINDOW_START_H-OSDFM_HIGHLIGHT_DISTANCE_H),
(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT-OSDFM_HIGHLIGHT_DISTANCE_V),
(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_H+_bOSDFMTemp3+OSDFM_HIGHLIGHT_DISTANCE_H),
(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT+OSDFM_FILE_WINDOW_FONT_HEIGHT+OSDFM_HIGHLIGHT_DISTANCE_V));
#else
//Set the rectange of highlight
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_ICON_LEFT_WINDOW_START_H-OSDFM_HIGHLIGHT_DISTANCE_H),
(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT-OSDFM_HIGHLIGHT_DISTANCE_V),
(OSDFM_DISPLAY_ICON_LEFT_WINDOW_START_H-OSDFM_HIGHLIGHT_DISTANCE_H+OSDFM_FOLDER_HIGHLIGHT_WIDTH),
(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT+OSDFM_FILE_WINDOW_FONT_HEIGHT+OSDFM_HIGHLIGHT_DISTANCE_V));
#endif
//Draw the highlight in the file window.
GDI_FillRect((PPARM_RECT)&__GDIParm);
#ifdef SUPPORT_UNICODE //CoCo2.36, support UNICODE string.
if (_bOSDFMDrawUnicodeString)
GDI_DRAW_UNICODE_STRING(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_H, (OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT), _wOSDFMMaxStringSpace);
else
GDI_DRAW_STRING(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_H, (OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT));
#else
GDI_DRAW_STRING(OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_H, (OSDFM_DISPLAY_ITEM_LEFT_WINDOW_START_V+((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW)*OSDFM_DISPLAY_ITEM_HEIGHT));
#endif //SUPPORT_UNICODE
//Draw the icon
if (bUpdate == UPDATE_HIGHLIGHT_DRAW)
_OSDFM_DrawLeftFileWindowIcon((BYTE)((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW), TRUE);
else
_OSDFM_DrawLeftFileWindowIcon((BYTE)((__FMSelectCursor.wIndex-__bStartDrawDir)%OSDFM_MAX_DIR_IN_FILE_WINDOW), FALSE);
break;
case POS_FILE_LIST:
if (__FMSelectCursor.wIndex > (__wStartDrawItem+OSDFM_MAX_ITEM_IN_FILE_WINDOW-1))
{
if ((__FMSelectCursor.wIndex - (__wStartDrawItem+OSDFM_MAX_ITEM_IN_FILE_WINDOW-1)) > 1)
{
//update the __wStartDrawItem
__wStartDrawItem = __FMSelectCursor.wIndex - OSDFM_MAX_ITEM_IN_FILE_WINDOW + 1;
//clear right right file window
_OSDFM_ClearRegion(OSDFM_CLEAR_RIGHT_FILE_WINDOW_CONTENT_REGION); //Don't clear the right scroll bar because they are in the same folder.
//re-draw all
_OSDFM_DrawRightFileWindow();
//reset the color of the text
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND);
GDI_SetTextColor(TEXT_FG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_STRING_IN_FILE_WINDOW);
}
else
{
__wStartDrawItem++;
//scoll up. Do bitmap copy
GDI_BITMAP_COPY((OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_H+OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_WIDTH+4), //left //for 4-bit mode (original "+1")
(OSDFM_DISPLAY_ICON_RIGHT_WINDOW_START_V+OSDFM_DISPLAY_ITEM_HEIGHT-OSDFM_SELECT_FRAME_DISTANCE_V), //top
(OSDFM_DISPLAY_RIGHT_SCROLL_BAR_H-1), //right
(OSDFM_DISPLAY_ICON_RIGHT_WINDOW_START_V+(OSDFM_MAX_ITEM_IN_FILE_WINDOW-1)*OSDFM_DISPLAY_ITEM_HEIGHT+OSDFM_FILE_WINDOW_FONT_HEIGHT+OSDFM_SELECT_FRAME_DISTANCE_V), //bottom
(OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_H+OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_WIDTH+4), //X //for 4-bit mode (original "+1")
(OSDFM_DISPLAY_ICON_RIGHT_WINDOW_START_V- OSDFM_SELECT_FRAME_DISTANCE_V), //Y
0, //source
0); //destionation
//Then clear the last dir in this page and re-draw it.
_OSDFM_ClearItemRegionInFileWindow(OSDFM_RIGHT_FILE_WINDOW, (OSDFM_MAX_ITEM_IN_FILE_WINDOW-1));
_OSDFM_UpdateRightScrollBar();
}
//Re-set the background's color.
__GDIParm.u.RectParm.bColor = OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND;
}
else if (__FMSelectCursor.wIndex < __wStartDrawItem)
{
if ((__wStartDrawItem - __FMSelectCursor.wIndex) > 1)
{
//update the __wStartDrawItem
__wStartDrawItem = __FMSelectCursor.wIndex;
//clear right right file window
_OSDFM_ClearRegion(OSDFM_CLEAR_RIGHT_FILE_WINDOW_CONTENT_REGION); //Don't clear the right scroll bar because they are in the same folder.
//re-draw all
_OSDFM_DrawRightFileWindow();
//reset the color of the text
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND);
GDI_SetTextColor(TEXT_FG_COLOR, OSDFM_PALETTE_ENTRY_HIGHLIGHT_STRING_IN_FILE_WINDOW);
}
else
{
__wStartDrawItem--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -