[edk2-devel] [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit string drawing within one line

Gao, Zhichao zhichao.gao at intel.com
Fri Sep 24 06:15:40 UTC 2021


Hi Liming,

One more info I forgot to mention, the patch would make the long boot option string show within one line with "..." at the end of the string. Which indicate the boot description is not completed.

Thanks,
Zhichao

> -----Original Message-----
> From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Gao,
> Zhichao
> Sent: Thursday, September 23, 2021 11:47 AM
> To: devel at edk2.groups.io; gaoliming at byosoft.com.cn; Ni, Ray
> <ray.ni at intel.com>
> Cc: Wang, Jian J <jian.j.wang at intel.com>
> Subject: Re: [edk2-devel] [PATCH V2]
> MdeModulePkg/BootManagerMenuApp: Limit string drawing within one line
> 
> Hi Liming,
> 
> Yes. Because the design of the BM app is not aimed to display the boot
> option over one line. And it is not using the setup browser engine.
> That would cause the difference.
> If we want to make them align, there are two options:
> 1. BM app to use the setup browser engine 2. add scroll bar logic for the boot
> item
> 
> Both above change is not simple and may cause new issues. It would be a
> new design other than a bug fix.
> 
> Another solution is the patch V1 to limit the boot option description within 72
> characters. Ray pointed out it is not a good solution.
> 
> BTW, I would remove the change-id in next patch.
> 
> Thanks,
> Zhichao
> 
> > -----Original Message-----
> > From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of
> > gaoliming
> > Sent: Thursday, September 23, 2021 10:59 AM
> > To: devel at edk2.groups.io; Gao, Zhichao <zhichao.gao at intel.com>; Ni,
> > Ray <ray.ni at intel.com>
> > Cc: Wang, Jian J <jian.j.wang at intel.com>
> > Subject: 回复: [edk2-devel] [PATCH V2]
> > MdeModulePkg/BootManagerMenuApp: Limit string drawing within one
> line
> >
> > Zhichao:
> >   With this change, the same boot option will be displayed differently
> > in BootManagerApp and BootManager Page. Is it the designed behavior?
> >
> >   Besides, please remove change-id from the commit message.
> >
> > Thanks
> > Liming
> > > -----邮件原件-----
> > > 发件人: devel at edk2.groups.io <devel at edk2.groups.io> 代表 Gao,
> > Zhichao
> > > 发送时间: 2021年9月22日 12:50
> > > 收件人: Ni, Ray <ray.ni at intel.com>; devel at edk2.groups.io; Liming Gao
> > > <gaoliming at byosoft.com.cn>
> > > 抄送: Wang, Jian J <jian.j.wang at intel.com>
> > > 主题: Re: [edk2-devel] [PATCH V2]
> > MdeModulePkg/BootManagerMenuApp:
> > > Limit string drawing within one line
> > >
> > > Hi Liming,
> > >
> > > The solution is different with the first time we discussed on the
> > Bugzilla. Can
> > > you review if it is OK to you?
> > >
> > > Thanks,
> > > Zhichao
> > >
> > > > -----Original Message-----
> > > > From: Ni, Ray <ray.ni at intel.com>
> > > > Sent: Wednesday, September 22, 2021 11:28 AM
> > > > To: Gao, Zhichao <zhichao.gao at intel.com>; devel at edk2.groups.io
> > > > Cc: Wang, Jian J <jian.j.wang at intel.com>; Liming Gao
> > > > <gaoliming at byosoft.com.cn>
> > > > Subject: RE: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit
> > > > string drawing within one line
> > > >
> > > > Reviewed-by: Ray Ni <ray.ni at intel.com>
> > > >
> > > > -----Original Message-----
> > > > From: Gao, Zhichao <zhichao.gao at intel.com>
> > > > Sent: Thursday, September 9, 2021 3:26 PM
> > > > To: devel at edk2.groups.io
> > > > Cc: Wang, Jian J <jian.j.wang at intel.com>; Liming Gao
> > > > <gaoliming at byosoft.com.cn>; Ni, Ray <ray.ni at 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 at intel.com>
> > > > Cc: Liming Gao <gaoliming at byosoft.com.cn>
> > > > Cc: Ray Ni <ray.ni at intel.com>
> > > > Signed-off-by: Zhichao Gao <zhichao.gao at 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
> > >
> > >
> > >
> > >
> > >
> >
> >
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#81066): https://edk2.groups.io/g/devel/message/81066
Mute This Topic: https://groups.io/mt/85833322/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list