From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web08.8666.1631199291299227573 for ; Thu, 09 Sep 2021 07:54:51 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=P6pGtDxL; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: ray.ni@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10101"; a="208040168" X-IronPort-AV: E=Sophos;i="5.85,280,1624345200"; d="scan'208";a="208040168" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 07:54:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,280,1624345200"; d="scan'208";a="466529585" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by fmsmga007.fm.intel.com with ESMTP; 09 Sep 2021 07:54:50 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 9 Sep 2021 07:54:49 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Thu, 9 Sep 2021 07:54:49 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.47) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Thu, 9 Sep 2021 07:54:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FD7VpzJZAPf9178pqEU/qudQgK+PffkcEDbXG+0NzC0szd8KE0QPPnfCzi1bduD35D3R8WJ1p7v4Oi/4igeN/NBSCDJUJZKssgV7P2QBlx6Z96HhOLPI6dttRRrPm2g0kTwNokde7cuzp0D94RayQJa8gib/Ds04oLitruhVmg9wwJ2LicfEKnZdWaJPQatr0J17bo9xG0h8jKat9eNJiHRXdnCRcttakmKSePy43wmA5nMKHnRp+L5CabywqwmeaAoUXjf9gABXMJvMv0vjDL1cZIgCSrYVmpgs6aGK102Pne9pv7vEtzuZXi1sZMsL98belukQGPnwEBmdDmjYIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=LJSDUm1PYhBM/0gaar3IId3ikdY+dPUBdf8Q81AK5Hg=; b=oD4W8V2buyVXc16UY5oe8ysoMljbUshg7NDl/5sxSdGIFMu2HGI+c0y35/aWlOQ+8Upe15DE6WcSOyHhgvA+FNb6vV2zEy+nThv/X6//XqunzdxP5g6Jaad1XhNUqPgHVl+IxRCcY1IWhtsz4oYy4QMQal2H6WJQHMbuSyza9qdgoVPB2ru0W9gNY0OfD9YHky4xSi5LiSHVruucld9Nt1i5v2+ZBwW/wh189c2XEk4NjWKOKQYAWN2TCXhEb0YesLykk9ve4+nAzntNZQ64anRSr00C3GZAMobte9AhUVIwVqJOJUckTrSfzZzOb7IckpXPWTAGL3JJ+XP0uO6QIw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LJSDUm1PYhBM/0gaar3IId3ikdY+dPUBdf8Q81AK5Hg=; b=P6pGtDxL6PCOMmjGvhOlT/9l6Se5uZ6eMLHKce4qClWRlU8E8fjucS0N5TwtT+CkT1wbsbELzKdr3t+zuBLwbHXt0yz7+hnzHeWfp2jHUEYYc7gRHRI5QqFii6sBoJQAd1wiAZPpNS0tUdxr1DQyL/0DhT3qMW1ZDEgg2215J80= Received: from CO1PR11MB4930.namprd11.prod.outlook.com (2603:10b6:303:9b::11) by MWHPR1101MB2270.namprd11.prod.outlook.com (2603:10b6:301:54::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.14; Thu, 9 Sep 2021 14:54:49 +0000 Received: from CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::50ce:c9a3:ab37:9fac]) by CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::50ce:c9a3:ab37:9fac%9]) with mapi id 15.20.4500.016; Thu, 9 Sep 2021 14:54:48 +0000 From: "Ni, Ray" To: "Gao, Zhichao" , "Bi, Dandan" CC: "Wang, Jian J" , Liming Gao , "devel@edk2.groups.io" Subject: Re: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit string drawing within one line Thread-Topic: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit string drawing within one line Thread-Index: AQHXpUvsuh5reQxFl0O+Aioo+AtRhaubylYA Date: Thu, 9 Sep 2021 14:54:48 +0000 Message-ID: References: <20210909072541.3069-1-zhichao.gao@intel.com> In-Reply-To: <20210909072541.3069-1-zhichao.gao@intel.com> Accept-Language: en-US X-Mentions: dandan.bi@intel.com X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fe32fce2-c1d5-4190-e068-08d973a1c57d x-ms-traffictypediagnostic: MWHPR1101MB2270: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:605; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JVq0ztgChtwhtWr8BQ1jO0qFBRCGqrHPoWpWnPhAkKlROLZ4JPwRdJD4ExQkxSO6/cwGNnzjbujVhGzxdgMsV3i+WfGqynU4JA1BRPsu0j4RKaoQIHCMlU+5KLpbsZbF0EKYJmSoS5+oCRY14lw575d7IR45kETfm5NpYuD8aiBqwxY3H6QipiVtb6MY6MUngpViM0yjpFO9psrf9LbnIF/D3OIlc9xF7iXZP7y2ieWTnfyKy6SHKxGT4Vv24u0iaAhzCHpa2SSAi3NofJRN7kMzPA+OBeznriLlOblI9s4nfEnULJsIJCD0vjp0qRkCE/+Ym4JCESNilEBwKReHSWFWAStTL7mnRZKKBvjCrWjMlDcVp/DxHmQ2ohGkL4cb0dDeLdwhGdcAJX0AN6SAvWYpM63YqPSIynhl0TxZXb5BVAGyOz2xyP1MY+yB6AcLoWl/OY86YdMTwtpczlL15gjEHmmPVGSOP4PKskF7/hsGa7WTiYzB02mRP+4nkwcmyqjW7LdnT98EJQOwpluzmVX0kST1YT2cmUv3FIsruvoOFlqD/0fFK2+fsqRBlJBcEw5Wzw6SrhYbUnWTqanwa/KxSizb8uaW1EGIBk/gXunHJOWklk0ywJBLuL5CnIhs17sXq6QMzir3o4JzCQuJAe8OrTLaLHr7/zJgeMSmsVpF12Y94+jNoZjfXI68jO8Y9dzMlyskSmFINKlM5hAwtj78LflY+2PCTDi/K/iiSbYnyfVZbwXS5zjaupe/sevU/kyjp0s7yOeZTblc5xRhBrZIT8OWiOqcU0ll9y13QVk= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4930.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(136003)(376002)(39860400002)(396003)(38070700005)(86362001)(71200400001)(478600001)(83380400001)(316002)(966005)(5660300002)(26005)(33656002)(52536014)(9686003)(4326008)(8936002)(55016002)(8676002)(110136005)(64756008)(66556008)(66446008)(186003)(66476007)(54906003)(6636002)(66946007)(2906002)(122000001)(6506007)(76116006)(7696005)(38100700002)(53546011);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?smJuV80+vqGKD7p+IDiWqOTskHf0Y8lqGAh41wcBxayr9ALwOFmSNYc198RW?= =?us-ascii?Q?xGrJfy07HVO+wLnjn5eTonvYetypB2HqP6AHsT0W1nh2rZ+CYcrkM4Y6Q2lM?= =?us-ascii?Q?3fAWFxcuRW+zND8t0l9CWNE9NjAg6/OKQrlGvFNBQJxoQpHf8hYpcsgIMB3/?= =?us-ascii?Q?nQ7q72YfFwxBfj3iancoANnAq136D44LTTBgeIuielhVu0VfBE888lz45rfi?= =?us-ascii?Q?wyXsGnU1ksIft7k5+uRfe//nha3LMPLIyZGHeReUfpATGClx8Mwa1jR90z3N?= =?us-ascii?Q?RmbIckqHClp4Oj2Kj1+pYEzt81lmUjtupRwwwE+m68JYIQpo5J9vfiOsCAZD?= =?us-ascii?Q?SK9qKW/YwpXLsUqkmbO89KZFlhZ8S+yzTfr/m4FEbaYKa/hJ7hiJAdoUdPLm?= =?us-ascii?Q?0bHn7ZITMfbUOBLN3UxKEj/asJIMooL0jdatFSqyX/3GfgjZjTpmOwCxfeQ0?= =?us-ascii?Q?0Ukp0f4zCP9ricMIEzEctHheiAmrpIQtdGatEMMIovj+njvIEMCZ+aGVn1tH?= =?us-ascii?Q?Z2mnOQ6obGOuShHGF2Tyeo2CPhhYFakAAwzTjdBsxzEa3PmhFtalUQvladc+?= =?us-ascii?Q?mYh9CRVwAPCEMOTPDD5c64x2fdS4aNbZ7zctWzLBpNlkAGXN6YojmtmIwlO6?= =?us-ascii?Q?AhXbe3CGu9xeDPuY3vh6nC5FVr68LUU9kIacNt9hg9GB+xdoTl3sfspauHIp?= =?us-ascii?Q?jlrccBviJ++oCNNrov4qfEUv6Jl5KY1hIMg7oGktG817yqHTbzjkc5c2PKV3?= =?us-ascii?Q?FzTlGKoKZ9pqlNkvle6BMqTEH4E2qoqfKd/vHogTh4pAj34rY1u1HhXn5n5V?= =?us-ascii?Q?9yh+PWy+jd0791zlTvlHUqF1WTVgurVj1uHZzaTkaW3Nw0JOM47RN+EHDfXY?= =?us-ascii?Q?Cu3jcYM5zb03YiTTBvBCQT18Th82dzcyo8/B8pPGPxt8eJ/u1D111weMpDMd?= =?us-ascii?Q?FahjrwOxwijMAC4es3zB254j7xHfcaWz0Ku/RYvXOn2P2Y5FoaQVk6CkuE0V?= =?us-ascii?Q?x9/gscXW4SpLXxU4eQpL2kk3cTTqp08xUSn02IL0j6WgyY/8ib7OmigCv2wN?= =?us-ascii?Q?smqbcJ84uZ9Wd0XpsgWDnGQ0YkbyZW5+BE7o1BcVRtkIRSt0Fk0g9fmoMJ0y?= =?us-ascii?Q?w4jBY+CWPgOnbgYqPdQT4nz/1vT9a3C84ZBx9JWrL7fcNMt8h+nA+C+gVHRn?= =?us-ascii?Q?8DPtAK4lUDc0gDyQYiQyURg6hhjuOBIntRRH0Cq+1/mdfxSu1m6DtMKWnWIZ?= =?us-ascii?Q?TfiwtN17FbAASNrW+Rd+3iiBKuxpF9VwrWDs6q01sAUxvPk2iv67EQ4zThrc?= =?us-ascii?Q?BjZqBPI4GjBPi2t7Ip7hlVgY?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4930.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe32fce2-c1d5-4190-e068-08d973a1c57d X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2021 14:54:48.8760 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7KvvxylMfyIc34xALB0sNlS8cQ1GDCWkm/9utK0MfxmPNFlj7PYBXul4CoXyMMf/QCChC3P4vN6wf8EVeYNvwA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR1101MB2270 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I remember that HII can tell the width of a string. Have you evaluated using HII? +@Bi, Dandan > -----Original Message----- > From: Gao, Zhichao > Sent: Thursday, September 9, 2021 3:26 PM > To: devel@edk2.groups.io > Cc: Wang, Jian J ; Liming Gao ; Ni, Ray > Subject: [PATCH V2] MdeModulePkg/BootManagerMenuApp: Limit string drawing= within one line >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3590 >=20 > Limit the draw box always within the screen's column and row. > Limit the string drawing within one line. >=20 > Change-Id: Ib7bd63cb07b23875a1e4f37ae80a422e1d5ed54f > Cc: Jian J Wang > Cc: Liming Gao > Cc: Ray Ni > Signed-off-by: Zhichao Gao > --- >=20 > V2: >=20 > Drop the change in UefiBootManagerLib in V1. >=20 > Add the limitation in BootManagerMenuApp instead. >=20 >=20 > .../BootManagerMenuApp/BootManagerMenu.c | 72 ++++++++++++++++++- > 1 file changed, 69 insertions(+), 3 deletions(-) >=20 > 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 >=20 > The application to show the Boot Manager Menu. >=20 >=20 >=20 > -Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
>=20 > +Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.
>=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 >=20 >=20 > **/ >=20 > @@ -45,9 +45,56 @@ PrintStringAt ( > IN CHAR16 *String >=20 > ) >=20 > { >=20 > + UINTN ScreenWidth; >=20 > + UINTN ScreenRows; >=20 > + CHAR16 *TurncateString; >=20 > + EFI_STATUS Status; >=20 > + UINTN ShowingLength; >=20 >=20 >=20 > gST->ConOut->SetCursorPosition (gST->ConOut, Column, Row); >=20 > - return Print (L"%s", String); >=20 > + >=20 > + gST->ConOut->QueryMode ( >=20 > + gST->ConOut, >=20 > + gST->ConOut->Mode->Mode, >=20 > + &ScreenWidth, >=20 > + &ScreenRows >=20 > + ); >=20 > + >=20 > + if (Column > (ScreenWidth - 1) || Row > (ScreenRows - 1)) { >=20 > + return 0; >=20 > + } >=20 > + >=20 > + if ((StrLen (String) + Column) > (ScreenWidth - 1)) { >=20 > + // >=20 > + // | - ScreenWidth - | >=20 > + // ...Column..................... >=20 > + // TurncateString length should leave one character for draw box and >=20 > + // require one character for string end. >=20 > + // >=20 > + ShowingLength =3D ScreenWidth - Column - 1; >=20 > + TurncateString =3D AllocatePool ((ShowingLength + 1) * sizeof (CHAR1= 6)); >=20 > + >=20 > + if (TurncateString =3D=3D NULL) { >=20 > + return 0; >=20 > + } >=20 > + >=20 > + Status =3D StrnCpyS (TurncateString, ShowingLength + 1, String, Show= ingLength - 3); >=20 > + >=20 > + if (EFI_ERROR (Status)) { >=20 > + FreePool (TurncateString); >=20 > + return 0; >=20 > + } >=20 > + >=20 > + *(TurncateString + ShowingLength - 3) =3D L'.'; >=20 > + *(TurncateString + ShowingLength - 2) =3D L'.'; >=20 > + *(TurncateString + ShowingLength - 1) =3D L'.'; >=20 > + *(TurncateString + ShowingLength) =3D L'\0'; >=20 > + ShowingLength =3D Print (L"%s", TurncateString); >=20 > + FreePool (TurncateString); >=20 > + return ShowingLength; >=20 > + } else { >=20 > + return Print (L"%s", String); >=20 > + } >=20 > } >=20 >=20 >=20 > /** >=20 > @@ -68,7 +115,22 @@ PrintCharAt ( > CHAR16 Character >=20 > ) >=20 > { >=20 > + UINTN ScreenWidth; >=20 > + UINTN ScreenRows; >=20 > + >=20 > gST->ConOut->SetCursorPosition (gST->ConOut, Column, Row); >=20 > + >=20 > + gST->ConOut->QueryMode ( >=20 > + gST->ConOut, >=20 > + gST->ConOut->Mode->Mode, >=20 > + &ScreenWidth, >=20 > + &ScreenRows >=20 > + ); >=20 > + >=20 > + if (Column > (ScreenWidth - 1) || Row > (ScreenRows - 1)) { >=20 > + return 0; >=20 > + } >=20 > + >=20 > return Print (L"%c", Character); >=20 > } >=20 >=20 >=20 > @@ -193,7 +255,11 @@ InitializeBootMenuScreen ( >=20 >=20 > MaxPrintRows =3D Row - 6; >=20 > UnSelectableItmes =3D TITLE_TOKEN_COUNT + 2 + HELP_TOKEN_COUNT + 2; >=20 > - BootMenuData->MenuScreen.Width =3D MaxStrWidth + 8; >=20 > + if (MaxStrWidth + 8 > Column) { >=20 > + BootMenuData->MenuScreen.Width =3D Column; >=20 > + } else { >=20 > + BootMenuData->MenuScreen.Width =3D MaxStrWidth + 8; >=20 > + } >=20 > if (BootMenuData->ItemCount + UnSelectableItmes > MaxPrintRows) { >=20 > BootMenuData->MenuScreen.Height =3D MaxPrintRows; >=20 > BootMenuData->ScrollBarControl.HasScrollBar =3D TRUE; >=20 > -- > 2.31.1.windows.1