alder_lake_bios/Insyde/InsydeSetupPkg/Drivers/H2ODisplayEngineLocalTextDxe/LTDEPanels/LTDETitlePanel.c

197 lines
6.1 KiB
C

/** @file
Initialization and display related functions for title panel.
;******************************************************************************
;* Copyright (c) 2015, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#include "LTDEPanels.h"
/**
Initialize control list in content item
@param[in] TitlePanel Pointer to title panel
@param[in, out] ContentItem Pointer to content item
@retval EFI_SUCCESS Initialize control list successful.
@retval EFI_INVALID_PARAMETER TitlePanel or ContentItem is NULL
@retval EFI_OUT_OF_RESOURCES Allocate pool fail
**/
STATIC
EFI_STATUS
InitTitlePanelContentItemControlList (
IN H2O_LTDE_PANEL *TitlePanel,
IN OUT H2O_LTDE_PANEL_ITEM *ContentItem
)
{
EFI_STATUS Status;
H2O_FORM_BROWSER_SM *SetupMenuData;
UINT32 ControlCount;
H2O_LTDE_CONTROL *ControlList;
H2O_LTDE_CONTROL *Control;
INT32 ItemFieldWidth;
INT32 DisplayWidth;
INT32 StartX;
if (TitlePanel == NULL || ContentItem == NULL) {
return EFI_INVALID_PARAMETER;
}
ContentItem->ControlCount = 0;
ContentItem->ControlList = NULL;
Status = mDEPrivate->FBProtocol->GetSMInfo (mDEPrivate->FBProtocol, &SetupMenuData);
if (EFI_ERROR (Status)) {
return EFI_SUCCESS;
}
ControlCount = 0;
ControlCount += (SetupMenuData->TitleString != NULL) ? 1 : 0;
ControlCount += (SetupMenuData->CoreVersionString != NULL) ? 1 : 0;
if (ControlCount == 0) {
FreeSetupMenuData (SetupMenuData);
return EFI_SUCCESS;
}
ControlList = AllocateZeroPool (ControlCount * sizeof (H2O_LTDE_CONTROL));
if (ControlList == NULL) {
FreeSetupMenuData (SetupMenuData);
return EFI_OUT_OF_RESOURCES;
}
ItemFieldWidth = H2O_LTDE_FIELD_WIDTH (&ContentItem->ItemField);
ControlCount = 0;
if (SetupMenuData->TitleString != NULL) {
Control = &ControlList[ControlCount];
Control->Sequence = (UINT8) ControlCount;
Control->Text.String = AllocateCopyPool (StrSize (SetupMenuData->TitleString), SetupMenuData->TitleString);
Control->ControlStyle.PseudoClass = H2O_STYLE_PSEUDO_CLASS_NORMAL;
DisplayWidth = (INT32) GetStringDisplayWidth (SetupMenuData->TitleString);
StartX = (ItemFieldWidth - DisplayWidth) / 2;
SetRect (&Control->ControlField, StartX, 0, StartX + DisplayWidth - 1, 0);
ControlCount++;
}
if (SetupMenuData->CoreVersionString != NULL) {
Control = &ControlList[ControlCount];
Control->Sequence = (UINT8) ControlCount;
Control->Text.String = AllocateCopyPool (StrSize (SetupMenuData->CoreVersionString), SetupMenuData->CoreVersionString);
Control->ControlStyle.PseudoClass = H2O_STYLE_PSEUDO_CLASS_NORMAL;
DisplayWidth = (INT32) GetStringDisplayWidth (SetupMenuData->CoreVersionString);
StartX = ItemFieldWidth - DisplayWidth;
SetRect (&Control->ControlField, StartX, 0, StartX + DisplayWidth - 1, 0);
ControlCount++;
}
ContentItem->Vertical = FALSE;
ContentItem->ControlCount = ControlCount;
ContentItem->ControlList = ControlList;
FreeSetupMenuData (SetupMenuData);
return EFI_SUCCESS;
}
/**
Initialize content item
@param[in] TitlePanel Pointer to title panel
@param[in, out] ContentItem Pointer to content item
@retval EFI_SUCCESS Initialize content item successful.
@retval EFI_INVALID_PARAMETER TitlePanel or ContentItem is NULL
**/
STATIC
EFI_STATUS
InitTitlePanelContentItem (
IN H2O_LTDE_PANEL *TitlePanel,
IN OUT H2O_LTDE_PANEL_ITEM *ContentItem
)
{
if (TitlePanel == NULL || ContentItem == NULL) {
return EFI_INVALID_PARAMETER;
}
ContentItem->ItemId = LTDE_PANEL_ITEM_ID_CONTENT;
ContentItem->Hidden = FALSE;
CopyRect (&ContentItem->ItemField, &TitlePanel->PanelField);
InflateRect (&ContentItem->ItemField, -TitlePanel->BorderLineWidth, -TitlePanel->BorderLineWidth);
InitTitlePanelContentItemControlList (TitlePanel, ContentItem);
return EFI_SUCCESS;
}
/**
Initialize title panel
@retval EFI_SUCCESS Initialize title panel successful.
@retval EFI_NOT_FOUND Title panel is not found
@retval EFI_OUT_OF_RESOURCES Allocate pool fail
**/
EFI_STATUS
InitTitlePanel (
VOID
)
{
H2O_LTDE_PANEL *TitlePanel;
H2O_LTDE_PANEL_ITEM *ContentItem;
TitlePanel = GetPanel (TITLE_PANEL_ID);
if (TitlePanel == NULL) {
return EFI_NOT_FOUND;
}
ContentItem = AllocateZeroPool (sizeof (H2O_LTDE_PANEL_ITEM));
if (ContentItem == NULL) {
return EFI_OUT_OF_RESOURCES;
}
InitTitlePanelContentItem (TitlePanel, ContentItem);
FreePanelItemList (TitlePanel->ItemList, TitlePanel->ItemCount);
TitlePanel->ItemCount = 1;
TitlePanel->ItemList = ContentItem;
return EFI_SUCCESS;
}
/**
Display title panel
@retval EFI_SUCCESS Display title panel successfully
**/
EFI_STATUS
DisplayTitlePanel (
VOID
)
{
H2O_LTDE_PANEL *TitlePanel;
H2O_LTDE_PANEL_ITEM *ContentItem;
TitlePanel = GetPanel (TITLE_PANEL_ID);
if (TitlePanel == NULL || !TitlePanel->Visible) {
return EFI_SUCCESS;
}
ContentItem = GetPanelItem (TitlePanel, LTDE_PANEL_ITEM_ID_CONTENT);
if (ContentItem != NULL) {
DisplayPanelItem (TitlePanel, ContentItem);
}
return EFI_SUCCESS;
}