Re: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit string drawing within one line


Gao, Zhichao
 

Can we make a decision on this issue?

Thanks,
Zhichao

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Gao,
Zhichao
Sent: Friday, September 10, 2021 2:20 PM
To: Ni, Ray <ray.ni@intel.com>; Bi, Dandan <dandan.bi@intel.com>
Cc: Wang, Jian J <jian.j.wang@intel.com>; Liming Gao
<gaoliming@byosoft.com.cn>; devel@edk2.groups.io
Subject: Re: [edk2-devel] [PATCH V2]
MdeModulePkg/BootManagerMenuApp: Limit string drawing within one line

No. My point is the HII usage would require the HII browser engine. That's
too complex for this simple app.

Dandan,
If I am wrong, please help to correct.

Thanks,
Zhichao

-----Original Message-----
From: Ni, Ray <ray.ni@intel.com>
Sent: Thursday, September 9, 2021 10:55 PM
To: Gao, Zhichao <zhichao.gao@intel.com>; Bi, Dandan
<dandan.bi@intel.com>
Cc: Wang, Jian J <jian.j.wang@intel.com>; Liming Gao
<gaoliming@byosoft.com.cn>; devel@edk2.groups.io
Subject: RE: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit
string
drawing within one line

I remember that HII can tell the width of a string.
Have you evaluated using HII? +@Bi, Dandan

-----Original Message-----
From: Gao, Zhichao <zhichao.gao@intel.com>
Sent: Thursday, September 9, 2021 3:26 PM
To: devel@edk2.groups.io
Cc: Wang, Jian J <jian.j.wang@intel.com>; Liming Gao
<gaoliming@byosoft.com.cn>; Ni, Ray <ray.ni@intel.com>
Subject: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit
string
drawing within one line

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3590

Limit the draw box always within the screen's column and row.
Limit the string drawing within one line.

Change-Id: Ib7bd63cb07b23875a1e4f37ae80a422e1d5ed54f
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Zhichao Gao <zhichao.gao@intel.com>
---

V2:

Drop the change in UefiBootManagerLib in V1.

Add the limitation in BootManagerMenuApp instead.


.../BootManagerMenuApp/BootManagerMenu.c | 72
++++++++++++++++++-
1 file changed, 69 insertions(+), 3 deletions(-)

diff --git
a/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.
c
b/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.
c
index 9e729074ec..d4bdeba073 100644
---
a/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.
c
+++
b/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.
c
@@ -1,7 +1,7 @@
/** @file

The application to show the Boot Manager Menu.



-Copyright (c) 2011 - 2018, Intel Corporation. All rights
reserved.<BR>

+Copyright (c) 2011 - 2021, Intel Corporation. All rights
+reserved.<BR>

SPDX-License-Identifier: BSD-2-Clause-Patent



**/

@@ -45,9 +45,56 @@ PrintStringAt (
IN CHAR16 *String

)

{

+ UINTN ScreenWidth;

+ UINTN ScreenRows;

+ CHAR16 *TurncateString;

+ EFI_STATUS Status;

+ UINTN ShowingLength;



gST->ConOut->SetCursorPosition (gST->ConOut, Column, Row);

- return Print (L"%s", String);

+

+ gST->ConOut->QueryMode (

+ gST->ConOut,

+ gST->ConOut->Mode->Mode,

+ &ScreenWidth,

+ &ScreenRows

+ );

+

+ if (Column > (ScreenWidth - 1) || Row > (ScreenRows - 1)) {

+ return 0;

+ }

+

+ if ((StrLen (String) + Column) > (ScreenWidth - 1)) {

+ //

+ // | - ScreenWidth - |

+ // ...Column.....................

+ // TurncateString length should leave one character for draw
+ box and

+ // require one character for string end.

+ //

+ ShowingLength = ScreenWidth - Column - 1;

+ TurncateString = AllocatePool ((ShowingLength + 1) * sizeof
+ (CHAR16));

+

+ if (TurncateString == NULL) {

+ return 0;

+ }

+

+ Status = StrnCpyS (TurncateString, ShowingLength + 1, String,
ShowingLength - 3);

+

+ if (EFI_ERROR (Status)) {

+ FreePool (TurncateString);

+ return 0;

+ }

+

+ *(TurncateString + ShowingLength - 3) = L'.';

+ *(TurncateString + ShowingLength - 2) = L'.';

+ *(TurncateString + ShowingLength - 1) = L'.';

+ *(TurncateString + ShowingLength) = L'\0';

+ ShowingLength = Print (L"%s", TurncateString);

+ FreePool (TurncateString);

+ return ShowingLength;

+ } else {

+ return Print (L"%s", String);

+ }

}



/**

@@ -68,7 +115,22 @@ PrintCharAt (
CHAR16 Character

)

{

+ UINTN ScreenWidth;

+ UINTN ScreenRows;

+

gST->ConOut->SetCursorPosition (gST->ConOut, Column, Row);

+

+ gST->ConOut->QueryMode (

+ gST->ConOut,

+ gST->ConOut->Mode->Mode,

+ &ScreenWidth,

+ &ScreenRows

+ );

+

+ if (Column > (ScreenWidth - 1) || Row > (ScreenRows - 1)) {

+ return 0;

+ }

+

return Print (L"%c", Character);

}



@@ -193,7 +255,11 @@ InitializeBootMenuScreen (


MaxPrintRows = Row - 6;

UnSelectableItmes = TITLE_TOKEN_COUNT + 2 + HELP_TOKEN_COUNT
+
2;

- BootMenuData->MenuScreen.Width = MaxStrWidth + 8;

+ if (MaxStrWidth + 8 > Column) {

+ BootMenuData->MenuScreen.Width = Column;

+ } else {

+ BootMenuData->MenuScreen.Width = MaxStrWidth + 8;

+ }

if (BootMenuData->ItemCount + UnSelectableItmes > MaxPrintRows) {

BootMenuData->MenuScreen.Height = MaxPrintRows;

BootMenuData->ScrollBarControl.HasScrollBar = TRUE;

--
2.31.1.windows.1




Join devel@edk2.groups.io to automatically receive all group messages.