alder_lake_bios/Insyde/InsydeSetupPkg/Drivers/H2ODisplayEngineLocalMetroDxe/H2OControls/H2OSetupPageItem.c

698 lines
23 KiB
C

/** @file
UI Common Controls
;******************************************************************************
;* Copyright (c) 2014 - 2020, 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 "H2OControls.h"
#include "H2ODisplayEngineLocalMetro.h"
#include "MetroUi.h"
STATIC H2O_SETUP_PAGE_ITEM_CLASS *mSetupPageItemClass = NULL;
#define CURRENT_CLASS mSetupPageItemClass
#if FixedPcdGet32(PcdH2OLmdeMultiLayout) == 0
//CHAR16 *mSubtitleChilds = L""
// L"<VerticalLayout height='35' width='match_parent'>"
// L"<Label name='OptionPrompt' text-align='singleline' padding='0,0,0,20' font-size='20' textcolor='0xFF4D4D4D' text-overflow='ellipsis'/>"
// L"<Control height='1' width='match_parent' background-image='@OptionBkg' background-image-style='stretch'/>"
// L"</VerticalLayout>";
//
//CHAR16 *mH2OCheckBoxOpChilds = L""
// L"<Texture float='true' background-image='@OptionBkg' name='OptionBkg' background-image-style='stretch'/>"
// L"<HorizontalLayout>"
// L"<Control width='25' padding='0,17,0,18' name='OptionImagePadding'>"
// L"<Texture name='OptionImage' background-image-style='stretch'/>"
// L"</Control>"
// L"<Label text-align='singleline' textcolor='0xFF666666' font-size='21' name='OptionPrompt' text-overflow='ellipsis'/>"
// L"<HorizontalLayout padding='17,0,17,0' width='120' height='36'>"
// L"<Switch switchcolor='@menucolor' name='CheckBox'/>"
// L"</HorizontalLayout>"
// L"<Label width='30' />"
// L"</HorizontalLayout>";
//
//CHAR16 *mStatementChilds = L""
// L"<Texture float='true' background-image='@OptionBkg' name='OptionBkg' background-image-style='stretch'/>"
// L"<HorizontalLayout>"
// L"<Control width='25' padding='0,17,0,18' name='OptionImagePadding'>"
// L"<Texture name='OptionImage' background-image-style='stretch'/>"
// L"</Control>"
// L"<HorizontalLayout name='OptionLayout'>"
// L"<Label text-align='singleline|left' textcolor='0xFF666666' font-size='21' name='OptionPrompt' text-overflow='ellipsis'/>"
// L"<Label text-align='singleline' name='OptionSparator' width='10'/>"
// L"<Label text-align='singleline|right' width='160' textcolor='0xFF666666' font-size='21' name='OptionValue' text-overflow='ellipsis'/>"
// L"<Label name='OptionEnd' text='>' text-align='singleline|right' text-align='center' width='20' font-size='21' textcolor='0xFF666666'/>"
// L"<Label text-align='singleline' name='EndSparator' width='20'/>"
// L"</HorizontalLayout>"
// L"</HorizontalLayout>";
//
//CHAR16 *mH2OTextOpChilds = L""
// L"<HorizontalLayout child-padding='2' width='match_parent' min-height='35' height='wrap_content'>"
// L"<HorizontalLayout child-padding='2' float='true' width='match_parent' height='match_parent'>"
// L"<Texture scale9grid='1,1,1,1' background-image='@SetupMenuTextOpBkg' name='OptionPromptBackground' width='258' height='match_parent'/>"
// L"<Texture scale9grid='1,1,1,1' background-image='@SetupMenuTextOpBkg' name='OptionValueBackground' height='match_parent'/>"
// L"</HorizontalLayout>"
// L"<Label name='OptionPrompt' min-height='35' height='wrap_content' padding='7,0,7,60' width='198' font-size='20' textcolor='0xFF4D4D4D'/>"
// L"<Label name='OptionValue' text-align='center' min-height='35' height='wrap_content' padding='7,0,7,0' width='258' font-size='20' textcolor='@menucolor'/>"
// L"<Texture float='true' background-color='@menucolor' left='30' top='11' width='8' height='8' position='absolute'/>"
// L"</HorizontalLayout>";
CHAR16 *mSubtitleChilds = NULL;
CHAR16 *mH2OCheckBoxOpChilds = NULL;
CHAR16 *mStatementChilds = NULL;
CHAR16 *mH2OTextOpChilds = NULL;
INT32
GetStatementHeight (
IN VOID *Statement
)
{
H2O_FORM_BROWSER_S *St;
if (Statement == NULL) {
return 35;
}
St = (H2O_FORM_BROWSER_S *)Statement;
if (St->Operand == EFI_IFR_SUBTITLE_OP ||
St->Operand == EFI_IFR_TEXT_OP) {
return 35;
}
return 70;
}
#endif
#define OPTION_FONT_SIZE 21
#define OPTION_IMAGE_SIZE 25
#define OPTION_LEFT_PADDING 60
#define OPTION_MIN_PROMPT_WIDTH 200
#define OPTION_VALUE_WIDTH 105
#define OPTION_RIGHT_PADDING 30
EFI_STATUS
MarqueeByName (
IN UI_CONTROL *Control,
IN CHAR16 *ChildName,
IN CHAR16 *Value
)
{
UI_CONTROL *Child;
Child = UiFindChildByName (Control, ChildName);
if (Child == NULL) {
return EFI_NOT_FOUND;
}
UiSetAttribute (Child, L"marquee", Value);
return EFI_SUCCESS;
}
STATIC
VOID
UpdateCheckboxSwitch (
IN UI_CONTROL *CheckBox,
IN H2O_FORM_BROWSER_S *Statement
)
{
SetWindowLongPtr (CheckBox->Wnd, GWLP_USERDATA, Statement->StatementId);
if (Statement->HiiValue.Value.b) {
UiSetAttribute (CheckBox, L"checkboxvalue", L"true");
} else {
UiSetAttribute (CheckBox, L"checkboxvalue", L"false");
}
if (Statement->Selectable) {
UiSetAttribute (CheckBox, L"disabled", L"false");
if (Statement->HiiValue.Value.b) {
UiSetAttribute (CheckBox, L"switchcolor", L"@menucolor");
UiSetAttribute (CheckBox, L"switch-textcolor", L"0xFFFFFFFF");
} else {
UiSetAttribute (CheckBox, L"switchcolor", L"gray");
UiSetAttribute (CheckBox, L"switch-textcolor", L"@menucolor");
if (PcdGet32(PcdH2OLmdeMultiLayout) == 1) {
UiSetAttribute (CheckBox, L"switch-textcolor", L"0xFF008000");
}
}
} else {
UiSetAttribute (CheckBox, L"switchcolor", L"gray");
UiSetAttribute (CheckBox, L"switch-textcolor", L"0xFF666666");
if (PcdGet32(PcdH2OLmdeMultiLayout) == 1) {
UiSetAttribute (CheckBox, L"switch-textcolor", L"0xFF333333");
}
UiSetAttribute (CheckBox, L"disabled", L"true");
}
}
VOID
UpdateSetupPageItem (
UI_CONTROL *Control
)
{
H2O_SETUP_PAGE_ITEM *This;
H2O_FORM_BROWSER_S *Statement;
CHAR16 Str[20];
UI_CONTROL *Child;
UINT32 Index;
INTN Result;
EFI_STATUS Status;
INT32 Height;
UI_CONTROL *CheckBox;
CHAR16 ValueTextColor[20];
CHAR16 *String;
This = (H2O_SETUP_PAGE_ITEM *) Control;
if (This->Statement == NULL) {
return ;
}
Statement = This->Statement;
ASSERT (Statement != NULL);
if (Statement == NULL) {
return;
}
//
// Get Value Text color
//
Child = UiFindChildByName (This, L"ValueText");
UnicodeSPrint (ValueTextColor, sizeof (ValueTextColor), L"%s", L"@menucolor");
if (Child != NULL) {
if (Child->TextColor == 0) {
UnicodeSPrint (ValueTextColor, sizeof (ValueTextColor), L"%s", L"@menulightcolor");
} else {
UnicodeSPrint (ValueTextColor, sizeof (ValueTextColor), L"0x%08x", Child->TextColor);
}
}
//
// Add Statement image if need
//
Child = UiFindChildByName (This, L"OptionImage");
if (Child != NULL && Statement->Image != NULL) {
Height = GetStatementHeight (Statement);
UnicodeSPrint (Str, sizeof (Str), L"0x%p", Statement->Image);
UiSetAttribute (Child, L"background-image", Str);
UnicodeSPrint (
Str,
sizeof (Str),
L"%d,%d,%d,%d",
(Height - OPTION_IMAGE_SIZE) / 2 + (Height - OPTION_IMAGE_SIZE) % 2,
17,
(Height - OPTION_IMAGE_SIZE) / 2,
18
);
Child = UiFindChildByName (This, L"OptionImagePadding");
if (Child != NULL) {
UiSetAttribute (Child, L"padding", Str);
}
}
Child = UiFindChildByName (This, L"RefImage");
if (Child != NULL && Statement->Operand == EFI_IFR_REF_OP) {
UiSetAttribute (Child, L"visibility", L"true");
}
//
// Adjust text and text color
//
if (Statement->Prompt != NULL) {
Child = UiFindChildByName (This, L"OptionPrompt");
if (Child != NULL) {
UiSetAttribute (Child, L"text", Statement->Prompt);
}
}
if (Statement->Operand == EFI_IFR_CHECKBOX_OP) {
CheckBox = UiFindChildByName (This, L"CheckBox");
if (CheckBox != NULL) {
UpdateCheckboxSwitch (CheckBox, Statement);
}
} else if (Statement->Operand == EFI_IFR_TEXT_OP) {
if (Statement->TextTwo != NULL && Statement->TextTwo[0] != '\0') {
Child = UiFindChildByName (This, L"OptionValue");
if (Child != NULL) {
UiSetAttribute (Child, L"text", Statement->TextTwo);
}
} else {
Child = UiFindChildByName (This, L"OptionPrompt");
if (Child != NULL) {
UiSetAttribute (Child, L"width", L"0");
UiSetAttribute (Child, L"height", L"0");
UiSetAttribute (Child, L"text-align", L"singleline|left");
UiSetAttribute (Child, L"text-overflow", L"ellipsis");
}
Child = UiFindChildByName (This, L"OptionValue");
if (Child != NULL) {
UiSetAttribute (Child, L"visibility", L"false");
}
Child = UiFindChildByName (This, L"OptionPromptBackground");
if (Child != NULL) {
UiSetAttribute (Child, L"width", L"0");
}
Child = UiFindChildByName (This, L"OptionValueBackground");
if (Child != NULL) {
UiSetAttribute (Child, L"visibility", L"false");
}
}
} else if (Statement->NumberOfOptions != 0) {
for (Index = 0; Index < Statement->NumberOfOptions; Index++) {
Status = CompareHiiValue (&Statement->Options[Index].HiiValue, &Statement->HiiValue, &Result);
if (!EFI_ERROR (Status) && Result == 0) {
Child = UiFindChildByName (This, L"OptionValue");
UiSetAttribute (Child, L"text", Statement->Options[Index].Text);
if (Statement->Selectable) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
Child = UiFindChildByName (This, L"OptionEnd");
if (Child != NULL) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
}
}
break;
}
}
} else if (Statement->Operand == EFI_IFR_NUMERIC_OP) {
Child = UiFindChildByName (This, L"OptionValue");
String = IfrNumericPrintFormattedNumber (Statement);
if (String != NULL) {
UiSetAttribute (Child, L"text", String);
FreePool (String);
}
if (Statement->Selectable) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
Child = UiFindChildByName (This, L"OptionEnd");
if (Child != NULL) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
}
}
} else if (Statement->Operand == EFI_IFR_ACTION_OP) {
Child = UiFindChildByName (This, L"OptionValue");
if (Child != NULL) {
if (Statement->TextTwo != NULL && Statement->TextTwo[0] != '\0') {
UiSetAttribute (Child, L"text", Statement->TextTwo);
if (Statement->Selectable) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
} else {
UiSetAttribute (Child, L"textcolor", L"0xFF666666");
}
} else {
UiSetAttribute (Child, L"visibility", L"false");
}
Child = UiFindChildByName (This, L"OptionEnd");
if (Child != NULL) {
UiSetAttribute (Child, L"visibility", L"false");
}
}
} else if (Statement->Operand == EFI_IFR_STRING_OP) {
Child = UiFindChildByName (This, L"OptionValue");
if (Child != NULL && Statement->HiiValue.Buffer != NULL) {
UiSetAttribute (Child, L"text", (CHAR16 *)Statement->HiiValue.Buffer);
}
if (Statement->Selectable) {
if (Child != NULL) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
}
Child = UiFindChildByName (This, L"OptionEnd");
if (Child != NULL) {
UiSetAttribute (Child, L"textcolor", ValueTextColor);
}
}
} else {
Child = UiFindChildByName (This, L"OptionValue");
if (Child != NULL) {
UiSetAttribute (Child, L"visibility", L"false");
Child = UiFindChildByName (This, L"OptionEnd");
UiSetAttribute (Child, L"visibility", L"false");
}
}
}
CHAR16 *
H2OSetupPageItemGetXmlBuffer (
IN UINT8 IfrOpcode
)
{
switch (IfrOpcode) {
case EFI_IFR_SUBTITLE_OP:
return mSubtitleChilds;
case EFI_IFR_CHECKBOX_OP:
return mH2OCheckBoxOpChilds;
case EFI_IFR_TEXT_OP:
return mH2OTextOpChilds;
case EFI_IFR_REF_OP:
case EFI_IFR_ACTION_OP:
case EFI_IFR_PASSWORD_OP:
case EFI_IFR_NUMERIC_OP:
case EFI_IFR_ONE_OF_OP:
case EFI_IFR_TIME_OP:
case EFI_IFR_DATE_OP:
case EFI_IFR_ORDERED_LIST_OP:
case EFI_IFR_RESET_BUTTON_OP:
case EFI_IFR_STRING_OP:
return mStatementChilds;
default:
DEBUG ((EFI_D_ERROR, "Unsupported opcode : %d\n", IfrOpcode));
ASSERT (FALSE);
return NULL;
}
}
VOID
H2OSetupPageItemUpdateVfcfOrder (
IN UI_CONTROL *Order,
IN H2O_FORM_BROWSER_S *Statement
)
{
UINTN Index;
UI_CONTROL *Child;
UI_CONTROL *Control;
UI_CONTROL *CheckBox;
CHAR16 Str[20];
INTN Result;
EFI_STATUS Status;
UINTN OptionIndex;
UINTN NameLen;
CHAR16 *String;
if (Order == NULL || Statement == NULL) {
return;
}
if (Statement->Prompt == NULL && Statement->Image == NULL) {
return;
}
for (Index = 0; Index < Order->ItemCount; Index++) {
Child = Order->Items[Index];
if (Child->Name == NULL) {
continue;
}
NameLen = StrLen(Child->Name);
if (STR_MATCH(Child->Name, NameLen, L"prompt")) {
if (Statement->Prompt == NULL) {
continue;
}
UiSetAttribute (Child, L"text", Statement->Prompt);
} else if (STR_MATCH(Child->Name, NameLen, L"value")) {
if (Statement->Operand == EFI_IFR_CHECKBOX_OP) {
CheckBox = CONTROL_CLASS(Child)->FindChildByName (Child, L"CheckBox", UI_SEARCH_TYPE_ONLY_CHILD);
if (CheckBox != NULL) {
UpdateCheckboxSwitch (CheckBox, Statement);
} else {
UiSetAttribute (Child, L"text", Statement->HiiValue.Value.b ? L"Enabled" : L"Disabled");
}
continue;
} else if (Statement->Operand == EFI_IFR_NUMERIC_OP) {
String = IfrNumericPrintFormattedNumber (Statement);
if (String != NULL) {
UiSetAttribute (Child, L"text", String);
FreePool (String);
}
} else if (Statement->NumberOfOptions != 0) {
for (OptionIndex = 0; OptionIndex < Statement->NumberOfOptions; OptionIndex++) {
Status = CompareHiiValue (&Statement->Options[OptionIndex].HiiValue, &Statement->HiiValue, &Result);
if (!EFI_ERROR (Status) && Result == 0) {
UiSetAttribute (Child, L"text", Statement->Options[OptionIndex].Text);
break;
}
}
} else if (Statement->Operand == EFI_IFR_STRING_OP) {
if (Statement->HiiValue.Buffer == NULL) {
continue;
}
UiSetAttribute (Child, L"text", (CHAR16 *)Statement->HiiValue.Buffer);
}
//
// BUGBUG: If remove this, value string will not place in right
//
UiSetAttribute (Child, L"text-align", L"singleline|right");
UiSetAttribute (Child, L"padding-top", L"0");
//
// TODO: VFCF should support to dynamically set @menucolor for value/str0.
//
if (Statement->Selectable) {
UiSetAttribute (Child, L"textcolor", L"@menucolor");
Control = CONTROL_CLASS(Order)->FindChildByName (Order, L"str0", UI_SEARCH_TYPE_ONLY_CHILD);
if (Control != NULL) {
UiSetAttribute (Control, L"textcolor", L"@menucolor");
}
}
} else if (STR_MATCH(Child->Name, NameLen, L"image")) {
if (Statement->Image == NULL) {
continue;
}
UnicodeSPrint (Str, sizeof (Str), L"0x%p", Statement->Image);
UiSetAttribute (Child, L"background-image", Str);
} else if (STR_MATCH(Child->Name, NameLen, L"text2")) {
if (Statement->TextTwo != NULL && Statement->TextTwo[0] != '\0') {
UiSetAttribute (Child, L"text", Statement->TextTwo);
UiSetAttribute (Child, L"textcolor", L"@menucolor");
} else {
UiSetAttribute (Child, L"visibility", L"false");
//
// TODO: VFCF should support to dynamically entend prompt width and remvoe separator background image.
//
Control = CONTROL_CLASS(Order)->FindChildByName (Order, L"prompt", UI_SEARCH_TYPE_ONLY_CHILD);
if (Control != NULL) {
UiSetAttribute (Control, L"width", L"0");
UiSetAttribute (Control, L"height", L"0");
}
Control = CONTROL_CLASS(Order)->FindChildByName (Order, L"img0", UI_SEARCH_TYPE_ONLY_CHILD);
if (Control != NULL) {
UiSetAttribute (Control, L"width", L"0");
}
Control = CONTROL_CLASS(Order)->FindChildByName (Order, L"img1", UI_SEARCH_TYPE_ONLY_CHILD);
if (Control != NULL) {
UiSetAttribute (Control, L"visibility", L"false");
}
}
} else if (STR_MATCH(Child->Name, NameLen, L"container")) {
Child = CONTROL_CLASS(Child)->FindChildByName (Child, VFCF_PROPERTY_ORDER_CONTROL_NAME, UI_SEARCH_TYPE_ONLY_CHILD);
if (Child == NULL) {
continue;
}
H2OSetupPageItemUpdateVfcfOrder (Child, Statement);
}
}
}
BOOLEAN
EFIAPI
H2OSetupPageItemSetAttribute (
UI_CONTROL *Control,
CHAR16 *Name,
CHAR16 *Value
)
{
H2O_SETUP_PAGE_ITEM *This;
EFI_STATUS Status;
UI_CONTROL *Child;
EFI_GUID ControlType;
CHAR16 *XmlBuffer;
This = (H2O_SETUP_PAGE_ITEM *) Control;
if (StrCmp (Name, L"statement") == 0) {
This->Statement = (H2O_FORM_BROWSER_S *)(UINTN) StrToUInt (Value, 16, &Status);
if (This->Statement->Operand == EFI_IFR_SUBTITLE_OP) {
CONTROL_CLASS_SET_STATE(Control, UISTATE_DISABLED, 0);
}
XmlBuffer = H2OSetupPageItemGetXmlBuffer (This->Statement->Operand);
if (XmlBuffer != NULL) {
CONTROL_CLASS (This)->RemoveAllChild (Control);
XmlCreateControl (XmlBuffer, Control);
Control->MinSize.cy = GetStatementHeight (This->Statement);
UpdateSetupPageItem (Control);
}
CONTROL_CLASS_INVALIDATE (This);
return TRUE;
} else if (StrCmp (Name, L"value-control-type") == 0) {
StrToGuid (Value, &ControlType);
if (CompareGuid (&ControlType, &gH2OSetupLmdeCheckboxImageGuid)) {
Child = UiFindChildByName (Control, L"value");
if (Child != NULL) {
XmlCreateControl (L"<Switch switchcolor='@menucolor' name='CheckBox'/>", Child);
}
}
CONTROL_CLASS_INVALIDATE (This);
return TRUE;
}
return PARENT_CLASS_SET_ATTRIBUTE (CURRENT_CLASS, Control, Name, Value);
}
VOID
EFIAPI
H2OSetupPageItemSetState (
UI_CONTROL *Control,
UI_STATE SetState,
UI_STATE ClearState
)
{
STATIC UI_CONTROL *OldFocusedControl = NULL;
UI_CONTROL *Child;
PARENT_CONTROL_CLASS(CURRENT_CLASS)->SetState (Control, SetState, ClearState);
if ((SetState & UISTATE_FOCUSED) == UISTATE_FOCUSED) {
if (Control != OldFocusedControl) {
MarqueeByName (Control, L"OptionPrompt", L"true");
MarqueeByName (Control, L"OptionValue", L"true");
MarqueeByName (Control, L"prompt" , L"true");
MarqueeByName (Control, L"text2" , L"true");
MarqueeByName (Control, L"value" , L"true");
OldFocusedControl = Control;
Child = UiFindChildByName (Control, L"HotBkg");
if (Child != NULL) {
UiSetAttribute (Child, L"visibility", L"true");
}
}
} else if ((ClearState & UISTATE_FOCUSED) == UISTATE_FOCUSED) {
if (Control == OldFocusedControl) {
MarqueeByName (Control, L"OptionPrompt", L"false");
MarqueeByName (Control, L"OptionValue", L"false");
MarqueeByName (Control, L"prompt" , L"false");
MarqueeByName (Control, L"text2" , L"false");
MarqueeByName (Control, L"value" , L"false");
OldFocusedControl = NULL;
Child = UiFindChildByName (Control, L"HotBkg");
if (Child != NULL) {
UiSetAttribute (Child, L"visibility", L"false");
}
}
}
}
LRESULT
EFIAPI
H2OSetupPageItemProc (
HWND Hwnd,
UINT32 Msg,
WPARAM WParam,
LPARAM LParam
)
{
H2O_SETUP_PAGE_ITEM *This;
UI_CONTROL *Control;
This = (H2O_SETUP_PAGE_ITEM *) GetWindowLongPtr (Hwnd, 0);
if (This == NULL && Msg != WM_CREATE && Msg != WM_NCCALCSIZE) {
ASSERT (FALSE);
return 0;
}
Control = (UI_CONTROL *)This;
switch (Msg) {
case WM_CREATE:
This = (H2O_SETUP_PAGE_ITEM *) AllocateZeroPool (sizeof (H2O_SETUP_PAGE_ITEM));
if (This != NULL) {
CONTROL_CLASS (This) = (UI_CONTROL_CLASS *) GetClassLongPtr (Hwnd, 0);
SetWindowLongPtr (Hwnd, 0, (INTN)This);
SendMessage (Hwnd, UI_NOTIFY_CREATE, WParam, LParam);
}
break;
case UI_NOTIFY_CREATE:
PARENT_CLASS_WNDPROC (CURRENT_CLASS, Hwnd, UI_NOTIFY_CREATE, WParam, LParam);
UiSetAttribute (Control, L"height", L"wrap_content");
Control->MinSize.cy = 35;
break;
case UI_NOTIFY_PAINT:
if (WParam == PAINT_BKCOLOR || WParam == PAINT_STATUSIMAGE) {
break;
}
PARENT_CLASS_WNDPROC (CURRENT_CLASS, Hwnd, Msg, WParam, LParam);
if (WParam == PAINT_ALL &&
(CONTROL_CLASS_GET_STATE (This) & (UISTATE_SELECTED | UISTATE_FOCUSED)) == (UISTATE_SELECTED | UISTATE_FOCUSED)) {
COLORREF Color;
UI_MANAGER *Manager;
RECT Rc;
HDC Hdc;
if (PcdGet32(PcdH2OLmdeMultiLayout) == 0) {
Color = 0xFFFF0000;
} else {
Color = 0xFFFFFFFF;
}
Manager = Control->Manager;
Hdc = Manager->PaintDC;
Manager->GetControlRect (Manager, Control, &Rc);
SelectObject (Hdc, GetStockObject (PS_NULL));
SelectObject (Hdc, GetStockObject (DC_PEN));
SetDCPenColor (Hdc, Color);
Rectangle (Hdc, Rc.left, Rc.top, Rc.right, Rc.bottom);
}
break;
case WM_NCHITTEST:
return HTTRANSPARENT;
default:
return PARENT_CLASS_WNDPROC (CURRENT_CLASS, Hwnd, Msg, WParam, LParam);
}
return 0;
}
H2O_SETUP_PAGE_ITEM_CLASS *
EFIAPI
GetSetupPageItemClass (
VOID
)
{
if (CURRENT_CLASS != NULL) {
return CURRENT_CLASS;
}
InitUiClass ((UI_CONTROL_CLASS **)&CURRENT_CLASS, sizeof (*CURRENT_CLASS), L"SetupPageItem", (UI_CONTROL_CLASS *) GetControlClass());
if (CURRENT_CLASS == NULL) {
return NULL;
}
((UI_CONTROL_CLASS *)CURRENT_CLASS)->WndProc = H2OSetupPageItemProc;
((UI_CONTROL_CLASS *)CURRENT_CLASS)->SetAttribute = H2OSetupPageItemSetAttribute;
((UI_CONTROL_CLASS *)CURRENT_CLASS)->SetState = H2OSetupPageItemSetState;
return CURRENT_CLASS;
}