3 This library class defines a set of interfaces to customize Display module
5 Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials are licensed and made available under
7 the terms and conditions of the BSD License that accompanies this distribution.
8 The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "CustomizedDisplayLibInternal.h"
17 EFI_GUID gCustomizedDisplayLibGuid
= { 0x99fdc8fd, 0x849b, 0x4eba, { 0xad, 0x13, 0xfb, 0x96, 0x99, 0xc9, 0xa, 0x4d } };
19 EFI_HII_HANDLE mCDLStringPackHandle
;
20 UINT16 gClassOfVfr
; // Formset class information
21 BOOLEAN gLibIsFirstForm
= TRUE
;
22 BANNER_DATA
*gBannerData
;
27 +------------------------------------------------------------------------------+
29 +------------------------------------------------------------------------------+
39 +------------------------------------------------------------------------------+
40 | F9=Reset to Defaults F10=Save |
41 | ^"=Move Highlight <Spacebar> Toggles Checkbox Esc=Exit |
42 +------------------------------------------------------------------------------+
47 This funtion defines Page Frame and Backgroud.
49 Based on the above layout, it will be responsible for HeaderHeight, FooterHeight,
50 StatusBarHeight and Backgroud. And, it will reserve Screen for Statement.
52 @param[in] FormData Form Data to be shown in Page.
53 @param[out] ScreenForStatement Screen to be used for Statement. (Prompt, Value and Help)
60 IN FORM_DISPLAY_ENGINE_FORM
*FormData
,
61 OUT EFI_SCREEN_DESCRIPTOR
*ScreenForStatement
66 ASSERT (FormData
!= NULL
&& ScreenForStatement
!= NULL
);
67 if (FormData
== NULL
|| ScreenForStatement
== NULL
) {
68 return EFI_INVALID_PARAMETER
;
71 Status
= ScreenDiemensionInfoValidate (FormData
);
72 if (EFI_ERROR (Status
)) {
76 gClassOfVfr
= FORMSET_CLASS_PLATFORM_SETUP
;
78 ProcessExternedOpcode(FormData
);
81 // Calculate the ScreenForStatement.
83 ScreenForStatement
->BottomRow
= gScreenDimensions
.BottomRow
- STATUS_BAR_HEIGHT
- gFooterHeight
;
84 if (gClassOfVfr
== FORMSET_CLASS_FRONT_PAGE
) {
85 ScreenForStatement
->TopRow
= gScreenDimensions
.TopRow
+ FRONT_PAGE_HEADER_HEIGHT
;
87 ScreenForStatement
->TopRow
= gScreenDimensions
.TopRow
+ NONE_FRONT_PAGE_HEADER_HEIGHT
;
89 ScreenForStatement
->LeftColumn
= gScreenDimensions
.LeftColumn
;
90 ScreenForStatement
->RightColumn
= gScreenDimensions
.RightColumn
;
92 if ((gLibIsFirstForm
) || ((FormData
->Attribute
& HII_DISPLAY_MODAL
) != 0)) {
94 // Ensure we are in Text mode
96 gST
->ConOut
->SetAttribute (gST
->ConOut
, EFI_TEXT_ATTR (EFI_LIGHTGRAY
, EFI_BLACK
));
97 ClearLines (0, gScreenDimensions
.RightColumn
, 0, gScreenDimensions
.BottomRow
, KEYHELP_BACKGROUND
);
98 gLibIsFirstForm
= FALSE
;
102 // Don't print frame for modal form.
104 if ((FormData
->Attribute
& HII_DISPLAY_MODAL
) != 0) {
108 if (gClassOfVfr
== FORMSET_CLASS_FRONT_PAGE
) {
109 PrintBannerInfo (FormData
);
112 PrintFramework (FormData
);
114 UpdateStatusBar(NV_UPDATE_REQUIRED
, FormData
->SettingChangedFlag
);
120 This function updates customized key panel's help information.
121 The library will prepare those Strings for the basic key, ESC, Enter, Up/Down/Left/Right, +/-.
122 and arrange them in Footer panel.
124 @param[in] FormData Form Data to be shown in Page. FormData has the highlighted statement.
125 @param[in] Statement The statement current selected.
126 @param[in] Selected Whether or not a tag be selected. TRUE means Enter has hit this question.
131 IN FORM_DISPLAY_ENGINE_FORM
*FormData
,
132 IN FORM_DISPLAY_ENGINE_STATEMENT
*Statement
,
138 UINTN LeftColumnOfHelp
;
139 UINTN RightColumnOfHelp
;
141 UINTN BottomRowOfHelp
;
142 UINTN StartColumnOfHelp
;
143 EFI_IFR_NUMERIC
*NumericOp
;
144 EFI_IFR_DATE
*DateOp
;
145 EFI_IFR_TIME
*TimeOp
;
148 ASSERT (FormData
!= NULL
);
149 if (FormData
== NULL
) {
153 gST
->ConOut
->SetAttribute (gST
->ConOut
, KEYHELP_TEXT
| KEYHELP_BACKGROUND
);
155 if ((FormData
->Attribute
& HII_DISPLAY_MODAL
) != 0) {
159 SecCol
= gScreenDimensions
.LeftColumn
+ (gScreenDimensions
.RightColumn
- gScreenDimensions
.LeftColumn
) / 3;
160 ThdCol
= gScreenDimensions
.LeftColumn
+ (gScreenDimensions
.RightColumn
- gScreenDimensions
.LeftColumn
) / 3 * 2;
162 StartColumnOfHelp
= gScreenDimensions
.LeftColumn
+ 2;
163 LeftColumnOfHelp
= gScreenDimensions
.LeftColumn
+ 1;
164 RightColumnOfHelp
= gScreenDimensions
.RightColumn
- 2;
165 TopRowOfHelp
= gScreenDimensions
.BottomRow
- STATUS_BAR_HEIGHT
- gFooterHeight
+ 1;
166 BottomRowOfHelp
= gScreenDimensions
.BottomRow
- STATUS_BAR_HEIGHT
- 2;
168 ClearLines (LeftColumnOfHelp
, RightColumnOfHelp
, TopRowOfHelp
, BottomRowOfHelp
, KEYHELP_TEXT
| KEYHELP_BACKGROUND
);
169 if (Statement
== NULL
) {
171 // Print Key for Form without showable statement.
173 PrintHotKeyHelpString (FormData
);
174 PrintStringAt (ThdCol
, BottomRowOfHelp
, gEscapeString
);
182 if (Statement
->OpCode
->OpCode
== EFI_IFR_NUMERIC_OP
) {
183 NumericOp
= (EFI_IFR_NUMERIC
*) Statement
->OpCode
;
184 HexDisplay
= (NumericOp
->Flags
& EFI_IFR_DISPLAY_UINT_HEX
) == EFI_IFR_DISPLAY_UINT_HEX
;
185 } else if (Statement
->OpCode
->OpCode
== EFI_IFR_DATE_OP
) {
186 DateOp
= (EFI_IFR_DATE
*) Statement
->OpCode
;
187 HexDisplay
= (DateOp
->Flags
& EFI_IFR_DISPLAY_UINT_HEX
) == EFI_IFR_DISPLAY_UINT_HEX
;
188 } else if (Statement
->OpCode
->OpCode
== EFI_IFR_TIME_OP
) {
189 TimeOp
= (EFI_IFR_TIME
*) Statement
->OpCode
;
190 HexDisplay
= (TimeOp
->Flags
& EFI_IFR_DISPLAY_UINT_HEX
) == EFI_IFR_DISPLAY_UINT_HEX
;
192 switch (Statement
->OpCode
->OpCode
) {
193 case EFI_IFR_ORDERED_LIST_OP
:
194 case EFI_IFR_ONE_OF_OP
:
195 case EFI_IFR_NUMERIC_OP
:
196 case EFI_IFR_TIME_OP
:
197 case EFI_IFR_DATE_OP
:
199 PrintHotKeyHelpString (FormData
);
201 if (gClassOfVfr
== FORMSET_CLASS_PLATFORM_SETUP
) {
202 PrintStringAt (ThdCol
, BottomRowOfHelp
, gEscapeString
);
205 if ((Statement
->OpCode
->OpCode
== EFI_IFR_DATE_OP
) ||
206 (Statement
->OpCode
->OpCode
== EFI_IFR_TIME_OP
)) {
218 PrintStringAt (SecCol
, BottomRowOfHelp
, gEnterString
);
219 PrintStringAt (StartColumnOfHelp
, TopRowOfHelp
, gAdjustNumber
);
221 PrintAt (0, StartColumnOfHelp
, BottomRowOfHelp
, L
"%c%c%s", ARROW_UP
, ARROW_DOWN
, gMoveHighlight
);
222 if (Statement
->OpCode
->OpCode
== EFI_IFR_NUMERIC_OP
&& NumericOp
!= NULL
&& LibGetFieldFromNum(Statement
->OpCode
) != 0) {
223 PrintStringAt (StartColumnOfHelp
, TopRowOfHelp
, gAdjustNumber
);
225 PrintStringAt (SecCol
, BottomRowOfHelp
, gEnterString
);
228 PrintStringAt (SecCol
, BottomRowOfHelp
, gEnterCommitString
);
231 // If it is a selected numeric with manual input, display different message
233 if ((Statement
->OpCode
->OpCode
== EFI_IFR_NUMERIC_OP
) ||
234 (Statement
->OpCode
->OpCode
== EFI_IFR_DATE_OP
) ||
235 (Statement
->OpCode
->OpCode
== EFI_IFR_TIME_OP
)) {
239 HexDisplay
? gHexNumericInput
: gDecNumericInput
241 } else if (Statement
->OpCode
->OpCode
!= EFI_IFR_ORDERED_LIST_OP
) {
242 PrintAt (0, StartColumnOfHelp
, BottomRowOfHelp
, L
"%c%c%s", ARROW_UP
, ARROW_DOWN
, gMoveHighlight
);
245 if (Statement
->OpCode
->OpCode
== EFI_IFR_ORDERED_LIST_OP
) {
246 PrintStringAt (StartColumnOfHelp
, TopRowOfHelp
, gPlusString
);
247 PrintStringAt (ThdCol
, TopRowOfHelp
, gMinusString
);
250 PrintStringAt (ThdCol
, BottomRowOfHelp
, gEnterEscapeString
);
254 case EFI_IFR_CHECKBOX_OP
:
255 PrintHotKeyHelpString (FormData
);
257 if (gClassOfVfr
== FORMSET_CLASS_PLATFORM_SETUP
) {
258 PrintStringAt (ThdCol
, BottomRowOfHelp
, gEscapeString
);
261 PrintAt (0, StartColumnOfHelp
, BottomRowOfHelp
, L
"%c%c%s", ARROW_UP
, ARROW_DOWN
, gMoveHighlight
);
262 PrintStringAt (SecCol
, BottomRowOfHelp
, gToggleCheckBox
);
266 case EFI_IFR_PASSWORD_OP
:
267 case EFI_IFR_STRING_OP
:
268 case EFI_IFR_TEXT_OP
:
269 case EFI_IFR_ACTION_OP
:
270 case EFI_IFR_RESET_BUTTON_OP
:
271 case EFI_IFR_SUBTITLE_OP
:
273 PrintHotKeyHelpString (FormData
);
275 if (gClassOfVfr
== FORMSET_CLASS_PLATFORM_SETUP
) {
276 PrintStringAt (ThdCol
, BottomRowOfHelp
, gEscapeString
);
279 PrintAt (0, StartColumnOfHelp
, BottomRowOfHelp
, L
"%c%c%s", ARROW_UP
, ARROW_DOWN
, gMoveHighlight
);
280 if (Statement
->OpCode
->OpCode
!= EFI_IFR_TEXT_OP
&& Statement
->OpCode
->OpCode
!= EFI_IFR_SUBTITLE_OP
) {
281 PrintStringAt (SecCol
, BottomRowOfHelp
, gEnterString
);
284 if (Statement
->OpCode
->OpCode
!= EFI_IFR_REF_OP
) {
286 (gScreenDimensions
.RightColumn
- LibGetStringWidth (gEnterCommitString
) / 2) / 2,
290 PrintStringAt (ThdCol
, BottomRowOfHelp
, gEnterEscapeString
);
303 This function updates the status bar on the bottom of menu screen. It just shows StatusBar.
304 Original logic in this function should be splitted out.
306 @param[in] MessageType The type of message to be shown. InputError or Configuration Changed.
307 @param[in] State Show or Clear Message.
312 IN UINTN MessageType
,
319 OptionWidth
= (CHAR16
) ((gScreenDimensions
.RightColumn
- gScreenDimensions
.LeftColumn
) / 3);
321 switch (MessageType
) {
324 gST
->ConOut
->SetAttribute (gST
->ConOut
, ERROR_TEXT
);
326 gScreenDimensions
.LeftColumn
+ OptionWidth
,
327 gScreenDimensions
.BottomRow
- 1,
331 gST
->ConOut
->SetAttribute (gST
->ConOut
, KEYHELP_BACKGROUND
);
332 for (Index
= 0; Index
< (LibGetStringWidth (gInputErrorMessage
) - 2) / 2; Index
++) {
333 PrintStringAt (gScreenDimensions
.LeftColumn
+ OptionWidth
+ Index
, gScreenDimensions
.BottomRow
- 1, L
" ");
338 case NV_UPDATE_REQUIRED
:
340 // Global setting support. Show configuration change on every form.
343 gST
->ConOut
->SetAttribute (gST
->ConOut
, INFO_TEXT
);
345 gScreenDimensions
.LeftColumn
+ OptionWidth
* 2,
346 gScreenDimensions
.BottomRow
- 1,
350 gST
->ConOut
->SetAttribute (gST
->ConOut
, KEYHELP_BACKGROUND
);
351 for (Index
= 0; Index
< (LibGetStringWidth (gNvUpdateMessage
) - 2) / 2; Index
++) {
353 (gScreenDimensions
.LeftColumn
+ OptionWidth
* 2 + Index
),
354 gScreenDimensions
.BottomRow
- 1,
367 Create popup window. It will replace CreateDialog().
369 This function draws OEM/Vendor specific pop up windows.
371 @param[out] Key User Input Key
372 @param ... String to be shown in Popup. The variable argument list is terminated by a NULL.
378 OUT EFI_INPUT_KEY
*Key
, OPTIONAL
383 EFI_INPUT_KEY KeyValue
;
395 UINTN DimensionsWidth
;
396 UINTN DimensionsHeight
;
397 UINTN CurrentAttribute
;
400 // If screen dimension info is not ready, get it from console.
402 if (gScreenDimensions
.RightColumn
== 0 || gScreenDimensions
.BottomRow
== 0) {
403 ZeroMem (&gScreenDimensions
, sizeof (EFI_SCREEN_DESCRIPTOR
));
404 gST
->ConOut
->QueryMode (
406 gST
->ConOut
->Mode
->Mode
,
407 &gScreenDimensions
.RightColumn
,
408 &gScreenDimensions
.BottomRow
412 DimensionsWidth
= gScreenDimensions
.RightColumn
- gScreenDimensions
.LeftColumn
;
413 DimensionsHeight
= gScreenDimensions
.BottomRow
- gScreenDimensions
.TopRow
;
417 VA_START (Marker
, Key
);
418 while ((String
= VA_ARG (Marker
, CHAR16
*)) != NULL
) {
421 if ((LibGetStringWidth (String
) / 2) > LargestString
) {
422 LargestString
= (LibGetStringWidth (String
) / 2);
427 if ((LargestString
+ 2) > DimensionsWidth
) {
428 LargestString
= DimensionsWidth
- 2;
431 CurrentAttribute
= gST
->ConOut
->Mode
->Attribute
;
432 gST
->ConOut
->EnableCursor (gST
->ConOut
, FALSE
);
433 gST
->ConOut
->SetAttribute (gST
->ConOut
, GetPopupColor ());
436 // Subtract the PopUp width from total Columns, allow for one space extra on
437 // each end plus a border.
439 Start
= (DimensionsWidth
- LargestString
- 2) / 2 + gScreenDimensions
.LeftColumn
+ 1;
440 End
= Start
+ LargestString
+ 1;
442 Top
= ((DimensionsHeight
- LineNum
- 2) / 2) + gScreenDimensions
.TopRow
- 1;
443 Bottom
= Top
+ LineNum
+ 2;
445 Character
= BOXDRAW_DOWN_RIGHT
;
446 PrintCharAt (Start
, Top
, Character
);
447 Character
= BOXDRAW_HORIZONTAL
;
448 for (Index
= Start
; Index
+ 2 < End
; Index
++) {
449 PrintCharAt ((UINTN
)-1, (UINTN
)-1, Character
);
452 Character
= BOXDRAW_DOWN_LEFT
;
453 PrintCharAt ((UINTN
)-1, (UINTN
)-1, Character
);
454 Character
= BOXDRAW_VERTICAL
;
457 VA_START (Marker
, Key
);
458 for (Index
= Top
; Index
+ 2 < Bottom
; Index
++, Count
++) {
459 String
= VA_ARG (Marker
, CHAR16
*);
461 if (String
[0] == CHAR_NULL
) {
463 // Passing in a NULL results in a blank space
465 ClearLines (Start
, End
, Index
+ 1, Index
+ 1, GetPopupColor ());
466 } else if (String
[0] == L
' ') {
468 // Passing in a space results in the assumption that this is where typing will occur
470 ClearLines (Start
+ 1, End
- 1, Index
+ 1, Index
+ 1, POPUP_INVERSE_TEXT
| POPUP_INVERSE_BACKGROUND
);
472 ((DimensionsWidth
- LibGetStringWidth (String
) / 2) / 2) + gScreenDimensions
.LeftColumn
+ 1,
478 // This will clear the background of the line - we never know who might have been
479 // here before us. This differs from the next clear in that it used the non-reverse
480 // video for normal printing.
482 ClearLines (Start
, End
, Index
+ 1, Index
+ 1, GetPopupColor ());
484 ((DimensionsWidth
- LibGetStringWidth (String
) / 2) / 2) + gScreenDimensions
.LeftColumn
+ 1,
490 gST
->ConOut
->SetAttribute (gST
->ConOut
, GetPopupColor ());
491 PrintCharAt (Start
, Index
+ 1, Character
);
492 PrintCharAt (End
- 1, Index
+ 1, Character
);
496 Character
= BOXDRAW_UP_RIGHT
;
497 PrintCharAt (Start
, Bottom
- 1, Character
);
498 Character
= BOXDRAW_HORIZONTAL
;
499 for (Index
= Start
; Index
+ 2 < End
; Index
++) {
500 PrintCharAt ((UINTN
)-1, (UINTN
) -1, Character
);
503 Character
= BOXDRAW_UP_LEFT
;
504 PrintCharAt ((UINTN
)-1, (UINTN
) -1, Character
);
507 Status
= WaitForKeyStroke (&KeyValue
);
508 ASSERT_EFI_ERROR (Status
);
509 CopyMem (Key
, &KeyValue
, sizeof (EFI_INPUT_KEY
));
512 gST
->ConOut
->SetAttribute (gST
->ConOut
, CurrentAttribute
);
513 gST
->ConOut
->EnableCursor (gST
->ConOut
, TRUE
);
517 Confirm how to handle the changed data.
519 @return Action BROWSER_ACTION_SUBMIT, BROWSER_ACTION_DISCARD or other values.
531 gST
->ConIn
->ReadKeyStroke (gST
->ConIn
, &Key
);
533 YesResponse
= gYesResponse
[0];
534 NoResponse
= gNoResponse
[0];
537 // If NV flag is up, prompt user
540 CreateDialog (&Key
, gLibEmptyString
, gSaveChanges
, gAreYouSure
, gLibEmptyString
, NULL
);
543 (Key
.ScanCode
!= SCAN_ESC
) &&
544 ((Key
.UnicodeChar
| UPPER_LOWER_CASE_OFFSET
) != (NoResponse
| UPPER_LOWER_CASE_OFFSET
)) &&
545 ((Key
.UnicodeChar
| UPPER_LOWER_CASE_OFFSET
) != (YesResponse
| UPPER_LOWER_CASE_OFFSET
))
548 if (Key
.ScanCode
== SCAN_ESC
) {
549 return BROWSER_ACTION_NONE
;
550 } else if ((Key
.UnicodeChar
| UPPER_LOWER_CASE_OFFSET
) == (YesResponse
| UPPER_LOWER_CASE_OFFSET
)) {
551 return BROWSER_ACTION_SUBMIT
;
553 return BROWSER_ACTION_DISCARD
;
558 OEM specifies whether Setup exits Page by ESC key.
560 This function customized the behavior that whether Setup exits Page so that
561 system able to boot when configuration is not changed.
563 @retval TRUE Exits FrontPage
564 @retval FALSE Don't exit FrontPage.
572 return gClassOfVfr
== FORMSET_CLASS_FRONT_PAGE
? FALSE
: TRUE
;
576 Set Timeout value for a ceratain Form to get user response.
578 This function allows to set timeout value on a ceratain form if necessary.
579 If timeout is not zero, the form will exit if user has no response in timeout.
581 @param[in] FormData Form Data to be shown in Page
583 @return 0 No timeout for this form.
584 @return > 0 Timeout value in 100 ns units.
589 IN FORM_DISPLAY_ENGINE_FORM
*FormData
598 Prints a unicode string to the default console, at
599 the supplied cursor position, using L"%s" format.
601 @param Column The cursor position to print the string at. When it is -1, use current Position.
602 @param Row The cursor position to print the string at. When it is -1, use current Position.
603 @param String String pointer.
605 @return Length of string printed to the console
616 return PrintAt (0, Column
, Row
, L
"%s", String
);
620 Prints a unicode string to the default console, at
621 the supplied cursor position, using L"%s" format.
623 @param Column The cursor position to print the string at. When it is -1, use current Position.
624 @param Row The cursor position to print the string at. When it is -1, use current Position.
625 @param String String pointer.
626 @param Width Width for String.
628 @return Length of string printed to the console
633 PrintStringAtWithWidth (
640 return PrintAt (Width
, Column
, Row
, L
"%s", String
);
644 Prints a chracter to the default console, at
645 the supplied cursor position, using L"%c" format.
647 @param Column The cursor position to print the string at. When it is -1, use current Position.
648 @param Row The cursor position to print the string at. When it is -1, use current Position.
649 @param Character Character to print.
651 @return Length of string printed to the console.
662 return PrintAt (0, Column
, Row
, L
"%c", Character
);
666 Clear retangle with specified text attribute.
668 @param LeftColumn Left column of retangle.
669 @param RightColumn Right column of retangle.
670 @param TopRow Start row of retangle.
671 @param BottomRow End row of retangle.
672 @param TextAttribute The character foreground and background.
679 IN UINTN RightColumn
,
682 IN UINTN TextAttribute
689 // For now, allocate an arbitrarily long buffer
691 Buffer
= AllocateZeroPool (0x10000);
692 ASSERT (Buffer
!= NULL
);
695 // Set foreground and background as defined
697 gST
->ConOut
->SetAttribute (gST
->ConOut
, TextAttribute
);
700 // Much faster to buffer the long string instead of print it a character at a time
702 LibSetUnicodeMem (Buffer
, RightColumn
- LeftColumn
, L
' ');
705 // Clear the desired area with the appropriate foreground/background
707 for (Row
= TopRow
; Row
<= BottomRow
; Row
++) {
708 PrintStringAt (LeftColumn
, Row
, Buffer
);
711 gST
->ConOut
->SetCursorPosition (gST
->ConOut
, LeftColumn
, TopRow
);
717 // Color Setting Functions
721 Get OEM/Vendor specific popup attribute colors.
723 @retval Byte code color setting for popup color.
731 return POPUP_TEXT
| POPUP_BACKGROUND
;
735 Get OEM/Vendor specific popup attribute colors.
737 @retval Byte code color setting for popup inverse color.
741 GetPopupInverseColor (
745 return POPUP_INVERSE_TEXT
| POPUP_INVERSE_BACKGROUND
;
749 Get OEM/Vendor specific PickList color attribute.
751 @retval Byte code color setting for pick list color.
759 return PICKLIST_HIGHLIGHT_TEXT
| PICKLIST_HIGHLIGHT_BACKGROUND
;
763 Get OEM/Vendor specific arrow color attribute.
765 @retval Byte code color setting for arrow color.
773 return ARROW_TEXT
| ARROW_BACKGROUND
;
777 Get OEM/Vendor specific info text color attribute.
779 @retval Byte code color setting for info text color.
787 return INFO_TEXT
| FIELD_BACKGROUND
;
791 Get OEM/Vendor specific help text color attribute.
793 @retval Byte code color setting for help text color.
801 return HELP_TEXT
| FIELD_BACKGROUND
;
805 Get OEM/Vendor specific grayed out text color attribute.
807 @retval Byte code color setting for grayed out text color.
815 return FIELD_TEXT_GRAYED
| FIELD_BACKGROUND
;
819 Get OEM/Vendor specific highlighted text color attribute.
821 @retval Byte code color setting for highlight text color.
825 GetHighlightTextColor (
829 return PcdGet8 (PcdBrowserFieldTextHighlightColor
) | PcdGet8 (PcdBrowserFieldBackgroundHighlightColor
);
833 Get OEM/Vendor specific field text color attribute.
835 @retval Byte code color setting for field text color.
843 return PcdGet8 (PcdBrowserFieldTextColor
) | FIELD_BACKGROUND
;
847 Get OEM/Vendor specific subtitle text color attribute.
849 @retval Byte code color setting for subtitle text color.
853 GetSubTitleTextColor (
857 return PcdGet8 (PcdBrowserSubtitleTextColor
) | FIELD_BACKGROUND
;
861 Clear Screen to the initial state.
869 gST
->ConOut
->SetAttribute (gST
->ConOut
, EFI_TEXT_ATTR (EFI_LIGHTGRAY
, EFI_BLACK
));
870 gST
->ConOut
->ClearScreen (gST
->ConOut
);
871 gLibIsFirstForm
= TRUE
;
875 Constructor of Customized Display Library Instance.
877 @param ImageHandle The firmware allocated handle for the EFI image.
878 @param SystemTable A pointer to the EFI System Table.
880 @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
885 CustomizedDisplayLibConstructor (
886 IN EFI_HANDLE ImageHandle
,
887 IN EFI_SYSTEM_TABLE
*SystemTable
890 mCDLStringPackHandle
= HiiAddPackages (&gCustomizedDisplayLibGuid
, ImageHandle
, CustomizedDisplayLibStrings
, NULL
);
891 ASSERT (mCDLStringPackHandle
!= NULL
);
893 InitializeLibStrings();
899 Destructor of Customized Display Library Instance.
901 @param ImageHandle The firmware allocated handle for the EFI image.
902 @param SystemTable A pointer to the EFI System Table.
904 @retval EFI_SUCCESS The destructor completed successfully.
905 @retval Other value The destructor did not complete successfully.
910 CustomizedDisplayLibDestructor (
911 IN EFI_HANDLE ImageHandle
,
912 IN EFI_SYSTEM_TABLE
*SystemTable
915 HiiRemovePackages(mCDLStringPackHandle
);