a few tests for pageup, and a bugfix

It wasn't screen-line aware. Now it is.
This commit is contained in:
Kartik K. Agaram 2022-05-23 20:57:56 -07:00
parent 6b093fe3b4
commit b3251b23b5
2 changed files with 107 additions and 10 deletions

View File

@ -68,6 +68,9 @@ App.screen.width, App.screen.height = love.window.getMode()
App.screen.width = App.screen.width-100
App.screen.height = App.screen.height-100
love.window.setMode(App.screen.width, App.screen.height)
--? App.screen.width = 120
--? App.screen.height = 200
--? love.window.setMode(App.screen.width, App.screen.height)
Cursor_x, Cursor_y = 0, 0 -- in pixels
@ -76,6 +79,7 @@ Previous_drawing_mode = nil
-- maximum width available to either text or drawings, in pixels
Line_width = math.floor(App.screen.width/2/40)*40
--? Line_width = 100
Zoom = 1.5
@ -238,20 +242,24 @@ function App.keychord_pressed(chord)
--? print('top now', Screen_top1.line)
elseif chord == 'pageup' then
-- duplicate some logic from love.draw
local y = App.screen.height
while y >= 0 do
if Screen_top1.line == 1 then break end
y = y - math.floor(15*Zoom)
if Lines[Screen_top1.line].mode == 'drawing' then
y = y - Drawing.pixels(Lines[Screen_top1.line].h)
local top2 = Text.to2(Screen_top1)
--? print(App.screen.height)
local y = App.screen.height - math.floor(15*Zoom)
while y >= 15 do
--? print(y, top2.line)
if Screen_top1.line == 1 and Screen_top1.pos == 1 then break end
if Lines[Screen_top1.line].mode == 'text' then
y = y - math.floor(15*Zoom)
elseif Lines[Screen_top1.line].mode == 'drawing' then
y = y - 20 - Drawing.pixels(Lines[Screen_top1.line].h)
end
Screen_top1.line = Screen_top1.line - 1
end
if Cursor1.line ~= Screen_top1.line then
Cursor1.pos = 1
top2 = Text.previous_screen_line(top2)
end
Screen_top1 = Text.to1(top2)
Cursor1.line = Screen_top1.line
Cursor1.pos = Screen_top1.pos
Text.move_cursor_down_to_next_text_line_while_scrolling_again_if_necessary()
--? print(Cursor1.line, Cursor1.pos, Screen_top1.line, Screen_top1.pos)
else
Text.keychord_pressed(chord)
end

View File

@ -418,6 +418,95 @@ function test_up_arrow_scrolls_up_to_final_screen_line()
check_eq(Cursor1.pos, 5, 'F - test_up_arrow_scrolls_up_to_final_screen_line/cursor')
end
function test_pageup()
io.write('\ntest_pageup')
App.screen.init{width=120, height=45}
Lines = load_array{'abc', 'def', 'ghi'}
Line_width = App.screen.width
Cursor1 = {line=2, pos=1}
Screen_top1 = {line=2, pos=1}
Screen_bottom1 = {}
Zoom = 1
local screen_top_margin = 15 -- pixels
local line_height = math.floor(15*Zoom) -- pixels
-- initially the last two lines are displayed
App.draw()
local y = screen_top_margin
App.screen.check(y, 'def', 'F - test_pageup/baseline/screen:1')
y = y + line_height
App.screen.check(y, 'ghi', 'F - test_pageup/baseline/screen:2')
-- after pageup the cursor goes to first line
App.run_after_keychord('pageup')
check_eq(Screen_top1.line, 1, 'F - test_pageup/screen_top')
check_eq(Cursor1.line, 1, 'F - test_pageup/cursor')
y = screen_top_margin
App.screen.check(y, 'abc', 'F - test_pageup/screen:1')
y = y + line_height
App.screen.check(y, 'def', 'F - test_pageup/screen:2')
end
function test_pageup_scrolls_up_by_screen_line()
io.write('\ntest_pageup_scrolls_up_by_screen_line')
-- display the first three lines with the cursor on the bottom line
App.screen.init{width=25+30, height=60}
Lines = load_array{'abc def', 'ghi', 'jkl', 'mno'}
Line_width = App.screen.width
Cursor1 = {line=2, pos=1}
Screen_top1 = {line=2, pos=1}
Screen_bottom1 = {}
Zoom = 1
local screen_top_margin = 15 -- pixels
local line_height = math.floor(15*Zoom) -- pixels
App.draw()
local y = screen_top_margin
App.screen.check(y, 'ghi', 'F - test_pageup_scrolls_up_by_screen_line/baseline/screen:1')
y = y + line_height
App.screen.check(y, 'jkl', 'F - test_pageup_scrolls_up_by_screen_line/baseline/screen:2')
y = y + line_height
App.screen.check(y, 'mno', 'F - test_pageup_scrolls_up_by_screen_line/baseline/screen:3') -- line wrapping includes trailing whitespace
-- after hitting the page-up key the screen scrolls up to top
App.run_after_keychord('pageup')
check_eq(Screen_top1.line, 1, 'F - test_pageup_scrolls_up_by_screen_line/screen_top')
check_eq(Cursor1.line, 1, 'F - test_pageup_scrolls_up_by_screen_line/cursor:line')
check_eq(Cursor1.pos, 1, 'F - test_pageup_scrolls_up_by_screen_line/cursor:pos')
y = screen_top_margin
App.screen.check(y, 'abc ', 'F - test_pageup_scrolls_up_by_screen_line/screen:1')
y = y + line_height
App.screen.check(y, 'def', 'F - test_pageup_scrolls_up_by_screen_line/screen:2')
y = y + line_height
App.screen.check(y, 'ghi', 'F - test_pageup_scrolls_up_by_screen_line/screen:3')
end
function test_pageup_scrolls_up_from_middle_screen_line()
io.write('\ntest_pageup_scrolls_up_from_middle_screen_line')
-- display a few lines starting from the middle of a line (Cursor1.pos > 1)
App.screen.init{width=25+30, height=60}
Lines = load_array{'abc def', 'ghi jkl', 'mno'}
Line_width = App.screen.width
Cursor1 = {line=2, pos=5}
Screen_top1 = {line=2, pos=5}
Screen_bottom1 = {}
Zoom = 1
local screen_top_margin = 15 -- pixels
local line_height = math.floor(15*Zoom) -- pixels
App.draw()
local y = screen_top_margin
App.screen.check(y, 'jkl', 'F - test_pageup_scrolls_up_from_middle_screen_line/baseline/screen:2')
y = y + line_height
App.screen.check(y, 'mno', 'F - test_pageup_scrolls_up_from_middle_screen_line/baseline/screen:3') -- line wrapping includes trailing whitespace
-- after hitting the page-up key the screen scrolls up to top
App.run_after_keychord('pageup')
check_eq(Screen_top1.line, 1, 'F - test_pageup_scrolls_up_from_middle_screen_line/screen_top')
check_eq(Cursor1.line, 1, 'F - test_pageup_scrolls_up_from_middle_screen_line/cursor:line')
check_eq(Cursor1.pos, 1, 'F - test_pageup_scrolls_up_from_middle_screen_line/cursor:pos')
y = screen_top_margin
App.screen.check(y, 'abc ', 'F - test_pageup_scrolls_up_from_middle_screen_line/screen:1')
y = y + line_height
App.screen.check(y, 'def', 'F - test_pageup_scrolls_up_from_middle_screen_line/screen:2')
y = y + line_height
App.screen.check(y, 'ghi ', 'F - test_pageup_scrolls_up_from_middle_screen_line/screen:3')
end
function Text.compute_fragments(line, line_width)
--? print('compute_fragments')
line.fragments = {}