📄 pcd_m.c
字号:
NO_PARENT,
static_user_op,
},
(void *)SC_TMP_MSG_ADDR
};
static const MS_STATIC tmp_string = {
{
MS_ASCII | MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
I_COLOR,
{TMP_X, MS_LINE_0, 96, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *)SC_TMP_STR_ADDR
};
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0815 : Moved from display.c
//#ifdef MILLENO
// ZORAN CDE0605 : Move track/time to left and make narrower
#define MSS_TRACK_X 296
#define MSS_TRACK_WIDTH (2 * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>
const MS_STATIC mp3_track_stat = {
{
// ZORAN CDE0605 : Move track/time to left and make narrower
#ifdef DISABLE
0,
#else
MS_ASCII,
#endif // DISABLE
ALIGN_LEFT,
SCREEN_COLOR,
// ZORAN CDE0605 : Move track/time to left and make narrower
{MSS_TRACK_X, MS_LINE_0, MSS_TRACK_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
// <<< ZORAN CDE0606 : Make "Track" narrower:
#ifdef DISABLE
(char *)S_TRACK
#else
(void *) "T:"
#endif // DISABLE
};
// <<< ZORAN CDE0605 : Move track_stat to left
#define MSS_TRACK_NUM_X (MSS_TRACK_X + MSS_TRACK_WIDTH)
// ZORAN CDE0710 : Widen track number
#define MSS_TRACK_NUM_WIDTH (8 * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>
const MS_STATIC mp3_track_num_stat = {
{
MS_ASCII | MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
SCREEN_COLOR,
// ZORAN CDE0605 : Move track/time to left
{MSS_TRACK_NUM_X, MS_LINE_0, MSS_TRACK_NUM_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(char *)SC_CURRENT_TIME_MSG_ADDR
};
// <<< ZORAN CDE0927 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
// <<< ZORAN CDE0605 : Move track_stat to left
#define PCDM_MSS_TRACK_NUM_X (PCDM_MSS_TMP_MSG_X + MSS_TMP_MSG_WIDTH + 24)
// ZORAN CDE0710 : Widen track number
#define PCDM_MSS_TRACK_NUM_WIDTH ((MAX_TRACK_DIGITS+1) * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>
const MS_STATIC jpg_track_num_stat = {
{
MS_ASCII | MS_STRING_ON_SC,
ALIGN_LEFT_PAD,
SCREEN_COLOR,
// ZORAN CDE0605 : Move track/time to left
{PCDM_MSS_TRACK_NUM_X, MS_LINE_0, PCDM_MSS_TRACK_NUM_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(char *)SC_CURRENT_TIME_MSG_ADDR
};
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0927 >>>
// <<< ZORAN CDE0605 : Move track_stat to left
#define MSS_TIME_X (MSS_TRACK_NUM_X + MSS_TRACK_NUM_WIDTH)
// ZORAN CDE0713 : Widen MP3 time
#define MSS_TIME_WIDTH (6 * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>
const MS_STATIC mp3_time_stat = {
{
MS_ASCII | MS_STRING_ON_SC,
ALIGN_LEFT,
SCREEN_COLOR,
// ZORAN CDE0605 : Move track_stat to left
{MSS_TIME_X, MS_LINE_0, MSS_TIME_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(char *)SC_TOTAL_TIME_MSG_ADDR
};
// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
#define MSS_TRACKS_X (PCDM_MSS_TRACK_NUM_X + PCDM_MSS_TRACK_NUM_WIDTH)
#define MSS_TRACKS_WIDTH (16 * MP3M_FONT_WIDTH)
const MS_STATIC jpg_track_stat = {
{
MS_ASCII,
ALIGN_LEFT,
SCREEN_COLOR,
{MSS_TRACKS_X, MS_LINE_0, MSS_TRACKS_WIDTH, MS_LINE_HEIGHT},
NO_PARENT,
static_user_op,
},
(void *) "Pictures on Disc"
};
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0924 >>>
// <<< ZORAN CDE1008 >>>
#ifdef D_PICTURE_CD_ENABLED
BOOL mp3m_can_zoom( void )
{
return ( IS_STATE(MP3M_STATE_IMAGE_OPEN));
}
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE1008 >>>
#if 1 //def DISABLE
// ZORAN CDE0816 : Change selected item in track list when track changes
void list_goto_track(WORD wTrackNext);
#endif
// <<< ZORAN CDE0927 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
static void pcdm_refresh_track( void )
{
static_user_op((MS_WIDGET*)&jpg_track_num_stat, MS_UOP_DISPLAY, !C_FOCUSED);
static_user_op((MS_WIDGET*)&jpg_track_stat, MS_UOP_DISPLAY, !C_FOCUSED);
}
#endif // D_PICTURE_CD_ENABLED
/// ZORAN CDE0927 >>>
// ZORAN CDE0815 : Changed name from refresh_mp3_track
void mp3_refresh_track(void)
{
// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
if ( IS_STATE(MP3M_STATE_LIST_INITIALIZED) && !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
{
if ( g_ui_active_menu_id == MP3_MENU_ID )
{
static_user_op((MS_WIDGET*)&mp3_track_stat, MS_UOP_DISPLAY, !C_FOCUSED);
static_user_op((MS_WIDGET*)&mp3_track_num_stat, MS_UOP_DISPLAY, !C_FOCUSED);
}
else
{
pcdm_refresh_track();
}
} // if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#else
static_user_op((MS_WIDGET*)&mp3_track_stat, MS_UOP_DISPLAY, !C_FOCUSED);
static_user_op((MS_WIDGET*)&mp3_track_num_stat, MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0924 >>>
#if 1 //def DISABLE
// ZORAN CDE0816 : Change selected item in track list when track changes
list_goto_track(SI_CDDA_TRACK_NUM);
#endif
}
// ZORAN CDE0815 : Changed name from refresh_mp3_time
void mp3_refresh_time(void)
{
#ifdef D_PICTURE_CD_ENABLED
if ( g_ui_active_menu_id == MP3_MENU_ID )
if ( IS_STATE(MP3M_STATE_LIST_INITIALIZED) && !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
static_user_op((MS_WIDGET*)&mp3_time_stat, MS_UOP_DISPLAY, !C_FOCUSED);
}
//#endif // MILLENO
// ZORAN CDE0815 >>>
#define I_COLOR_IMAGE MAKE_MS_COLOR( COLOR_INDEX_WHITE, COLOR_INDEX_TRANSPARENT, COLOR_INDEX_TRANSPARENT )
void pcdm_tmp_string_display(char *str)
{
#ifdef DISABLE
MS_hide((MS_WIDGET*)&tmp_string,(MS_DIALOG *)screen);
#endif
sc_SetBytes(SC_TMP_STR_ADDR, 0, strlen(str)+1, (BYTE*)str );
#ifdef D_PICTURE_CD_ENABLED
gmp3m.pmssTmpString->widget.color = (IS_STATE(MP3M_STATE_IMAGE_OPEN) ? I_COLOR_IMAGE : I_COLOR);
static_user_op((MS_WIDGET*)gmp3m.pmssTmpString, MS_UOP_DISPLAY, !C_FOCUSED);
#else
static_user_op((MS_WIDGET*)&tmp_string,MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
}
//dm
static void mp3m_permanent_msg_display(OSD_MESSAGES msg)
{
#ifdef DISABLE
static OSD_MESSAGES prev = -1;
if (prev != msg) {
MS_hide((MS_WIDGET*)&tmp_msg,(MS_DIALOG *)screen);
prev = msg;
}
#endif // DISABLE
// <<< ZORAN CDE0118 : SC_TMP_MSG_SZ is 1!
// sc_Write(SC_TMP_MSG_ADDR,4,(Sc_cont *)&msg);
sc_Write(SC_TMP_MSG_ADDR,1,(Sc_cont *)&msg);
// ZORAN CDE0118 >>>
#ifdef D_PICTURE_CD_ENABLED
gmp3m.pmssTmpMsg->widget.color = (IS_STATE(MP3M_STATE_IMAGE_OPEN) ? I_COLOR_IMAGE : I_COLOR);
static_user_op((MS_WIDGET*) gmp3m.pmssTmpMsg, MS_UOP_DISPLAY, !C_FOCUSED);
#else
static_user_op((MS_WIDGET*)&tmp_msg, MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
}
//dm
static void mp3m_tmp_msg_display(OSD_MESSAGES msg)
{
#ifdef DISABLE
static OSD_MESSAGES prev = -1;
if (prev != msg) {
MS_hide((MS_WIDGET*)&tmp_msg,(MS_DIALOG *)screen);
prev = msg;
}
#endif // DISABLE
// <<< ZORAN CDE0118 : SC_TMP_MSG_SZ is 1!
// sc_Write(SC_TMP_MSG_ADDR,4,(Sc_cont *)&msg);
sc_Write(SC_TMP_MSG_ADDR,1,(Sc_cont *)&msg);
// ZORAN CDE0118 >>>
#ifdef D_PICTURE_CD_ENABLED
gmp3m.pmssTmpMsg->widget.color = (IS_STATE(MP3M_STATE_IMAGE_OPEN) ? I_COLOR_IMAGE : I_COLOR);
static_user_op((MS_WIDGET*) gmp3m.pmssTmpMsg, MS_UOP_DISPLAY, !C_FOCUSED);
#else
static_user_op((MS_WIDGET*)&tmp_msg, MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
}
static void *dir_name_address( int iDirIndex )
{
void *pv;
pv = (void *) (WORD) (gi_FirstDirLoc + (iDirIndex * (DIRNAME_SZ / 4)));
return pv;
}
static void reset_directory_vars(void)
{
gmp3m.dirBounds.iFirstFileIndex = -1;
gmp3m.dirBounds.iLastFileIndex = -1;
gmp3m.dirBounds.iLastItemNum = -1;
}
static MS_UOP change_directory(void)
{
int iDirNum = gmp3m.iDirNum;
int iFirstFileIndex;
if ( g_dir_list_count > 1 )
{
iDirNum++;
if ( iDirNum >= g_dir_list_count )
iDirNum = 0;
#ifdef D_PICTURE_CD_ENABLED
gmp3m.pmssDirName->text = dir_name_address(iDirNum);
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
static_user_op((MS_WIDGET *) gmp3m.pmssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#else
mssDirName.text = dir_name_address(iDirNum);
static_user_op((MS_WIDGET *) &mssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
// Start from the beginning and relist files
if ( iDirNum > gmp3m.iDirNum )
{
iFirstFileIndex = gmp3m.dirBounds.iLastFileIndex + 1;
}
else
{
iFirstFileIndex = 0;
}
reset_directory_vars();
gmp3m.iDirNum = iDirNum;
#ifdef D_PICTURE_CD_ENABLED
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
mp3m_erase_menu();
list_files(iFirstFileIndex);
#ifdef D_PICTURE_CD_ENABLED
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
{
MS_refresh((MS_DIALOG *) screen);
update_scroll_statics();
}
}
return 0;
}
// <<< ZORAN CDE1003 : Handle previous image functionality
static MS_UOP previous_directory(void)
{
int iDirNum = gmp3m.iDirNum;
int iFirstFileIndex;
if ( g_dir_list_count > 1 )
{
iDirNum--;
if ( iDirNum < 0 )
iDirNum = g_dir_list_count - 1;
#ifdef D_PICTURE_CD_ENABLED
gmp3m.pmssDirName->text = dir_name_address(iDirNum);
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
static_user_op((MS_WIDGET *) gmp3m.pmssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#else
mssDirName.text = dir_name_address(iDirNum);
static_user_op((MS_WIDGET *) &mssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
reset_directory_vars();
gmp3m.iDirNum = iDirNum;
#ifdef D_PICTURE_CD_ENABLED
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
mp3m_erase_menu();
list_files(0);
#ifdef D_PICTURE_CD_ENABLED
if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
{
MS_refresh((MS_DIALOG *) screen);
update_scroll_statics();
}
}
return 0;
}
// ZORAN CDE1003 >>>
static MS_UOP dirName_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
MS_STATIC *mss = (MS_STATIC *)widget;
if ( uop == MS_UOP_ENTER )
{
uop = change_directory();
return uop;
}
if ( uop == MS_UOP_DISPLAY )
{
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: DISPLAY");
#endif
static_user_op(widget, uop, param);
if ( g_dir_list_count > 1 )
{
// REMINDER The second OSD_PutRect doesn't work (!?), so for now disable
// ( We're trying to display a 2-pixel wide line underneath and to at the right edge of the widget
#ifdef DISABLE
MS_POS msPos = widget->pos;
// Underline
OSD_PutRect(msPos.x, msPos.y + msPos.h - 2, msPos.w, 2, FG_COLOR(widget->color));
// Right line
OSD_PutRect(msPos.x + msPos.w - 8, msPos.y, 2, msPos.h - 2, FG_COLOR(widget->color));
#endif // DISABLE
}
return MS_UOP_NOP;
}
static_user_op(widget, uop, param);
if ( uop != 0 )
{
switch (uop)
{
case MS_UOP_LEFT:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: left key");
#endif
break;
case MS_UOP_RIGHT:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: right key");
#endif
break;
case MS_UOP_UP:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: up key");
#endif
break;
case MS_UOP_DOWN:
#ifdef NO_C_STDLIB
rtouts("\ndirname_user_op: down key");
#endif
break;
}
}
return uop;
}
static void layout (void)
{
go_CurrentLayout.m_bBigMemMap = TRUE;
go_CurrentLayout.m_cPixRes = 0;
// OSD can't start displaying at an arbitrary x-position, so we use 0 instead of X_OFFSET
go_CurrentLayout.m_wOriginX = 0;
// This can be set arbitrarily, as long as the m_wOriginY + m_wHeight <= video standard's height
go_CurrentLayout.m_wOriginY = 60;
go_CurrentLayout.m_wWidth = 720;
go_CurrentLayout.m_wHeight = MS_MAX_LINES_BIGMM;
go_CurrentLayout.m_cNbrHole = 0;
go_CurrentLayout.m_cInitColor = 0;
go_CurrentLayout.m_cNbrColor = 16;
go_CurrentLayout.m_pColorPalette = (OSD_Palette *)MenuBitmapColor;
OSDSetLayout();
OSDSetFont(0);
#ifdef NO_C_STDLIB
rtouts("\nMP3 LAYOUT");
rtouts("\nSizeof(gmp3m) = "); rtouti(sizeof(gmp3m));
#endif
}
// <<< ZORAN CDE0816 : Define BUTTON_NUMBER_TO_TRACK macro
#define BUTTON_NUMBER_TO_TRACK(_buttonNumber_) (gmp3m.firstDisplayed.iFileIndex + _buttonNumber_ + 1)
#define TRACK_TO_BUTTON_NUMBER(_track_) (_track_ - gmp3m.firstDisplayed.iFileIndex - 1)
// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
void close_slideshow( void )
{
CLEAR_STATE( MP3M_STATE_SLIDESHOW_ACTIVE );
timer_remove( gmp3m.pSlideshowTimer );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -