From a6b3de1afbff256e01aa8efe4c6a40bd51122dfe Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Mon, 23 Jan 2023 02:15:45 -0800 Subject: [PATCH] support scrolling to the beginning or end in Label --- docs/dev/Lua API.rst | 4 ++-- library/lua/gui/widgets.lua | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/dev/Lua API.rst b/docs/dev/Lua API.rst index 8b2d8b513..c696248ab 100644 --- a/docs/dev/Lua API.rst +++ b/docs/dev/Lua API.rst @@ -4684,8 +4684,8 @@ The Label widget implements the following methods: This method takes the number of lines to scroll as positive or negative integers or one of the following keywords: ``+page``, ``-page``, - ``+halfpage``, or ``-halfpage``. It returns the number of lines that were - actually scrolled (negative for scrolling up). + ``+halfpage``, ``-halfpage``, ``home``, or ``end``. It returns the number of + lines that were actually scrolled (negative for scrolling up). WrappedLabel class ------------------ diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index f56eff096..f0129ffe3 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -1315,6 +1315,7 @@ end function Label:scroll(nlines) if not nlines then return end + local text_height = math.max(1, self:getTextHeight()) if type(nlines) == 'string' then if nlines == '+page' then nlines = self.frame_body.height @@ -1324,12 +1325,15 @@ function Label:scroll(nlines) nlines = math.ceil(self.frame_body.height/2) elseif nlines == '-halfpage' then nlines = -math.ceil(self.frame_body.height/2) + elseif nlines == 'home' then + nlines = 1 - self.start_line_num + elseif nlines == 'end' then + nlines = text_height else error(('unhandled scroll keyword: "%s"'):format(nlines)) end end local n = self.start_line_num + nlines - local text_height = math.max(1, self:getTextHeight()) n = math.min(n, text_height - self.frame_body.height + 1) n = math.max(n, 1) nlines = n - self.start_line_num