support scrolling to the beginning or end in Label

develop
Myk Taylor 2023-01-23 02:15:45 -08:00
parent 8fbaf169a4
commit a6b3de1afb
No known key found for this signature in database
2 changed files with 7 additions and 3 deletions

@ -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
------------------

@ -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