From 212026861fc9fb80455df21f14ed5a641465bd50 Mon Sep 17 00:00:00 2001 From: Robob27 Date: Tue, 14 Feb 2023 20:33:33 -0500 Subject: [PATCH 1/2] WIP list fix --- library/lua/gui/widgets.lua | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index ffe26936d..9343be548 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -1611,6 +1611,15 @@ function List:setChoices(choices, selected) end self:setSelected(selected) + + -- Check if page_top needs to be adjusted + if #self.choices - self.page_size < 0 then + self.page_top = 1 + elseif self.selected <= math.floor(self.page_size / 2) then + self.page_top = 1 + elseif self.selected >= #self.choices - math.floor(self.page_size / 2) then + self.page_top = #self.choices - self.page_size + 1 + end end function List:setSelected(selected) @@ -1651,10 +1660,26 @@ local function update_list_scrollbar(list) end function List:postComputeFrame(body) - self.page_size = math.max(1, math.floor(body.height / self.row_height)) - if #self.choices - self.page_size < 0 then + local row_count = math.floor(body.height / self.row_height) + self.page_size = math.max(1, row_count) + + local num_choices = #self.choices + if num_choices == 0 then self.page_top = 1 + update_list_scrollbar(self) + return end + + local max_page_top = math.max(1, num_choices - row_count + 1) + + if self.selected > num_choices - row_count then + self.page_top = max_page_top + elseif self.selected < self.page_top then + self.page_top = self.selected + else + self.page_top = math.max(1, self.selected - row_count + 1) + end + update_list_scrollbar(self) end From 57d2edc84ede3f39b77f3f5da229a803a65ee7e1 Mon Sep 17 00:00:00 2001 From: Myk Date: Fri, 19 May 2023 12:12:52 -0700 Subject: [PATCH 2/2] Update widgets.lua --- library/lua/gui/widgets.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index 6610dcedb..26c949805 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -1664,9 +1664,9 @@ function List:setChoices(choices, selected) -- Check if page_top needs to be adjusted if #self.choices - self.page_size < 0 then self.page_top = 1 - elseif self.selected <= math.floor(self.page_size / 2) then + elseif self.selected <= (self.page_size // 2) then self.page_top = 1 - elseif self.selected >= #self.choices - math.floor(self.page_size / 2) then + elseif self.selected >= #self.choices - (self.page_size // 2) then self.page_top = #self.choices - self.page_size + 1 end end @@ -1709,7 +1709,7 @@ local function update_list_scrollbar(list) end function List:postComputeFrame(body) - local row_count = math.floor(body.height / self.row_height) + local row_count = body.height // self.row_height self.page_size = math.max(1, row_count) local num_choices = #self.choices