From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web08.2353.1632281280454592573 for ; Tue, 21 Sep 2021 20:28:00 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=lLVloMnd; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: ray.ni@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10114"; a="203001924" X-IronPort-AV: E=Sophos;i="5.85,312,1624345200"; d="scan'208";a="203001924" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2021 20:27:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,312,1624345200"; d="scan'208";a="585238988" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga004.jf.intel.com with ESMTP; 21 Sep 2021 20:27:59 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 21 Sep 2021 20:27:58 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 21 Sep 2021 20:27:58 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Tue, 21 Sep 2021 20:27:58 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.174) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Tue, 21 Sep 2021 20:27:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kXN6aW0mEDyTIVtLoHMpYVSRkN1Q8LC3XDvJq5Y/SIpE1Reg16Wx4qRfOPp3sd598i/3JB+C0fwzT1xxw9noIUTqK5nSRU6Y0qBXBIuPegpnQybVI+T5tyGgmYLf3Qs/7czaOUTBTYJm1Nvz3DCPiFJXDKc5uow+8yuxzReaeeCE0Ka7IRluiBDcajERuk1FfAlHzC+Ezl6dwE6KFlyyd8aJ0R5020MQiplmZ7liyoz+syjkh/lg28YlGZd7aY3SIUF6t0QI91fC39o13hj4US5JyAus9HBFttGdi4hsnmy/Jvunczi+Q87KEeWpsqpXa4+bg1njyI9gOkmgd/mohA== 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=1YjqJ9NpIW6YT8cDlyd4Fj+oywoAv+meYgTOJDY5GmU=; b=AD1V6W/wkj6O30ZycEgELM2w+L28iSMPGYkAeMI6A8Nfz764FbY/x60IRZDosRLZ5a0JskKBRg3qIrc6iJIYoz5O0/zhpEwy/dbSCwRSDaDnEUL+jlVCyJMUs8ADSoJ7lyKbteistY9hjCmyJ7nCHyBhM52ofYulP2uH/r5q7aGwSfX2htHYXxKNR6bJSj82Y/6dyB/wEn0uUeAwIoWDh4sUS0nv+3CJz4G268vRzcoklhWmtQOYTYtCHN5+Gd/B4eul3dktUdHtmwdSEc0XuGSd5oltVIE2EIvyXfr6Nqobf9pbvr5vPW1hfphXsYB6w0eJV2GTN1G699kxvMzd9Q== 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=1YjqJ9NpIW6YT8cDlyd4Fj+oywoAv+meYgTOJDY5GmU=; b=lLVloMndNKjS9Zc3bzldm6s4CxeSb0zxROifSdDc3NuP4UJTj30JSusuOetGjjdgQzg8ZoNVsavYe3fblza68ug5G427q4JA8sW02lrzJ/4utel70nN9v7HZvZrTNBjWdD80dfQwdQPlxapUACHvqmuJ3wfmy0gfCpLiDwR0UYA= Received: from CY4PR1101MB2072.namprd11.prod.outlook.com (2603:10b6:910:1d::15) by CY4PR1101MB2198.namprd11.prod.outlook.com (2603:10b6:910:1d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.16; Wed, 22 Sep 2021 03:27:56 +0000 Received: from CY4PR1101MB2072.namprd11.prod.outlook.com ([fe80::7dc5:34b5:bbff:832f]) by CY4PR1101MB2072.namprd11.prod.outlook.com ([fe80::7dc5:34b5:bbff:832f%8]) with mapi id 15.20.4523.020; Wed, 22 Sep 2021 03:27:56 +0000 From: "Ni, Ray" To: "Gao, Zhichao" , "devel@edk2.groups.io" CC: "Wang, Jian J" , Liming Gao 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+AtRhauveLWA Date: Wed, 22 Sep 2021 03:27:56 +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-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: 8e4566f3-9d8d-4ff9-fd0f-08d97d78f833 x-ms-traffictypediagnostic: CY4PR1101MB2198: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:660; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dsuf8fVkYSGB+BSghC3svaz3VkNr4N4ncqwa6c2tanwmWNPuQwTaA4FMLw+c5B7Z7rWJIGEN/hbSnISriCSXgnOgm0xdpeiljqqh4CZq8mZWTvdxem9PPhiyPQu67Z/ovYM3brHaGxmsd8jLtiIrM71F1tRhck6JRLY582xvXFVrllmhASiWnymSTjqCxQALxFSdByHnJgtdzFUTH89cwOfbmvXq2AwtE+yZ7dzGauQMiLa3KcukToKHnBFyRh3hN0THSHt+dhq5V+ZiLP1gBKIOXNcXQjZ7z70R7v896xA+khhuUhZx4oUYVPW0JVIMzr5Gpn77hhxt0d5gkphKNmtma4ZPemn+lCtHC1mTu2eZvq6JZ+jK3riyrWTIWzBY+TklLqwARFCCjr1FfMwR27PZwM1r3EFgygnBd6EOKgJi2AnN9hleOYUWe23MSWNvGfbue1rL7idyOfLAvbTQnKSpK7vekuCc2AcP5Dn/uFNgats9LiqdCaRaZoe+5baG2Z+ngDEkisfCcnXW8UEkQhwLx/j2M6+VNfm27L59jdM0v4IyVYg5Ayh8xKNjPfX74ThCKnq75oZWIiC68Dot+XlnesS+qOJLAfS6o/Gx1+vm5jutlTQTaOgjOfEKl7L7Joswnof3IvMbsPF83+L3SHnd5mN8UEce06u6gUFKan9fR0Goa91pbmEro25q9ZVaS5DuuhknGaVY3X1CfzsoaqHeOxp4KaNzCZNRxhBHfL2FRbA8jCs1sCtfx7RaJGI6pByz2KJlUzkD7yppuq54m1kOr/XVUeSdrg0ORX37iX0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR1101MB2072.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(64756008)(66446008)(66476007)(71200400001)(66946007)(76116006)(66556008)(53546011)(508600001)(83380400001)(38070700005)(52536014)(86362001)(2906002)(8676002)(9686003)(55016002)(110136005)(38100700002)(966005)(316002)(54906003)(5660300002)(186003)(8936002)(7696005)(6506007)(33656002)(122000001)(4326008)(26005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?EDcyC5pbOVAeo8sRp+iEBQOEHgLbfEu46Xp0RCpVdgyV05xPPW0wIEnsNu5T?= =?us-ascii?Q?Y0hMnuxZkgOcdGzjJgldfjJRH9TB+dFXctZq6DP2h5Sfha169B1UIrTbLblm?= =?us-ascii?Q?8FS4sgBCsqnA/5xdmtS6i9YBo5Q12eNr+/cY8FykgxVEn3lRTmN8xeCKGYCP?= =?us-ascii?Q?4ZiycsrNHVrBJrEDdZlMSm08RW1k2Z7qjCC7BtP679HR183JCNQtvB1oJzir?= =?us-ascii?Q?93bqpHEizqO2lXXHnkf97vcpIQHZJ1biPziJ6Xy7jWfdM9rOkqRQE3Jcrpa5?= =?us-ascii?Q?Cb4xP2lZKbaiDU7VWeFuKEhSve9pTnoipC0u61avl0hK7qRHW+YTtqtytXym?= =?us-ascii?Q?e4NyOHf1ZBG9LXyqESureLSYhgvF4QeGl4rXd78VzwLB5D2c/l9djgGsHtMe?= =?us-ascii?Q?zxXB2RYb7FnNpdBXqfdJMEiIlIqlUrmXWXdSRRcKzo7RFserHqHdWsmq0o9K?= =?us-ascii?Q?A59yqJluVXLYWVCL3OJrTwxh7QjTzodDelY8Soqf1X0+V/dGUlAqg2GCGpXf?= =?us-ascii?Q?bBo3Z3of+1h3BC1WT3HlXv1xFwObpuY3TXZN4zYQDL+37mp4mIRzqnRKWrUz?= =?us-ascii?Q?qoPN02xZsUu3v1aZrix9zOoBNbUynfwjSMeeazid8PSdg0TQBRnVVJJNaKCP?= =?us-ascii?Q?Rje5c8mq5qXBiMUQnCOlLt/we5PnY1yw3fqWmgZL076fLB9aflABMP5Tk0qq?= =?us-ascii?Q?X+Rh6TIzVSxak5YY6La9iER4mjSXnohbfDd/8yWnONb2maPFiagMdaYCq/Lt?= =?us-ascii?Q?Vm/rzO/VutDscy+ORKloNQxGRpCn08Qz/4tjE1vug8vslOGUaxgd3cFftLMZ?= =?us-ascii?Q?HQejfS0rP5H13Np3qKfM8sIk+gB/q0mtlbH9PjsFkVMItM9iLqCewGUSY+KY?= =?us-ascii?Q?QSmdHLn4pbyoZqHjyposQRVpKOcOqLPPFHPIZesjm/h3z8esu62HnUS2Lc0C?= =?us-ascii?Q?Z0+lnvNa8sEvmucUfk/mSuRk1Dx+f+6aXM/xQa7IKmI2aP9bfSfDLnG/9aMc?= =?us-ascii?Q?ccpBqiLxptAxNka3I28ZgyKYeAhu7R8JG3B26WMnRT5CE75IjaqNV8DhBUy6?= =?us-ascii?Q?snwc6nC5QGje/466Vkld8yww48yvgbG9ZiNmym3GdWbZHth5p7doKLbVRkE5?= =?us-ascii?Q?feSNbAY28h1rnxX/2SN6MsLtu907VW936abfHBamk8bmcfUwrNZOs5okZWrG?= =?us-ascii?Q?QkxtEGPKupUoK+6A3VqS+3Aa2suEA1OaHvPc7aA7vK0IeWryjNykramz774x?= =?us-ascii?Q?3iELIbNnR2wIkUD4uX3hlUOxXIFzaQ4qlfPonsOAc2k7Bu91SuUtp/gwYoLf?= =?us-ascii?Q?p0klseERU5ofQArUZ30e2hHi?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR1101MB2072.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e4566f3-9d8d-4ff9-fd0f-08d97d78f833 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Sep 2021 03:27:56.2280 (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: f95im/6QdD8YRQMkWZQ13cPpFQOGjMSf2cvCcjmdon7FLPHeoTTCGdmHln5yl0YYMolkl7Um81SMr0ygcpjp8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1101MB2198 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 Reviewed-by: Ray Ni -----Original Message----- From: Gao, Zhichao =20 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 w= ithin one line REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3590 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 Cc: Liming Gao Cc: Ray Ni Signed-off-by: Zhichao Gao --- 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. =20 -Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
+Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 **/ @@ -45,9 +45,56 @@ PrintStringAt ( IN CHAR16 *String ) { + UINTN ScreenWidth; + UINTN ScreenRows; + CHAR16 *TurncateString; + EFI_STATUS Status; + UINTN ShowingLength; =20 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 =3D ScreenWidth - Column - 1; + TurncateString =3D AllocatePool ((ShowingLength + 1) * sizeof (CHAR16)= ); + + if (TurncateString =3D=3D NULL) { + return 0; + } + + Status =3D StrnCpyS (TurncateString, ShowingLength + 1, String, Showin= gLength - 3); + + if (EFI_ERROR (Status)) { + FreePool (TurncateString); + return 0; + } + + *(TurncateString + ShowingLength - 3) =3D L'.'; + *(TurncateString + ShowingLength - 2) =3D L'.'; + *(TurncateString + ShowingLength - 1) =3D L'.'; + *(TurncateString + ShowingLength) =3D L'\0'; + ShowingLength =3D Print (L"%s", TurncateString); + FreePool (TurncateString); + return ShowingLength; + } else { + return Print (L"%s", String); + } } =20 /** @@ -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); } =20 @@ -193,7 +255,11 @@ InitializeBootMenuScreen ( =20 MaxPrintRows =3D Row - 6; UnSelectableItmes =3D TITLE_TOKEN_COUNT + 2 + HELP_TOKEN_COUNT + 2; - BootMenuData->MenuScreen.Width =3D MaxStrWidth + 8; + if (MaxStrWidth + 8 > Column) { + BootMenuData->MenuScreen.Width =3D Column; + } else { + BootMenuData->MenuScreen.Width =3D MaxStrWidth + 8; + } if (BootMenuData->ItemCount + UnSelectableItmes > MaxPrintRows) { BootMenuData->MenuScreen.Height =3D MaxPrintRows; BootMenuData->ScrollBarControl.HasScrollBar =3D TRUE; --=20 2.31.1.windows.1