From dd58b4a93fd202371faaca62c05e740bb1c088a9 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 7 Dec 2015 16:10:09 +0000 Subject: [PATCH] [USETUP] Center the current list item before drawing the list. #CORE-10659 #resolve svn path=/trunk/; revision=70287 --- reactos/base/setup/usetup/genlist.c | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/reactos/base/setup/usetup/genlist.c b/reactos/base/setup/usetup/genlist.c index 240df1cbebb..709b6f0f0e7 100644 --- a/reactos/base/setup/usetup/genlist.c +++ b/reactos/base/setup/usetup/genlist.c @@ -341,6 +341,51 @@ DrawScrollBarGenericList( } +static +VOID +CenterCurrentListItem( + PGENERIC_LIST List) +{ + PLIST_ENTRY Entry; + ULONG MaxVisibleItems, ItemCount, i; + + if ((List->Top == 0 && List->Bottom == 0) || + IsListEmpty(&List->ListHead) || + List->CurrentEntry == NULL) + return; + + MaxVisibleItems = (ULONG)(List->Bottom - List->Top - 1); + + ItemCount = 0; + Entry = List->ListHead.Flink; + while (Entry != &List->ListHead) + { + ItemCount++; + Entry = Entry->Flink; + } + + if (ItemCount > MaxVisibleItems) + { + Entry = &List->CurrentEntry->Entry; + for (i = 0; i < MaxVisibleItems / 2; i++) + { + if (Entry->Blink != &List->ListHead) + Entry = Entry->Blink; + } + + List->FirstShown = Entry; + + for (i = 0; i < MaxVisibleItems; i++) + { + if (Entry->Flink != &List->ListHead) + Entry = Entry->Flink; + } + + List->LastShown = Entry; + } +} + + VOID DrawGenericList( PGENERIC_LIST List, @@ -360,6 +405,8 @@ DrawGenericList( if (IsListEmpty(&List->ListHead)) return; + CenterCurrentListItem(List); + DrawListEntries(List); DrawScrollBarGenericList(List); }