From aaff2c6f98980f7566a003fb21b45449a3019c60 Mon Sep 17 00:00:00 2001 From: MikeBeaton Date: Mon, 28 Jun 2021 00:58:12 +0100 Subject: [PATCH] OpenCanopy: Fix view init when default entry beyond right of screen https://github.com/acidanthera/bugtracker/issues/1703 --- Changelog.md | 1 + Platform/OpenCanopy/Views/BootPicker.c | 34 ++++++-------------------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/Changelog.md b/Changelog.md index 1d1dd870..9a2ebece 100644 --- a/Changelog.md +++ b/Changelog.md @@ -17,6 +17,7 @@ OpenCore Changelog - Fixed DEBUG ASSERT on pressing change entry keys with single boot entry in OpenCanopy - Added recommended `Apple12` and `Windows11` flavours - Added `TpmInfo` tool to DEBUG TPM status +- Fixed incorrect OpenCanopy initial display when default entry beyond right of screen #### v0.7.0 - Fixed NVRAM reset on firmware with write-protected `BootOptionSupport` diff --git a/Platform/OpenCanopy/Views/BootPicker.c b/Platform/OpenCanopy/Views/BootPicker.c index f7488e79..7a327c58 100644 --- a/Platform/OpenCanopy/Views/BootPicker.c +++ b/Platform/OpenCanopy/Views/BootPicker.c @@ -1997,41 +1997,21 @@ BootPickerViewLateInitialize ( IN UINT8 DefaultIndex ) { - UINT32 Index; - INT64 ScrollOffset; CONST GUI_VOLUME_ENTRY *BootEntry; ASSERT (DefaultIndex < mBootPicker.Hdr.Obj.NumChildren); - ScrollOffset = InternelBootPickerScrollSelected (); + mBootPicker.SelectedIndex = DefaultIndex; + // - // If ScrollOffset is non-0, the selected entry will be aligned left- or - // right-most. The view holds a discrete amount of entries, so cut-offs are - // impossible. + // If more entries than screen width, firstly align left-most entry + // then scroll from there as needed to bring default entry on screen // - if (ScrollOffset == 0) { - // - // Find the first entry that is fully visible. - // - for (Index = 0; Index < mBootPicker.Hdr.Obj.NumChildren; ++Index) { - // - // Move the first partially visible boot entry to the very left to prevent - // cut-off entries. This only applies when entries overflow. - // - BootEntry = InternalGetVolumeEntry (Index); - if (mBootPicker.Hdr.Obj.OffsetX + BootEntry->Hdr.Obj.OffsetX >= 0) { - // - // Move the cut-off entry on-screen. - // - ScrollOffset = -ScrollOffset; - break; - } - - ScrollOffset = mBootPicker.Hdr.Obj.OffsetX + BootEntry->Hdr.Obj.OffsetX; - } + if (mBootPicker.Hdr.Obj.OffsetX < 0) { + mBootPicker.Hdr.Obj.OffsetX = 0; + mBootPicker.Hdr.Obj.OffsetX = InternelBootPickerScrollSelected (); } - mBootPicker.Hdr.Obj.OffsetX += ScrollOffset; // // If the scroll buttons are hidden, the intro animation will update them // implicitly. -- GitLab