📄 psl_screen_layout.cpp
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2002 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
******************************************************************************
*****************************************************************************/
/**
* @file psl_screen_layout.cpp
*
* $Revision: 1.14 $
*
* Screen Layout Module of the PSL.
*
*/
#include <string.h>
#include "vdvd_types.h"
#include "psl_screen_layout.h"
#include "psl_interface.h"
#include "psl_types.h"
#include "psl_data_bank.h"
#include "psl_external_interface.h"
#include "psl_bitmap_bank.h"
#include "psl_fonts.h"
#include "deal_general.h"
#include "deal_control.h"
#include "deal_draw.h"
#include "osapi.h"
#include "dbgprint.h"
#ifdef DMALLOC
#include "dmalloc.h"
#endif
/* Debug macros */
#define DBG_PSL_SCREEN DBG_ERROR
#define DBG_ON(x) (DBG_PSL_SCREEN >= x)
/* ARGB colors */
#define ARGB_COLOR_CLEAR 0x00000000
#define ARGB_COLOR_WHITE 0xFFFFFFFF
#define ARGB_COLOR_LT_GRAY 0xFFD0D0D0
#define ARGB_COLOR_GRAY 0xFFA0A0A0
#define ARGB_COLOR_GRAY_T 0x60A0A0A0
#define ARGB_COLOR_DK_GRAY 0xFF707070
#define ARGB_COLOR_BLACK 0xFF000000
#define ARGB_COLOR_BLACK_T 0x80000000
#define ARGB_COLOR_YELLOW 0xFFFFFF00
#define ARGB_COLOR_GOLD 0xFFFFCC33
#define ARGB_COLOR_BLUE 0xFFA0D0FF
#define ARGB_COLOR_DK_BLUE 0xFF000080
#define ARGB_COLOR_CYAN 0xFF00FFFF
#define ARGB_COLOR_BROWN 0xFF800000
#define ARGB_COLOR_RED 0xFFFF0000
#define ARGB_COLOR_MAGENTA 0xFFFF00FF
#define ARGB_COLOR_GREEN 0xFF00FF00
/* Button drawing information */
typedef struct tagPSL_BUTTON_DRAW_INFO
{
ULONG ulWidth;
ULONG ulHeight;
ULONG ulColorU;
ULONG ulColorS;
ULONG ulTextColorU;
ULONG ulTextColorS;
ULONG ulBorderWidth;
ULONG ulBorderColor;
char cText[50];
DEAL_HANDLE *pDeal;
} PSL_BUTTON_DRAW_INFO;
/**
* Local functions.
*/
static PSL_STATUS InitializeSetupMenu(PSL_SETUP_MENU *pSetupMenu);
static void UninitializeSetupMenu(PSL_SETUP_MENU *pSetupMenu);
static PSL_STATUS InitializeStatusDisplay(PSL_STATUS_DISPLAY *pDisplay);
static void UninitializeStatusDisplay(PSL_STATUS_DISPLAY *pDisplay);
static PSL_STATUS InitializeIconData(PSL_ICON_DATA *pIconData);
static void UninitializeIconData(PSL_ICON_DATA *pIconData);
static PSL_STATUS InitializeStatusMenu(PSL_STATUS_MENU *pStatusMenu);
static void UninitializeStatusMenu(PSL_STATUS_MENU *pStatusMenu);
static PSL_STATUS InitializeParentalControl(PSL_HANDLE *pPSL);
static void UninitializeParentalControl(PSL_HANDLE *pPSL);
static PSL_STATUS InitializeCDDAGui(PSL_STATUS_DISPLAY *pCddaGui);
static void UninitializeCDDAGui(PSL_STATUS_DISPLAY *pCddaGui);
static void StatusDisplayTimerCallback(PVOID pvParam);
static void IconTimerCallback(PVOID pvParam);
static void StatusMenuTimerCallback(PVOID pvParam);
static void GenericTimerCallback(PVOID pvParam);
/**
* PslScreenLayoutInitialize -- Create all menus and define the layout of each menu.
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslScreenLayoutInitialize(PSL_HANDLE *pPSL)
{
/* Check for a valid psl handle */
if (pPSL == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: NULL handle!\n"));
return (PSL_FAILURE);
}
/* Create DEAL for generic osd */
pPSL->hDeal = DealCMCreate();
if (pPSL->hDeal == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: failed to create deal!\n"));
goto errout;
}
else
{
DEAL_SURFACE_SETTINGS surface_settings;
/* Set the surface settings */
surface_settings.usPlaneOrder = 1;
surface_settings.ulX = 0;
surface_settings.ulY = 0;
surface_settings.ulWidth = 720;
surface_settings.ulHeight = 576;
surface_settings.ulColorKey = 12;
/* Initialize DEAL */
if (DealCMInitialize(pPSL->hDeal, surface_settings, DEAL_PIXEL_FORMAT_PALETTE4) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: failed to initialize deal!\n"));
goto errout;
}
else
{
DEAL_PALETTE palette;
palette.aPalette = NULL;
/* Set the color palette */
palette.ulLength = 16;
palette.aPalette = (ULONG *)OS_MemAlloc(sizeof(ULONG) * palette.ulLength);
if (palette.aPalette == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s: %u -- OS_MemAlloc Failed!\n", __FILE__, __LINE__));
goto errout;
}
palette.aPalette[0] = ARGB_COLOR_BLACK_T;
palette.aPalette[1] = ARGB_COLOR_GOLD;
palette.aPalette[2] = ARGB_COLOR_BLUE;
palette.aPalette[3] = ARGB_COLOR_BLACK;
palette.aPalette[4] = ARGB_COLOR_CYAN;
palette.aPalette[5] = ARGB_COLOR_WHITE;
palette.aPalette[6] = ARGB_COLOR_BLACK;
palette.aPalette[7] = ARGB_COLOR_YELLOW;
palette.aPalette[8] = ARGB_COLOR_YELLOW;
palette.aPalette[9] = ARGB_COLOR_BROWN;
palette.aPalette[10] = ARGB_COLOR_RED;
palette.aPalette[11] = ARGB_COLOR_MAGENTA;
palette.aPalette[12] = ARGB_COLOR_CLEAR;
palette.aPalette[13] = ARGB_COLOR_GREEN;
palette.aPalette[14] = ARGB_COLOR_DK_GRAY;
palette.aPalette[15] = ARGB_COLOR_GRAY;
/* Load the color palette */
if (DealCMSetPalette(pPSL->hDeal, palette) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: failed to load color palette!\n"));
OS_MemFree(palette.aPalette);
goto errout;
}
else
{
/* Clean the buffer */
if (DealCMBufferClean(pPSL->hDeal, DEAL_BUFFER_BOTH) != DEAL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: failed to clean buffer!\n"));
OS_MemFree(palette.aPalette);
goto errout;
}
}
OS_MemFree(palette.aPalette);
}
}
/* create timer for generic osd */
if (OS_TimerCreateParam(&pPSL->Timer, (OS_FUNCPTR_PARAM)GenericTimerCallback, NULL) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure creating timer!\n"));
goto errout;
}
/* Allocate the setup menu */
pPSL->pSetupMenu = (PSL_SETUP_MENU *)OS_MemAlloc(sizeof(PSL_SETUP_MENU) );
if (pPSL->pSetupMenu == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure allocating setup menu!\n"));
goto errout;
}
/* Initialize the setup menu */
if (InitializeSetupMenu(pPSL->pSetupMenu) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure initializing setup menu!\n"));
goto errout;
}
/* Allocate the status display */
pPSL->pStatusDisplay = (PSL_STATUS_DISPLAY *)OS_MemAlloc(sizeof(PSL_STATUS_DISPLAY) );
if (pPSL->pStatusDisplay == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure allocating status display!\n"));
goto errout;
}
/* Initialize the status display */
if (InitializeStatusDisplay(pPSL->pStatusDisplay) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure initializing status display!\n"));
goto errout;
}
/* Allocate the icon data */
pPSL->pIconData = (PSL_ICON_DATA *)OS_MemAlloc(sizeof(PSL_ICON_DATA) );
if (pPSL->pIconData == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure allocating icon data!\n"));
goto errout;
}
/* Initialize the icon data */
if (InitializeIconData(pPSL->pIconData) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure initializing icon data!\n"));
goto errout;
}
/* Allocate the status menu */
pPSL->pStatusMenu = (PSL_STATUS_MENU *)OS_MemAlloc(sizeof(PSL_STATUS_MENU) );
if (pPSL->pStatusMenu == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure allocating status menu!\n"));
goto errout;
}
/* Initialize the status menu data */
if (InitializeStatusMenu(pPSL->pStatusMenu) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure initializing status menu data!\n"));
goto errout;
}
/* Allocate the parental control */
pPSL->pParentalControl = (PSL_PARENTAL_CONTROL *)OS_MemAlloc(sizeof(PSL_PARENTAL_CONTROL) );
if (pPSL->pParentalControl == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure allocating parental control!\n"));
goto errout;
}
/* Initialize the parental control data */
if (InitializeParentalControl(pPSL) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure initializing parental control data!\n"));
goto errout;
}
/* Allocate the cdda gui */
pPSL->pCddaGui = (PSL_STATUS_DISPLAY *)OS_MemAlloc(sizeof(PSL_STATUS_DISPLAY) );
if (pPSL->pCddaGui == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure allocating cdda gui!\n"));
goto errout;
}
/* Initialize the cdd gui */
if (InitializeCDDAGui(pPSL->pCddaGui) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslScreenLayoutInitialize: Failure initializing cdda gui!\n"));
goto errout;
}
return (PSL_SUCCESS);
errout:
/* delete cdda gui */
if (pPSL->pCddaGui != NULL)
{
/* uninitialize the cdda gui */
UninitializeCDDAGui(pPSL->pCddaGui);
/* de-allocate cdda gui */
OS_MemFree(pPSL->pCddaGui);
pPSL->pCddaGui = NULL;
}
/* delete parental control */
if (pPSL->pParentalControl != NULL)
{
/* uninitialize the parental control */
UninitializeParentalControl(pPSL);
/* de-allocate parental control */
OS_MemFree(pPSL->pParentalControl);
pPSL->pParentalControl = NULL;
}
/* delete status menu */
if (pPSL->pStatusMenu != NULL)
{
/* uninitialize the status menu */
UninitializeStatusMenu(pPSL->pStatusMenu);
/* de-allocate status menu */
OS_MemFree(pPSL->pStatusMenu);
pPSL->pStatusMenu = NULL;
}
/* delete icon data */
if (pPSL->pIconData != NULL)
{
/* uninitialize the icon data */
UninitializeIconData(pPSL->pIconData);
/* de-allocate icon data */
OS_MemFree(pPSL->pIconData);
pPSL->pIconData = NULL;
}
/* delete status display */
if (pPSL->pSetupMenu != NULL)
{
/* uninitialize the status display */
UninitializeStatusDisplay(pPSL->pStatusDisplay);
/* de-allocate status display */
OS_MemFree(pPSL->pStatusDisplay);
pPSL->pStatusDisplay = NULL;
}
/* delete setup menu */
if (pPSL->pSetupMenu != NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -