alder_lake_bios/Insyde/InsydeSetupPkg/Drivers/H2ODisplayEngineLocalMetroDxe/Resource.c

201 lines
7.7 KiB
C

/** @file
;******************************************************************************
;* Copyright (c) 2012 - 2020, Insyde Software Corporation. 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 "UiRender.h"
#include "UiControls.h"
#include "UiManager.h"
#include <InternalFormRepresentation.h>
#include <Library/HiiDbLib.h>
#include <Library/HiiStringLib.h>
#include <Library/HiiConfigAccessLib.h>
#include <Library/UefiHiiServicesLib.h>
#include <Library/BitBltLib.h>
#include <Library/LayoutLib.h>
EFI_HII_HANDLE mImageHiiHandle = NULL;
typedef struct {
CHAR16 *Name;
EFI_IMAGE_ID ImageId;
EFI_IMAGE_INPUT *ImageIn; ///< Cache Image Input data
} IMAGE_RESOURCE;
IMAGE_RESOURCE mImageResource[] = {
{L"FormHalo", IMAGE_TOKEN (IMAGE_FORM_HALO ), NULL},
{L"MenuBackgroundNormal", IMAGE_TOKEN (IMAGE_MENU_BACKGROUND_NORMAL ), NULL},
{L"MenuBackgroundHot", IMAGE_TOKEN (IMAGE_MENU_BACKGROUND_HOT ), NULL},
{L"HotkeyShowHelp", IMAGE_TOKEN (IMAGE_HOTKEY_SHOW_HELP ), NULL},
{L"HotkeySelectItemUp", IMAGE_TOKEN (IMAGE_HOTKEY_SELECT_ITEM_UP ), NULL},
{L"HotkeySelectItemDown", IMAGE_TOKEN (IMAGE_HOTKEY_SELECT_ITEM_DOWN ), NULL},
{L"HotkeySelectMenuUp", IMAGE_TOKEN (IMAGE_HOTKEY_SELECT_MENU_UP ), NULL},
{L"HotkeySelectMenuDown", IMAGE_TOKEN (IMAGE_HOTKEY_SELECT_MENU_DOWN ), NULL},
{L"HotKeyModifyValueUp", IMAGE_TOKEN (IMAGE_HOTKEY_MODIFY_VALUE_UP ), NULL},
{L"HotKeyModifyValueDown", IMAGE_TOKEN (IMAGE_HOTKEY_MODIFY_VALUE_DOWN), NULL},
{L"HotKeyLoadDefault", IMAGE_TOKEN (IMAGE_HOTKEY_LOAD_DEFAULT ), NULL},
{L"HotKeySaveAndExit", IMAGE_TOKEN (IMAGE_HOTKEY_SAVE_AND_EXIT ), NULL},
{L"HotkeyEnter", IMAGE_TOKEN (IMAGE_HOTKEY_ENTER ), NULL},
{L"HotKeyDiscardExit", IMAGE_TOKEN (IMAGE_HOTKEY_DISCARD_EXIT ), NULL},
{L"OwnerDrawInsyde", IMAGE_TOKEN (IMAGE_OWNER_DRAW_INSYDE ), NULL},
{L"OwnerDrawInsydeH2O", IMAGE_TOKEN (IMAGE_OWNER_DRAW_INSYDE_H2O ), NULL},
{L"OwnerDrawSeparator", IMAGE_TOKEN (IMAGE_OWNER_DRAW_SEPARATOR ), NULL},
{L"OwnerDrawTemperature", IMAGE_TOKEN (IMAGE_OWNER_DRAW_TEMPERATURE ), NULL},
{L"OwnerDrawTime", IMAGE_TOKEN (IMAGE_OWNER_DRAW_TIME ), NULL},
{L"DialogSeparator", IMAGE_TOKEN (IMAGE_DIALOG_SEPARATOR ), NULL},
{L"DialogButtonDown", IMAGE_TOKEN (IMAGE_DIALOG_BUTTON_DOWN ), NULL},
{L"DialogButtonUp", IMAGE_TOKEN (IMAGE_DIALOG_BUTTON_UP ), NULL},
{L"DialogSelectedIcon", IMAGE_TOKEN (IMAGE_DIALOG_SELECTED_ICON ), NULL},
{L"DialogSortIcon", IMAGE_TOKEN (IMAGE_DIALOG_SORT_ICON ), NULL},
{L"ScrollbarThumb", IMAGE_TOKEN (IMAGE_SCROLLBAR_THUMB ), NULL},
{L"ScrollbarBackground", IMAGE_TOKEN (IMAGE_SCROLLBAR_BACKGROUND ), NULL},
{L"SetupMenuTextOpBkg", IMAGE_TOKEN (IMAGE_SETUP_MENU_TEXT_OP_BKG ), NULL},
{L"FormTitleBkg", IMAGE_TOKEN (IMAGE_FORM_TITLE_BKG ), NULL},
{L"OptionBkg", IMAGE_TOKEN (IMAGE_OPTION_BKG ), NULL},
{L"OwnerDrawBkg", IMAGE_TOKEN (IMAGE_OWNER_DRAW_BKG ), NULL},
{L"CheckBoxBkg", IMAGE_TOKEN (IMAGE_CHECK_BOX_BKG ), NULL},
{L"CheckBoxBorder", IMAGE_TOKEN (IMAGE_CHECK_BOX_BORDER ), NULL},
{L"CheckBoxButton", IMAGE_TOKEN (IMAGE_CHECK_BOX_BUTTON ), NULL},
#if FixedPcdGet32(PcdH2OLmdeMultiLayout) == 1
{L"SpTriangle", IMAGE_TOKEN (IMAGE_SP_TRIANGLE ), NULL},
{L"Bkg", IMAGE_TOKEN (IMAGE_BKG ), NULL},
{L"DialogBkg", IMAGE_TOKEN (IMAGE_DIALOG_BKG ), NULL},
{L"FtBorder", IMAGE_TOKEN (IMAGE_FT_BORDER ), NULL},
{L"HtBorder", IMAGE_TOKEN (IMAGE_HT_BORDER ), NULL},
{L"HtSepartor", IMAGE_TOKEN (IMAGE_HT_SEPARATOR ), NULL},
{L"SmBorder", IMAGE_TOKEN (IMAGE_SM_BORDER ), NULL},
{L"SpSelectedBkg", IMAGE_TOKEN (IMAGE_SP_SELECTED_BKG ), NULL},
{L"SpTriangle", IMAGE_TOKEN (IMAGE_SP_TRIANGLE ), NULL},
#endif
{NULL, 0, NULL}
};
EFI_IMAGE_INPUT *
GetImageByString (
CHAR16 *Name
)
{
UINTN Index;
EFI_STATUS Status;
EFI_IMAGE_INPUT *ImagePtr;
ImagePtr = NULL;
if (Name[0] == '@') {
Name++;
for (Index = 0; mImageResource[Index].Name != NULL; Index++) {
if (StrCmp (mImageResource[Index].Name, Name) == 0) {
break;
}
}
ASSERT (mImageResource[Index].Name != NULL);
if (mImageResource[Index].Name == NULL) {
return NULL;
}
if (mImageResource[Index].ImageIn != NULL) {
ImagePtr = mImageResource[Index].ImageIn;
} else {
ImagePtr = AllocateZeroPool (sizeof (EFI_IMAGE_INPUT));
Status = gHiiImage->GetImage (
gHiiImage,
mImageHiiHandle,
mImageResource[Index].ImageId,
ImagePtr
);
ASSERT_EFI_ERROR (Status);
if (EFI_ERROR (Status)){
FreePool (ImagePtr);
return NULL;
}
mImageResource[Index].ImageIn = ImagePtr;
}
} else {
ImagePtr = (EFI_IMAGE_INPUT *)(UINTN) StrToUInt (Name, 16, &Status);
ASSERT_EFI_ERROR (Status);
ASSERT (ImagePtr != NULL);
}
if (ImagePtr != NULL) {
//
// We only convert transparent image once.
//
if ((ImagePtr->Flags & EFI_IMAGE_TRANSPARENT) == EFI_IMAGE_TRANSPARENT) {
ConvertToAlphaChannelImage (ImagePtr);
ImagePtr->Flags &= ~EFI_IMAGE_TRANSPARENT;
}
}
return ImagePtr;
}
typedef struct {
EFI_IMAGE_ID ImageId;
EFI_IMAGE_INPUT *Image; ///< Cache Image Input data
} H2O_VFCF_IMAGE_INFO;
H2O_VFCF_IMAGE_INFO *mH2OVfcfImageList;
UINTN mH2OVfcfImageCount;
EFI_IMAGE_INPUT *
GetVfcfImage (
IN EFI_IMAGE_ID ImageId
)
{
UINTN Index;
EFI_IMAGE_INPUT *Image;
VOID *Buffer;
EFI_STATUS Status;
for (Index = 0; Index < mH2OVfcfImageCount; Index++) {
if (mH2OVfcfImageList[Index].ImageId == ImageId) {
return mH2OVfcfImageList[Index].Image;
}
}
Image = AllocateZeroPool (sizeof(EFI_IMAGE_INPUT));
if (Image == NULL) {
return NULL;
}
Status = GetImageById (ImageId, Image);
if (EFI_ERROR (Status)) {
FreePool (Image);
return NULL;
}
Buffer = ReallocatePool (
sizeof(H2O_VFCF_IMAGE_INFO) * (mH2OVfcfImageCount),
sizeof(H2O_VFCF_IMAGE_INFO) * (mH2OVfcfImageCount + 1),
mH2OVfcfImageList
);
if (Buffer == NULL) {
FreePool (Image->Bitmap);
FreePool (Image);
return NULL;
}
mH2OVfcfImageList = Buffer;
mH2OVfcfImageList[mH2OVfcfImageCount].Image = Image;
mH2OVfcfImageList[mH2OVfcfImageCount].ImageId = ImageId;
mH2OVfcfImageCount++;
return Image;
}
VOID
AddHiiImagePackage (
VOID
)
{
if (mImageHiiHandle == NULL) {
mImageHiiHandle = HiiAddPackages (&gEfiCallerIdGuid, NULL, IMAGE_ARRAY_NAME, NULL);
ASSERT (mImageHiiHandle != NULL);
}
}