📄 mediaplayeroutlook.c
字号:
/*
MPO_PRINTF("FILE(%s), FUNC(%s), LINE(%d)::\n", __FILE__, __FUNCTION__, __LINE__);
*/
/*************************MPO_LowLevel.c*****************************
*
* Copyright (C) 2003 by ALi Corporation. All Rights Reserved.
*
* File: MPO_LowLevel.c
*
* Contents:
* To draw Media Player's ( STATIC ) Outlook -- Implementation
*
* History:
* Date By Reason Ver.
* ====================================
* 2003/07 Gordon J.H. CHEN Create v2.7
*
***********************************************************************/
//#define __MPO_DEBUG__
#ifdef __MPO_DEBUG__
#define MPO_ASSERT(cond) \
{ \
if( !(cond) ) \
{ \
MPO_PRINTF( "\n #####@@@@@@@@Assertion error in function %s [ line %d in file %s ]@@@@@@@@##### \n", __FUNCTION__, __LINE__, __FILE__); \
} \
}
#define MPO_ENTER_FUNC \
{ \
MPO_PRINTF("\n @@@@@@@@@@@@@Enter function %s@@@@@@@@@@@@@ \n", __FUNCTION__); \
}
#define MPO_EXIT_FUNC \
{ \
MPO_PRINTF("\n @@@@@@@@@@@@@Leave function %s from line %d@@@@@@@@@@@@@ \n", __FUNCTION__, __LINE__); \
}
#else //__MPO_DEBUG__
#include "stdarg.h"
#define MPO_PRINTF(...)
#define MPO_ASSERT(cond)
#define MPO_ENTER_FUNC
#define MPO_EXIT_FUNC
#endif //__MPO_DEBUG__
//#define __MPA_DEBUG__
#ifdef __MPA_DEBUG__
#define MPA_ASSERT(cond) \
{ \
if( !(cond) ) \
{ \
MPA_PRINTF( "\n #####@@@@@@@@Assertion error in function %s [ line %d in file %s ]@@@@@@@@##### \n", __FUNCTION__, __LINE__, __FILE__); \
} \
}
#define MPA_ENTER_FUNC \
{ \
MPA_PRINTF("\n @@@@@@@@@@@@@Enter function %s@@@@@@@@@@@@@ \n", __FUNCTION__); \
}
#define MPA_EXIT_FUNC \
{ \
MPA_PRINTF("\n @@@@@@@@@@@@@Leave function %s from line %d@@@@@@@@@@@@@ \n", __FUNCTION__, __LINE__); \
}
#else //__MPA_DEBUG__
#include "stdarg.h"
#define MPA_PRINTF(...)
#define MPA_ASSERT(cond)
#define MPA_ENTER_FUNC
#define MPA_EXIT_FUNC
#endif //__MPA_DEBUG__
#include "MediaPlayerOutlook.h"
#include "MediaPlayerOutlookDef.h"
#include "newres.h"
#include "ui_sub.h" // UI_CORE_STOP, ...
#include "fileopen.h" // C_DIR, C_MP3FILE, ...
#ifdef _MPLAY_ENABLE_
#define PROG_ITEM_NULL 0xFFFF
/*********************************************************************
*********************************************************************/
//Media Player Outlook Attribute
//private:
typedef enum {LEFT_TOP=0, LEFT_BOT, RIGHT_TOP, RIGHT_BOT} tScrollIndex;
typedef enum {HIGHLIGHT_ON_LIST=0, HIGHLIGHT_ON_PROG, HIGHLIGHT_NOT_ON_BOTH} tHighlightPos;
struct
{
WORD iDiscMediaType; //DiscMediaType: C_MP3FILE, C_MP3FILE|C_JPGFILE, ...
tPlayerType iPlayerType[PLAYER_MAX_TAB_COUNT]; //PlayerType: MPLR_MUSIC, MPLR_PHOTO, MPLR_MOVIE, MPLR_CD, ...
BYTE iPlayerSelected; //Player: Player0, Player1, ...
}
MPO_Attr;
static DEVMODE gMPOdevMode;
HDC gMPOdc;
/*********************************************************************
*********************************************************************/
//Media Player Outlook Operation
//private: can be shared as elements to friend
//usage: 1 InitMediaPlayer(iDiscMediaType, iPlayerSelected);
// 2 Set...(...); / Get...(...); / InitMPODC(); Draw....(....); CloseMPODC();
// 3 CloseMediaPlayer();
// Init ...
void InitMediaPlayer(WORD iDiscMediaType, BYTE iPlayerSelected);
// Set...
//void SetMediaTypeTabSelected(BYTE iPlayerSelected);
// Get...
//WORD GetDiscMediaTypes();
WORD GetCurrentMediaType();
BYTE GetCurMediaTypeTabIndex();
BYTE GetMediaTypeTabCount();
tPlayerType GetCurrentPlayerType();
// DC...
void InitMPODC();
void CloseMPODC();
// Draw...
void ClearCanvas();
void DrawMainSection();
void DrawPlayback(WORD iPlayback, BOOL bIsSecondStop, BYTE bActionCtl, tHighlightType iHighlight);
void DrawTrackTime(BYTE *szTrackTime, tHighlightType iHighlight);
void DrawTrackNo(WORD iCurTrack, WORD iTotalTrack, tHighlightType iHighlight);
void DrawRepeat(WORD iMode, tHighlightType iHighlight);
void Draw3DSur(WORD iMode, tHighlightType iHighlight);
void DrawMediaTypeSelection(WORD iDiscMediaTypeIndex, tHighlightType iHighlight);
void DrawMediaTypeTabs();
void DrawListProgramPreview(tHighlightPos iHighlightPos, tHighlightType iHightlight);
void DrawListItemSign(WORD iItemIndex, BOOL bIsPlaying, tHighlightType iHighlight);
void DrawListItemText(WORD iItemIndex, BYTE *szItemText, BYTE bDIR, tHighlightType iHighlight);
void DrawScrollBar(tScrollIndex iScrollIndex, tHighlightType iHighlight);
void DrawPath(BYTE *strDirName, tHighlightType iHighlight);
/********************************************************************/
// change str format to UNICODE
void GORDON_UNICODE(char *str)
{
int i;
for(i=strlen(str); i>=0; i--)
{
str[i*2+1]=str[i];
str[i*2]=0;
}
}
/********************************************************************/
// Init MPO_Attr.iDiscMediaType, MPO_Attr.iPlayerSelected, MPO_Attr.iPlayerType[]
void InitMediaPlayer(WORD iDiscMediaType, BYTE iPlayerSelected)
{
int i=0;
extern BYTE bsetuplastplay;
bsetuplastplay = 0;//benjamin add
MPO_Attr.iDiscMediaType=iDiscMediaType;
MPO_Attr.iPlayerSelected=iPlayerSelected;
if( ((1<<C_CDFILE) & MPO_Attr.iDiscMediaType) ||
((1<<C_DTSFILE) & MPO_Attr.iDiscMediaType)
#if(_VCD_PROGRAM_MODE==_VCD_PROGRAM_ENABLE_)
||
(DiscType == C_VCD10 || DiscType == C_VCD20 || DiscType==C_SVCD)
#endif //_VCDPROGRAM_ENABLE_
)
{
MPO_Attr.iPlayerType[i]=MPLR_CD;
i++;
MPO_Attr.iPlayerType[i]=MPLR_NONE;
return;
}
#ifndef _MPLR_MUSIC_DISABLE_
if( ((1<<C_MP3FILE) & MPO_Attr.iDiscMediaType))
{
MPO_Attr.iPlayerType[i]=MPLR_MUSIC;
i++;
}
#endif //_MPLR_MUSIC_DISABLE_
#ifndef _MPLR_PHOTO_DISABLE_
if( ((1<<C_JPGFILE) & MPO_Attr.iDiscMediaType) )
{
MPO_Attr.iPlayerType[i]=MPLR_PHOTO;
i++;
}
#endif //_MPLR_PHOTO_DISABLE_
#ifndef _MPLR_MOVIE_DISABLE_
if( ((1<<C_MPGFILE) & MPO_Attr.iDiscMediaType))
{
MPO_Attr.iPlayerType[i]=MPLR_MOVIE;
i++;
}
#endif //_MPLR_MOVIE_DISABLE_
MPO_Attr.iPlayerType[i]=MPLR_NONE;
}
/********************************************************************/
// Get...
WORD GetCurrentMediaType()
{
WORD iDiscMediaType=0;
if(MPO_Attr.iPlayerType[MPO_Attr.iPlayerSelected]==MPLR_CD)
{
iDiscMediaType |=MPO_Attr.iDiscMediaType;
return iDiscMediaType;
}
if(MPO_Attr.iPlayerType[MPO_Attr.iPlayerSelected]==MPLR_MUSIC)
{
iDiscMediaType |=( (1<<C_MP3FILE)& MPO_Attr.iDiscMediaType );
return iDiscMediaType;
}
if(MPO_Attr.iPlayerType[MPO_Attr.iPlayerSelected]==MPLR_PHOTO)
{
iDiscMediaType |=( (1<<C_JPGFILE)& MPO_Attr.iDiscMediaType );
return iDiscMediaType;
}
}
/********************************************************************/
// Get...
BYTE GetCurMediaTypeTabIndex()
{
return MPO_Attr.iPlayerSelected;
}
/********************************************************************/
// Get...
BYTE GetMediaTypeTabCount()
{
BYTE i;
for(i=0; MPO_Attr.iPlayerType[i]!=MPLR_NONE; i++);
return i;
}
/********************************************************************/
// Get...
tPlayerType GetCurrentPlayerType()
{
return MPO_Attr.iPlayerType[MPO_Attr.iPlayerSelected];
}
/********************************************************************/
// DC...
void InitMPODC()
{
GUI_SetDevMode(&gMPOdevMode,CANVAS_WIDTH,CANVAS_HEIGHT);
GUI_InitializeDC(&gMPOdc,&gMPOdevMode,0.7);
}
/********************************************************************/
// DC...
void CloseMPODC()
{
GUI_TerminizeDC(&gMPOdc);
}
/********************************************************************/
//Clear Canvas
void ClearCanvas()
{
RECT rectCanvas={CANVAS_LEFT, CANVAS_TOP, CANVAS_RIGHT, CANVAS_BOTTOM};
COLORREF clCanvas;
clCanvas=CL_TRANSPARENT;
// cannot using mem dc
GUI_CreateButtonControl(gMPOdc, &rectCanvas, clCanvas,clCanvas, clCanvas, clCanvas, "", NORMAL_STRING, DT_CENTER, 0);
}
/********************************************************************/
// Status bar, Information window, Directory bar
void DrawMainSection()
{
RECT rectBack={BACKGROUND_LEFT, BACKGROUND_TOP, BACKGROUND_LEFT+BACKGROUND_WIDTH, BACKGROUND_TOP+BACKGROUND_HEIGHT};
RECT rectBackLeft={BACK_LEFT_LEFT, BACK_LEFT_TOP, BACK_LEFT_LEFT+BACK_LEFT_WIDTH, BACK_LEFT_TOP+BACK_LEFT_HEIGHT};
RECT rectBackUp={BACK_UP_LEFT, BACK_UP_TOP, BACK_UP_LEFT+BACK_UP_WIDTH, BACK_UP_TOP+BACK_UP_HEIGHT};
RECT rectBackRight={BACK_RIGHT_LEFT, BACK_RIGHT_TOP, BACK_RIGHT_LEFT+BACK_RIGHT_WIDTH, BACK_RIGHT_TOP+BACK_RIGHT_HEIGHT};
RECT rectBackDown={BACK_DOWN_LEFT, BACK_DOWN_TOP, BACK_DOWN_LEFT+BACK_DOWN_WIDTH, BACK_DOWN_TOP+BACK_DOWN_HEIGHT};
COLORREF clBack, clBackEdge;
clBack=GetColorInDef256Palette(MAIN_CLR_INDEX);
// size too big, cannot using mem dc
GUI_CreateButtonControl2(gMPOdc, &rectBack, clBack, clBack, clBack, clBack, "", NORMAL_STRING, 0, 0);
clBackEdge=CL_BKNOCARE;
GUI_CreateBitmapControl(gMPOdc, &rectBackLeft, clBackEdge, clBackEdge, clBackEdge, IM_MPLR_BACK_LEFT, 0, 0);
GUI_CreateBitmapControl(gMPOdc, &rectBackUp, clBackEdge, clBackEdge, clBackEdge, IM_MPLR_BACK_UP, 0, 0);
GUI_CreateBitmapControl(gMPOdc, &rectBackRight, clBackEdge, clBackEdge, clBackEdge, IM_MPLR_BACK_RIGHT, 0, 0);
GUI_CreateBitmapControl(gMPOdc, &rectBackDown, clBackEdge, clBackEdge, clBackEdge, IM_MPLR_BACK_DOWN, 0, 0);
}
/********************************************************************/
// Status Item -- Playback
char MP3_ICON_PAUSE[4]={0xe0, 0x22,0x00,0x00};
char MP3_ICON_PLAY[4]={0xe0, 0x23,0x00,0x00};
char MP3_ICON_PRESTOP[4]={0xe0, 0x24,0x00,0x00};
char MP3_ICON_STOP[4]={0xe0, 0x26,0x00,0x00};
char MP3_FF_2[6]={0xe0, 0x08,0x00,0x32,0x00,0x00};
char MP3_FF_4[6]={0xe0, 0x08,0x00,0x34,0x00,0x00};
char MP3_FF_8[6]={0xe0, 0x08,0x00,0x38,0x00,0x00};
char MP3_REW_2[6]={0xe0, 0x09,0x00,0x32,0x00,0x00};
char MP3_REW_4[6]={0xe0, 0x09,0x00,0x34,0x00,0x00};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -