📄 psl_screen_layout.cpp
字号:
strcat(pButtonDrawInfo->cText, " : ");
/* convert second string */
ulSetting = ulSetting % 60;
cTmp[0] = (char)((ulSetting / 10) + '0');
cTmp[1] = (char)((ulSetting % 10) + '0');
cTmp[2] = '\0';
/* add second to time setting string */
strcat(pButtonDrawInfo->cText, cTmp);
/* draw status display buttons */
for (i = 0; i < pPSL->pStatusDisplay->pusNumButtons[pPSL->pStatusDisplay->usCurrentDisplay]; i++)
{
if (PslScreenLayoutDrawButton(&pPSL->pStatusDisplay->pButton[pPSL->pStatusDisplay->usCurrentDisplay][i]) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawStatusDisplay() -- failure drawing button\n"));
return (PSL_FAILURE);
}
}
/* copy draw buffer to display buffer */
DealCMBufferCopy(pPSL->pStatusDisplay->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
if (PslScreenLayoutIsStatusDisplayActive(pPSL) == FALSE)
{
/* Set timer to repeat every 1/4 second */
if (OS_TimerSetRepeatMsec(pPSL->pStatusDisplay->Timer, 250) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawStatusDisplay -- Timer set FAILED\n"));
return (PSL_FAILURE);
}
/* If icon is not already active, draw the icon */
if (PslScreenLayoutIsIconActive(pPSL) == FALSE)
{
ULONG ulNavState = PslExternalGetNavStatus();
/* get appropriate icon based on navigator state */
switch (ulNavState)
{
case PSL_STATUS_PAUSE:
pPSL->pIconData->pActiveIcon = PslBitmapGetPauseIcon();
break;
case PSL_STATUS_STOP:
pPSL->pIconData->pActiveIcon = PslBitmapGetStopIcon();
break;
case PSL_STATUS_PLAY:
pPSL->pIconData->pActiveIcon = PslBitmapGetPlayIcon();
break;
case PSL_STATUS_SLOW_FWD:
pPSL->pIconData->pActiveIcon = PslBitmapGetSlowFIcon();
break;
case PSL_STATUS_FAST_FWD:
pPSL->pIconData->pActiveIcon = PslBitmapGetFFIcon();
break;
case PSL_STATUS_FAST_RWD:
pPSL->pIconData->pActiveIcon = PslBitmapGetFRIcon();
break;
default:
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawStatusDisplay() -- invalid play state\n"));
return (PSL_FAILURE);
break;
}
/* draw the icon */
if (PslScreenLayoutDrawIcon(pPSL, pPSL->pIconData->pActiveIcon) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawStatusDisplay: Failed to draw icon!\n"));
return (PSL_FAILURE);
}
}
else if (pPSL->pIconData->pActiveIcon != PslBitmapGetProhibitedIcon() )
{
/* stop the icon timer */
if (OS_TimerStop(pPSL->pIconData->Timer) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawStatusDisplay -- Timer stop FAILED\n"));
return (PSL_FAILURE);
}
}
/* show the display surface */
DealCMShow(pPSL->pStatusDisplay->hDeal);
/* set the status display active bit */
pPSL->ulActiveInterface |= PSL_INTERFACE_TIMEDISPLAY;
}
return (PSL_SUCCESS);
}
/**
* PslScreenLayoutClearStatusDisplay -- Clear the status display
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslScreenLayoutClearStatusDisplay(PSL_HANDLE *pPSL)
{
if ( (pPSL == NULL) || (pPSL->pStatusDisplay == NULL) )
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearStatusDisplay() -- NULL pointer!\n"));
return (PSL_FAILURE);
}
if (PslScreenLayoutIsStatusDisplayActive(pPSL) == TRUE)
{
/* hide the display surface */
DealCMHide(pPSL->pStatusDisplay->hDeal);
/* clear the icon */
if (PslScreenLayoutClearIcon(pPSL, pPSL->pIconData->pActiveIcon) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearStatusDisplay -- Failure clearing icon!\n"));
return (PSL_FAILURE);
}
/* clear the display surface */
if (DealCMBufferClean(pPSL->pStatusDisplay->hDeal, DEAL_BUFFER_BOTH) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearStatusDisplay -- Failure clearing buffer\n"));
return (PSL_FAILURE);
}
/* Stop timer */
if (OS_TimerStop(pPSL->pStatusDisplay->Timer) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearStatusDisplay -- Timer stop FAILED\n"));
return (PSL_FAILURE);
}
/* clear the status display active bit */
pPSL->ulActiveInterface &= ~PSL_INTERFACE_TIMEDISPLAY;
}
return (PSL_SUCCESS);
}
/**
* PslScreenLayoutDrawCDDAInterface -- Draw the CDDA display
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslScreenLayoutDrawCDDAInterface(PSL_HANDLE *pPSL)
{
PSL_BUTTON_DRAW_INFO *pButtonDrawInfo = NULL;
USHORT i;
if (pPSL == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawCDDAInterface() -- NULL psl handle!\n"));
return (PSL_NULL_POINTER);
}
if (pPSL->pCddaGui == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawCDDAInterface() -- cdda interface not created\n"));
return (PSL_FAILURE);
}
/* Set initial display */
pPSL->pCddaGui->usCurrentDisplay = 0;
/* Get the title setting button draw info */
pButtonDrawInfo = (PSL_BUTTON_DRAW_INFO *)pPSL->pCddaGui->pButton[0][1].pvButtonDrawInfo;
/* Get cd track number */
pPSL->pCddaGui->StatusInfo.usChapter = (USHORT)(PslExternalGetCurrentChapter());
/* Conver track number to a string */
if (pPSL->pCddaGui->StatusInfo.usChapter < 10)
{
pButtonDrawInfo->cText[0] = pPSL->pCddaGui->StatusInfo.usChapter + '0';
pButtonDrawInfo->cText[1] = '\0';
}
else
{
pButtonDrawInfo->cText[0] = (pPSL->pCddaGui->StatusInfo.usChapter / 10) + '0';
pButtonDrawInfo->cText[1] = (pPSL->pCddaGui->StatusInfo.usChapter % 10) + '0';
pButtonDrawInfo->cText[2] = '\0';
}
/* draw cdda interface buttons */
for (i = 0; i < pPSL->pCddaGui->pusNumButtons[pPSL->pCddaGui->usCurrentDisplay]; i++)
{
if (PslScreenLayoutDrawButton(&pPSL->pCddaGui->pButton[pPSL->pCddaGui->usCurrentDisplay][i]) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawCDDAInterface() -- failure drawing button\n"));
return (PSL_FAILURE);
}
}
/* copy draw buffer to display buffer */
DealCMBufferCopy(pPSL->pCddaGui->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
if (PslScreenLayoutIsCDDAActive(pPSL) == FALSE)
{
/* Set timer to repeat every second */
if (OS_TimerSetRepeatMsec(pPSL->pCddaGui->Timer, 1000) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawCDDAInterface -- Timer set FAILED\n"));
return (PSL_FAILURE);
}
/* If icon is not already active, draw the icon */
if (PslScreenLayoutIsIconActive(pPSL) == FALSE)
{
/*
* Initialize gui to display stop state.
*/
/* Get the stop icon */
pPSL->pIconData->pActiveIcon = PslBitmapGetStopIcon();
/* draw the icon */
if (PslScreenLayoutDrawIcon(pPSL, pPSL->pIconData->pActiveIcon) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawCDDAInterface: Failed to draw icon!\n"));
return (PSL_FAILURE);
}
}
else
{
/* stop the icon timer */
if (OS_TimerStop(pPSL->pIconData->Timer) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawCDDAInterface -- Timer stop FAILED\n"));
return (PSL_FAILURE);
}
}
/* show the cdda gui surface */
DealCMShow(pPSL->pCddaGui->hDeal);
/* set the cdda gui active bit */
pPSL->ulActiveInterface |= PSL_INTERFACE_CDDA;
}
return (PSL_SUCCESS);
}
/**
* PslScreenLayoutClearCDDAInterface -- Clear the CDDA display
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslScreenLayoutClearCDDAInterface(PSL_HANDLE *pPSL)
{
if ( (pPSL == NULL) || (pPSL->pStatusDisplay == NULL) )
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearCDDAInterface() -- NULL pointer!\n"));
return (PSL_FAILURE);
}
if (PslScreenLayoutIsCDDAActive(pPSL) == TRUE)
{
/* hide the cdda gui surface */
DealCMHide(pPSL->pCddaGui->hDeal);
/* Stop timer */
if (OS_TimerStop(pPSL->pCddaGui->Timer) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearCDDAInterface -- Timer stop FAILED\n"));
return (PSL_FAILURE);
}
/* clear the icon */
if (PslScreenLayoutClearIcon(pPSL, pPSL->pIconData->pActiveIcon) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearCDDAInterface -- Failure clearing icon!\n"));
return (PSL_FAILURE);
}
/* clear the cdda gui surface */
if (DealCMBufferClean(pPSL->pCddaGui->hDeal, DEAL_BUFFER_BOTH) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutClearCDDAInterface -- Failure clearing buffer\n"));
return (PSL_FAILURE);
}
/* clear the cdda gui active bit */
pPSL->ulActiveInterface &= ~PSL_INTERFACE_CDDA;
}
return (PSL_SUCCESS);
}
/**
* PslScreenLayoutDrawGeneric -- Draw the generic osd graphics plane
*
* @param
* pPSL - handle to internal PSL data
* ulStatusEvent - status event to draw message for
* ulData - data associated with status event
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslScreenLayoutDrawGeneric(PSL_HANDLE *pPSL, ULONG ulStatusEvent, ULONG ulData)
{
DEAL_FDRAW_STRUCT text = {67, 133, 3, 15, DEAL_BUFFER_DRAW, (DEAL_FONT *)&tLARGEFONT};
DEAL_RDRAW_STRUCT rect = {65, 130, 0, 0, 15, DEAL_BUFFER_DRAW, 0};
ULONG ulWidth = 0;
BOOLEAN fDisplay = TRUE;
if (pPSL == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawGeneric: NULL psl handle!\n"));
return (PSL_NULL_POINTER);
}
/* If generic osd is active, clear it before drawing new message */
if (PslScreenLayoutIsGenericActive(pPSL) == TRUE)
{
if (DealCMBufferClean(pPSL->hDeal, DEAL_BUFFER_DRAW) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawGeneric: failed to clean draw buffer!\n"));
return (PSL_FAILURE);
}
}
switch (ulStatusEvent)
{
case PSL_STATUS_STOP:
/* Get string width to determine how wide to draw the background rectangle */
if (DealDMStringWidthGet(pPSL->hDeal, "To start from the beginning, press",
(DEAL_FONT *)&tLARGEFONT, &ulWidth) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutDrawGeneric: failed to get string width!\n"));
return (PSL_FAILURE);
}
/* Set background rectangle dimensions */
rect.usWidth = (USHORT)(ulWidth + 4);
rect.usHeight = 91;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -