📄 osdfm.c
字号:
if ((__FMSelectCursor.wIndex == 1) && _OSDFM_HaveUpFolder())
_bOSDFMTitleType = OSDFM_TITLE_TYPE_UP_FOLDER;
else
_bOSDFMTitleType = OSDFM_TITLE_TYPE_DIR;
break;
case POS_FILE_LIST:
if (__FMSelectCursor.wIndex < __pFMDirTree[__bFMActiveDir].bNoOfSubDir) //the cusor is at the folder
_bOSDFMTitleType = OSDFM_TITLE_TYPE_FILE_FOLDER;
else
_bOSDFMTitleType = OSDFM_TITLE_TYPE_FILE;
break;
case POS_BUTTON_LIST:
_bOSDFMTitleType = OSDFM_TITLE_TYPE_BUTTON;
break;
default:
break;
}
}
if (_bOSDFMTemp != _bOSDFMTitleType)
_bOSDFMUpdate = TRUE;
}
//***************************************************************************
// Function : _OSDFM_UpdateTitle
// Abstract : Call this function to update the title string.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _OSDFM_UpdateTitle(void)
{
//CoCo1.06, show playing file in the title.
if (_bOSDFMPlayingTitle && (!__btInputProgram))
return;
_OSDFM_PrepareUpdateTitle();
if (_bOSDFMUpdate)
{
//clear title region
_OSDFM_ClearRegion(OSDFM_CLEAR_TITLE_REGION);
}
else
{
if (__btProgram)
return;
}
//Set the color of the text.
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND);
GDI_SetTextColor(TEXT_FG_COLOR, OSDFM_PALETTE_ENTRY_TITLE_STRING);
//No shadow
_OSDFM_NOFontShadow();
switch (_bOSDFMTitleType)
{
case OSDFM_TITLE_TYPE_PROGRAM:
GDI_OUTPUT_TEXT(OSDFM_DISPLAY_TITLE_START_H, OSDFM_DISPLAY_TITLE_START_V, aFMProgramMode[_bOSDLang]);
break;
case OSDFM_TITLE_TYPE_DIR:
_OSDFM_UpdateFolderTitle(__bFMActiveDir);
break;
case OSDFM_TITLE_TYPE_FILE_FOLDER:
_OSDFM_UpdateFolderTitle((BYTE)(__pFMDirTree[__bFMActiveDir].b1stSubDirID + __FMSelectCursor.wIndex));
break;
case OSDFM_TITLE_TYPE_FILE:
_OSDFM_UpdateFileTitle();
break;
case OSDFM_TITLE_TYPE_UP_FOLDER:
case OSDFM_TITLE_TYPE_BUTTON:
default:
break;
}
}
//***************************************************************************
// Function : _OSDFM_UpdatePlayingTitle
// Abstract : Call this function to update the title string.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes : This function will draw the title off-screen and then copy to the exact plosition.
//***************************************************************************
void _OSDFM_UpdatePlayingTitle(void)
{
_bOSDFMPlayingTitle = TRUE;
_bOSDFMTitleType = OSDFM_TITLE_TYPE_PLAYING;
//Off scrren draw the title then use bitmap copy to copy the title to the exact position.
//clear title region
//_OSDFM_ClearRegion(OSDFM_CLEAR_TITLE_REGION);
//clear the off-screen region for title region.
SET_RECT(__GDIParm.u.RectParm.rect, OSDFM_DISPLAY_TITLE_START_H, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V), (OSDFM_DISPLAY_TITLE_START_H+OSDFM_DISPLAY_TITLE_WIDTH+1), (OSDFM_DISPLAY_TITLE_START_V+OSDFM_TITLE_FONT_HEIGHT+OSDFM_OFF_SCREEN_START_V));//yhtang_1108 according toxuli
__GDIParm.u.RectParm.bColor = OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND;
GDI_FillRect((PPARM_RECT)&__GDIParm);
_wHPos = OSDFM_DISPLAY_TITLE_START_H;
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND);
GDI_SetTextColor(TEXT_FG_COLOR, OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND);
GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_BLACK);
GDI_SetTextColor(TEXT_SHADOW_COLOR_2, GDI_ENTRY_4B_COLOR_WHITE);
GDI_CopyCodeString(aFMPlayingFolderTitle);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
//Set the color of the text.
GDI_SetTextColor(TEXT_BG_COLOR, OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND);
GDI_SetTextColor(TEXT_FG_COLOR, OSDFM_PALETTE_ENTRY_TITLE_STRING);
//No shadow
_OSDFM_NOFontShadow();
_wHPos += GDI_GetStringWidth();
GDI_CopyCodeString(aFMMouhow[OSDFM_PLAYING_TITLE_NUM_INDEX]);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
_wHPos += GDI_GetStringWidth();
_OSDFM_CopyDirString(__bFMPlayingDir, POS_DIR_LIST);
#ifdef SUPPORT_UNICODE //CoCo2.36, support UICODE string.
GDI_DRAW_UNICODE_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V), _wOSDFMMaxStringSpace);
#else
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
#endif
_wHPos += GDI_GetStringWidth();
GDI_CopyCodeString(aFMSpace[OSDFM_PLAYING_TITLE_NUM_INDEX]);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
_wHPos += GDI_GetStringWidth();
GDI_CopyCodeString(aFMPlayingFileTitle);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
_wHPos += GDI_GetStringWidth();
OSD_OutputNum((WORD)(__FMActiveCursor.wIndex - __pFMDirTree[__bFMPlayingDir].bNoOfSubDir + 1), OSDFM_PLAYING_TITLE_NUM_INDEX);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
_wHPos += GDI_GetStringWidth();
GDI_CopyCodeString(aFMSlash[OSDFM_PLAYING_TITLE_NUM_INDEX]);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
_wHPos += GDI_GetStringWidth();
OSD_OutputNum(__pwFMFilesOfDir[__bFMPlayingDir], OSDFM_PLAYING_TITLE_NUM_INDEX);
GDI_DRAW_STRING(_wHPos, (OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V));
//Use bitmap copy to copy the title to the title's position.
GDI_BITMAP_COPY(OSDFM_DISPLAY_TITLE_START_H, //left //for 4-bit mode (original "+1")
(OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V), //top
(OSDFM_DISPLAY_TITLE_START_H+OSDFM_DISPLAY_TITLE_WIDTH), //right
(OSDFM_DISPLAY_TITLE_START_V+OSDFM_OFF_SCREEN_START_V+OSDFM_TITLE_FONT_HEIGHT), //bottom
OSDFM_DISPLAY_TITLE_START_H, //X //for 4-bit mode (original "+1")
OSDFM_DISPLAY_TITLE_START_V, //Y
0, //source
0); //destionation
}
//***************************************************************************
// Function : _OSDFM_ClearRegion
// Abstract : This function will clear the specified region.
// Arguments : bClearRegion: The region that you want to clear.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _OSDFM_ClearRegion(BYTE bClearRegion)
{
switch (bClearRegion)
{
case OSDFM_CLEAR_ALL_REGION:
SET_RECT(__GDIParm.u.RectParm.rect, OSDFM_DISPLAY_BACKGROUND_H, OSDFM_DISPLAY_BACKGROUND_V, OSDFM_DISPLAY_BACKGROUND_RIGHT, OSDFM_DISPLAY_BACKGROUND_BOTTOM);
break;
case OSDFM_CLEAR_TITLE_REGION:
SET_RECT(__GDIParm.u.RectParm.rect, OSDFM_DISPLAY_TITLE_START_H, OSDFM_DISPLAY_TITLE_START_V, (OSDFM_DISPLAY_TITLE_START_H+OSDFM_DISPLAY_TITLE_WIDTH+1), (OSDFM_DISPLAY_TITLE_START_V+OSDFM_TITLE_FONT_HEIGHT));//XULI1108
break;
case OSDFM_CLEAR_TITLE_SUB_REGION:
SET_RECT(__GDIParm.u.RectParm.rect, _wHPos, OSDFM_DISPLAY_TITLE_START_V, (OSDFM_DISPLAY_TITLE_START_H+OSDFM_DISPLAY_TITLE_WIDTH), (OSDFM_DISPLAY_TITLE_START_V+OSDFM_TITLE_FONT_HEIGHT));
break;
#ifdef SUPPORT_FM_BUTTONS
case OSDFM_CLEAR_HELP_REGION:
SET_RECT(__GDIParm.u.RectParm.rect, OSDFM_DISPLAY_HELP_STRING_START_H, OSDFM_DISPLAY_HELP_STRING_START_V, OSDFM_DISPLAY_BACKGROUND_RIGHT, (OSDFM_DISPLAY_HELP_STRING_START_V+OSDFM_HELP_FONT_HEIGHT));
break;
case OSDFM_CLEAR_BUTTON_REGION:
SET_RECT(__GDIParm.u.RectParm.rect, OSDFM_BUTTON_START_H, OSDFM_BUTTON_START_V, OSDFM_DISPLAY_BACKGROUND_RIGHT, (OSDFM_BUTTON_START_V+OSDFM_BUTTON_HEIGHT));
break;
#endif //SUPPORT_FM_BUTTONS
case OSDFM_CLEAR_LEFT_FILE_WINDOW_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_BIG_FRAME_H+OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_BIG_FRAME_V+OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_H-1),
(OSDFM_DISPLAY_HORIZONTAL_SEPARATE_FRAME_V-1));
break;
case OSDFM_CLEAR_LEFT_FILE_WINDOW_CONTENT_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_BIG_FRAME_H+OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_BIG_FRAME_V+OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_LEFT_SCROLL_BAR_H-1),
(OSDFM_DISPLAY_HORIZONTAL_SEPARATE_FRAME_V-1));
break;
case OSDFM_CLEAR_RIGHT_FILE_WINDOW_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_H+OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_WIDTH+1),
(OSDFM_DISPLAY_BIG_FRAME_V+OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_BIG_FRAME_H+OSDFM_DISPLAY_BIG_FRAME_WIDTH-OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_BIG_FRAME_V+OSDFM_DISPLAY_BIG_FRAME_HEIGHT-OSDFM_DISPLAY_BIG_FRAME_THICKNESS));
break;
case OSDFM_CLEAR_RIGHT_FILE_WINDOW_CONTENT_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_H+OSDFM_DISPLAY_VERTICAL_SEPARATE_FRAME_WIDTH+1),
(OSDFM_DISPLAY_BIG_FRAME_V+OSDFM_DISPLAY_BIG_FRAME_THICKNESS),
(OSDFM_DISPLAY_RIGHT_SCROLL_BAR_H-1),
(OSDFM_DISPLAY_BIG_FRAME_V+OSDFM_DISPLAY_BIG_FRAME_HEIGHT-OSDFM_DISPLAY_BIG_FRAME_THICKNESS));
break;
case OSDFM_CLEAR_RIGHT_SCROLL_BAR_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
OSDFM_DISPLAY_RIGHT_SCROLL_BAR_H,
OSDFM_DISPLAY_SCROLL_BAR_V,
(OSDFM_DISPLAY_RIGHT_SCROLL_BAR_H+OSDFM_DISPLAY_SCROLL_BAR_WIDTH),
(OSDFM_DISPLAY_SCROLL_BAR_V+OSDFM_DISPLAY_RIGHT_SCROLL_BAR_HEIGHT));
break;
case OSDFM_CLEAR_LEFT_SCROLL_BAR_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
OSDFM_DISPLAY_LEFT_SCROLL_BAR_H,
OSDFM_DISPLAY_SCROLL_BAR_V,
(OSDFM_DISPLAY_LEFT_SCROLL_BAR_H+OSDFM_DISPLAY_SCROLL_BAR_WIDTH),
(OSDFM_DISPLAY_SCROLL_BAR_V+OSDFM_DISPLAY_LEFT_SCROLL_BAR_HEIGHT));
break;
case OSDFM_CLEAR_RECOVER_UPPER_REGION:
SET_RECT(__GDIParm.u.RectParm.rect,
(OSDFM_DISPLAY_TITLE_START_H+OSDFM_DISPLAY_TITLE_WIDTH),
OSDFM_DISPLAY_BACKGROUND_V,
OSDFM_DISPLAY_BACKGROUND_RIGHT,
(OSDFM_DISPLAY_BIG_FRAME_V-1));
break;
case OSDFM_CLEAR_RECOVER_BOTTOM_REGION:
SET_RECT(__GDIParm.u.RectParm.rect, __wOSDBottomHPos, __wOSDBottomVPos, OSDFM_DISPLAY_BACKGROUND_RIGHT, OSDFM_DISPLAY_BACKGROUND_BOTTOM);
break;
default:
break;
}
__GDIParm.u.RectParm.bColor = OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND;
GDI_FillRect((PPARM_RECT)&__GDIParm);
}
//***************************************************************************
// Function : _OSDFM_InitializeGDI
// Abstract : This function will initialize the palette and draw the background of the
// : File Manager UI.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _OSDFM_InitializeGDI(void)
{
GDI_ClearRegion(0); //clear region 0
#ifdef MINI_OSD_REGION //CoCo.230, borrow frame buffer to show OSD.
__bColorMode = COLOR_MODE_4_BIT;
__dwRegionHeight = GDI_REGION_HEIGHT; // 460
// Need to set to the correct DRAM address
__dwRegionTAddr = W99AV_ADDR_MPEG_FRAME_FOR_OS_T; //Use JPEG temp buffer.
__dwRegionBAddr = W99AV_ADDR_MPEG_FRAME_FOR_OS_B; //Use JPEG temp buffer.
GDI_ClearRegion_By_RISC(0);
GDI_InitialRegion (0); // initialize region to set it to 8-bit mode
#endif
GDI_SetCurrentRegion(0); //use region 0
#ifndef GDI_4_BIT_OSD
//Set the palette entry.
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_GENERAL_BACKGROUND, OSDFM_PALETTE_COLOR_GENERAL_BACKGROUND, TRUE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_TITLE_STRING, OSDFM_PALETTE_COLOR_TITLE_STRING, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_HELP_STRING, OSDFM_PALETTE_COLOR_HELP_STRING, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_GENERAL_STRING_IN_FILE_WINDOW, OSDFM_PALETTE_COLOR_GENERAL_STRING_IN_FILE_WINDOW, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_HIGHLIGHT_STRING_IN_FILE_WINDOW, OSDFM_PALETTE_COLOR_HIGHLIGHT_STRING_IN_FILE_WINDOW, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_HIGHLIGHT_BACKGROUND, OSDFM_PALETTE_COLOR_HIGHLIGHT_BACKGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_DISABLE_BUTTON_STRING, OSDFM_PALETTE_COLOR_DISABLE_BUTTON_STRING, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_ENABLE_BUTTON_STRING, OSDFM_PALETTE_COLOR_ENABLE_BUTTON_STRING, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_HIGHLIGHT_BUTTON_STRING, OSDFM_PALETTE_COLOR_HIGHLIGHT_BUTTON_STRING, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT, OSDFM_PALETTE_COLOR_NORMAL_FRAME_BRIGHT, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_NORMAL_FRAME_DARK, OSDFM_PALETTE_COLOR_NORMAL_FRAME_DARK, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_SELECT_FRAME_BRIGHT, OSDFM_PALETTE_COLOR_SELECT_FRAME_BRIGHT, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_SELECT_FRAME_DARK, OSDFM_PALETTE_COLOR_SELECT_FRAME_DARK, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_SEPARATE_FRAME_CENTER, OSDFM_PALETTE_COLOR_SEPARATE_FRAME_CENTER, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_ROOT_ICON_TEXT_FOREGROUND, OSDFM_PALETTE_COLOR_ROOT_ICON_TEXT_FOREGROUND, FALSE);
GDI_ChangePALEntry(OSDFM_PALETTE_ENTRY_ROOT_ICON_SHADOW_1, OSDFM_PALETTE_COLOR_ROOT_ICON_SHADOW_1, FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -