⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 2 页
字号:
#define DIALOG_MAIN_FILE

#include "winav.h"
#ifdef SUPPORT_STB
#include "dvbcustm.h"
#endif
#include "utl.h"
#include "gdi.h"
#include "osd.h"
#include "osddsply.h"
#include "osdnd.h"
#include "input.h"
#ifdef SUPPORT_STB
#include "sysmenu.h"
#include "dvdsetup.h"
#endif //SUPPORT_STB
#include "mainmenu.h"
#include "dialog.h"

DIALOG *_pDIALOGCurrentDialog[MAX_SUPPORT_DIALOG_HANDLE_NUM] = {NULL, NULL, NULL, NULL, NULL};
HDIALOG _hDIALOGStack[MAX_SUPPORT_DIALOG_HANDLE_NUM] = {DIALOG_HANDLE_FREE, DIALOG_HANDLE_FREE, DIALOG_HANDLE_FREE, DIALOG_HANDLE_FREE, DIALOG_HANDLE_FREE};
BYTE _bDIALOGCursor[MAX_SUPPORT_DIALOG_HANDLE_NUM];
BYTE _bDIALOGBackgroundColor[MAX_SUPPORT_DIALOG_HANDLE_NUM];

extern BYTE _bOSDLang;
BYTE _bDIALOGUIStyle[MAX_SUPPORT_DIALOG_HANDLE_NUM];
//***************************************************************************
//  Function    :   DIALOG_InitializeGDI
//  Abstract    :   Initialize the palette, etc.
//  Arguments   :   none.
//  Return      :   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void DIALOG_InitializeGDI(BYTE bUIStyle)
{
	switch (bUIStyle)
	{
    case 1:
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_NORMAL_BUTTON_BEGIN, _dwDIALOGNormalButtonPalette2, FALSE);
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_HIGHLIGHT_BUTTON_BEGIN, _dwDIALOGHighlightButtonPalette2, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_BACKGROUND, DIALOG_PALETTE_COLOR_TITLE_BACKGROUND_2, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_BACKGROUND, DIALOG_PALETTE_COLOR_CONTENT_BACKGROUND_2, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_TEXT, DIALOG_PALETTE_COLOR_CONTENT_TEXT_2, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE0_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE0_2, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE1_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE1_2, FALSE);
        break;
    case 2:
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_NORMAL_BUTTON_BEGIN, _dwDIALOGNormalButtonPalette3, FALSE);
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_HIGHLIGHT_BUTTON_BEGIN, _dwDIALOGHighlightButtonPalette3, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_BACKGROUND, DIALOG_PALETTE_COLOR_TITLE_BACKGROUND_3, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_BACKGROUND, DIALOG_PALETTE_COLOR_CONTENT_BACKGROUND_3, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_TEXT, DIALOG_PALETTE_COLOR_CONTENT_TEXT_3, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE0_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE0_3, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE1_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE1_3, FALSE);
        break;
    case 3:
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_NORMAL_BUTTON_BEGIN, _dwDIALOGNormalButtonPalette4, FALSE);
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_HIGHLIGHT_BUTTON_BEGIN, _dwDIALOGHighlightButtonPalette4, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_BACKGROUND, DIALOG_PALETTE_COLOR_TITLE_BACKGROUND_4, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_BACKGROUND, DIALOG_PALETTE_COLOR_CONTENT_BACKGROUND_4, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_TEXT, DIALOG_PALETTE_COLOR_CONTENT_TEXT_4, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE0_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE0_4, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE1_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE1_4, FALSE);
        break;
	case 0:
	default:
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_NORMAL_BUTTON_BEGIN, _dwDIALOGNormalButtonPalette1, FALSE);
		MAINMENU_LoadGroupPalette(DIALOG_PALETTE_ENTRY_HIGHLIGHT_BUTTON_BEGIN, _dwDIALOGHighlightButtonPalette1, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_BACKGROUND, DIALOG_PALETTE_COLOR_TITLE_BACKGROUND_1, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_BACKGROUND, DIALOG_PALETTE_COLOR_CONTENT_BACKGROUND_1, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_CONTENT_TEXT, DIALOG_PALETTE_COLOR_CONTENT_TEXT_1, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE0_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE0_1, FALSE);
		GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_SEPARATOR_PALETTE1_1, DIALOG_PALETTE_COLOR_TITLE_SEPARATOR_PALETTE1_1, FALSE);
		break;
	}

    GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_TITLE_TEXT, DIALOG_PALETTE_COLOR_TITLE_TEXT, FALSE);
    GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_FRAME, DIALOG_PALETTE_COLOR_FRAME, FALSE);
    GDI_ChangePALEntry(DIALOG_PALETTE_ENTRY_BUTTON_STRING, DIALOG_PALETTE_COLOR_BUTTON_STRING, FALSE);

    GDI_WaitPaletteComplete();
}

HDIALOG DIALOG_CreateDialog(DIALOG *pDialog, BYTE bUIStyle)
{
    HDIALOG hDialog;

    hDialog = _DIALOG_GetDialogHandle();

    if (hDialog != DIALOG_HANDLE_INVALID)
    {
        _pDIALOGCurrentDialog[hDialog] = pDialog;
        
        if (pDialog->pButton != NULL)
        {
            _bDIALOGCursor[hDialog] = pDialog->bDefaultButtonID;
        }

        _bDIALOGUIStyle[hDialog] = bUIStyle;

        DIALOG_InitializeGDI(bUIStyle);
    }

    return hDialog;
}

void DIALOG_ShowDialog(HDIALOG hDialog, BYTE bBackgroundColor, BYTE bShowCursor)
{
    PARM_RECT Rect;
    PARM_FRAME Frame;
    PARM_DRAW_STRING TitleStringAttr;
    BYTE bButtonIndex;

    _bDIALOGBackgroundColor[hDialog] = bBackgroundColor;

    //Fill title rectangle
    Rect.bColor = DIALOG_PALETTE_ENTRY_TITLE_BACKGROUND;
    Rect.rect.wLeft = _pDIALOGCurrentDialog[hDialog]->wStartX;
    Rect.rect.wTop = _pDIALOGCurrentDialog[hDialog]->wStartY;
    Rect.rect.wRight = Rect.rect.wLeft+_pDIALOGCurrentDialog[hDialog]->wWidth-1;
    Rect.rect.wBottom = Rect.rect.wTop+DIALOG_TITLE_HEIGHT-1;

    switch (_bDIALOGUIStyle[hDialog])
    {
    case 1:
    case 2:
    case 3:
        GDI_FillRoundRectTop(0, DIALOG_TITLE_REGION_ARC, &Rect);
        break;
    case 0:
    default:
        GDI_FillRect(0, &Rect);
        break;
    }

    //Draw the separator
    Rect.bColor = DIALOG_SEPARATOR_HEIGHT;
    Rect.bShadePtr = _bDIALOGSeparatorPalette1;
    Rect.rect.wTop = Rect.rect.wBottom+1;
    Rect.rect.wBottom = Rect.rect.wTop+DIALOG_SEPARATOR_HEIGHT-1;
    GDI_FillRect(0|GDI_SHADING_OPERATION, &Rect);

    //Draw the background of the content
    Rect.bColor = DIALOG_PALETTE_ENTRY_CONTENT_BACKGROUND;
    Rect.rect.wTop = Rect.rect.wBottom+1;
    Rect.rect.wBottom = _pDIALOGCurrentDialog[hDialog]->wStartY+_pDIALOGCurrentDialog[hDialog]->wHeight-1;

    switch (_bDIALOGUIStyle[hDialog])
    {
    case 1:
    case 2:
    case 3:
        GDI_FillRoundRectBottom(0, DIALOG_CONTENT_REGION_ARC, &Rect);
        break;
    case 0:
    default:
        GDI_FillRect(0, &Rect);
        //Draw the frame
        Frame.bColorBright = DIALOG_PALETTE_ENTRY_FRAME;
        Frame.bColorDark = DIALOG_PALETTE_ENTRY_FRAME;
        Frame.bColorCenter = DIALOG_PALETTE_ENTRY_FRAME; //"FRAME_DOUBLE" doesn't need to assign the center color?
        Frame.bStyle = FRAME_DOUBLE;
        Frame.bThickness = DIALOG_FRAME_THICKNESS >> 1;
        Frame.rect.wLeft = _pDIALOGCurrentDialog[hDialog]->wStartX;
        Frame.rect.wTop = _pDIALOGCurrentDialog[hDialog]->wStartY;
        Frame.rect.wRight = _pDIALOGCurrentDialog[hDialog]->wStartX+_pDIALOGCurrentDialog[hDialog]->wWidth-1;
        Frame.rect.wBottom = _pDIALOGCurrentDialog[hDialog]->wStartY+_pDIALOGCurrentDialog[hDialog]->wHeight-1;
        GDI_DrawFrame_909(0, &Frame);
        break;
    }
    
    //Draw the title string
    TitleStringAttr.bBackground = DIALOG_PALETTE_ENTRY_TITLE_BACKGROUND;
    TitleStringAttr.bColorKey = 0;
    TitleStringAttr.bShadow1 = PAL_ENTRY_COLOR_TRANSPARENT;
    TitleStringAttr.bShadow2 = PAL_ENTRY_COLOR_TRANSPARENT;
    TitleStringAttr.bTextColor = DIALOG_PALETTE_ENTRY_TITLE_TEXT;
    TitleStringAttr.wY = _pDIALOGCurrentDialog[hDialog]->wStartY+((DIALOG_TITLE_HEIGHT-GDI_GetStringHeight(_pDIALOGCurrentDialog[hDialog]->pwTitleText)) >> 1);        
    
    switch (_pDIALOGCurrentDialog[hDialog]->bTitleAlignment)
    {
    case DIALOG_TITLE_STRING_ALIGNMENT_LEFT:
        if (_bDIALOGCursor[hDialog] == 0)
        {
            TitleStringAttr.wX = _pDIALOGCurrentDialog[hDialog]->wStartX+DIALOG_TITLE_BACKGROUND_STRING_DISTANCE_H+DIALOG_FRAME_THICKNESS;
        }
        else
        {
            TitleStringAttr.wX = _pDIALOGCurrentDialog[hDialog]->wStartX+DIALOG_TITLE_BACKGROUND_STRING_DISTANCE_H;
        }
        break;
    case DIALOG_TITLE_STRING_ALIGNMENT_CENTER:
        if (_bDIALOGCursor[hDialog] == 0)
        {
            TitleStringAttr.wX = _pDIALOGCurrentDialog[hDialog]->wStartX+((_pDIALOGCurrentDialog[hDialog]->wWidth-DIALOG_FRAME_THICKNESS*2-GDI_GetStringWidth(_pDIALOGCurrentDialog[hDialog]->pwTitleText))>>1);
        }
        else
        {
            TitleStringAttr.wX = _pDIALOGCurrentDialog[hDialog]->wStartX+((_pDIALOGCurrentDialog[hDialog]->wWidth-GDI_GetStringWidth(_pDIALOGCurrentDialog[hDialog]->pwTitleText))>>1);
        }
        break;
    case DIALOG_TITLE_STRING_ALIGNMENT_RIGHT:
        if (_bDIALOGCursor[hDialog] == 0)
        {
            TitleStringAttr.wX = _pDIALOGCurrentDialog[hDialog]->wStartX+_pDIALOGCurrentDialog[hDialog]->wWidth-DIALOG_FRAME_THICKNESS-DIALOG_TITLE_BACKGROUND_STRING_DISTANCE_H-GDI_GetStringWidth(_pDIALOGCurrentDialog[hDialog]->pwTitleText);
        }
        else
        {
            TitleStringAttr.wX = _pDIALOGCurrentDialog[hDialog]->wStartX+_pDIALOGCurrentDialog[hDialog]->wWidth-DIALOG_TITLE_BACKGROUND_STRING_DISTANCE_H-GDI_GetStringWidth(_pDIALOGCurrentDialog[hDialog]->pwTitleText);
        }
        break;
    default:
        return;
    }

    GDI_DrawString_909(0, &TitleStringAttr, _pDIALOGCurrentDialog[hDialog]->pwTitleText);
    
    //Draw the button
    for (bButtonIndex = 0; bButtonIndex <  _pDIALOGCurrentDialog[hDialog]->bButtonNum; bButtonIndex++)
    {
        if (bShowCursor && (_pDIALOGCurrentDialog[hDialog]->pButton[bButtonIndex].bID == _pDIALOGCurrentDialog[hDialog]->bDefaultButtonID))
        {
            _DIALOG_DrawButton(hDialog, bButtonIndex, DIALOG_BUTTON_TYPE_HIGHLIGHT);
        }
        else
        {
            _DIALOG_DrawButton(hDialog, bButtonIndex, DIALOG_BUTTON_TYPE_NORMAL);
        }
    }
}

void _DIALOG_DrawButton(HDIALOG hDialog, BYTE bButtonIndex, BYTE bType)
{
    PARM_RECT Rect;
    PARM_DRAW_STRING ButtonStringAttr;

    Rect.bColor = DIALOG_BUTTON_HEIGHT;
    Rect.rect.wLeft = _DIALOG_GetButtonStartX(hDialog, bButtonIndex);
    Rect.rect.wTop = _DIALOG_GetButtonStartY(hDialog);
    Rect.rect.wRight = Rect.rect.wLeft+_DIALOG_GetButtonWidth(hDialog)-1;
    Rect.rect.wBottom = Rect.rect.wTop+DIALOG_BUTTON_HEIGHT-1;
    
    if (bType == DIALOG_BUTTON_TYPE_NORMAL)
    {
        switch (_bDIALOGUIStyle[hDialog])
        {
        case 1:
            Rect.bShadePtr = _bDIALOGNormalButtonPalette2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -