parent
8c373fdb60
commit
675d1cbbdf
|
@ -247,9 +247,10 @@ function Text.keychord_press(State, chord)
|
|||
local line_cache = State.line_cache[#State.line_cache]
|
||||
State.screen_top1 = {line=#State.lines, pos=line_cache.screen_line_starting_pos[#line_cache.screen_line_starting_pos]}
|
||||
elseif Text.lt1(State.cursor1, State.screen_top1) then
|
||||
local top2 = Text.to2(State, State.screen_top1)
|
||||
top2 = Text.previous_screen_line(State, top2, State.left, State.right)
|
||||
State.screen_top1 = Text.to1(State, top2)
|
||||
State.screen_top1 = {
|
||||
line=State.cursor1.line,
|
||||
pos=Text.pos_at_start_of_screen_line(State, State.cursor1),
|
||||
}
|
||||
Text.redraw_all(State) -- if we're scrolling, reclaim all fragments to avoid memory leaks
|
||||
end
|
||||
Text.clear_screen_line_cache(State, State.cursor1.line)
|
||||
|
@ -465,9 +466,11 @@ function Text.up(State)
|
|||
--? print('cursor pos is now '..tostring(State.cursor1.pos))
|
||||
end
|
||||
if Text.lt1(State.cursor1, State.screen_top1) then
|
||||
local top2 = Text.to2(State, State.screen_top1)
|
||||
top2 = Text.previous_screen_line(State, top2)
|
||||
State.screen_top1 = Text.to1(State, top2)
|
||||
State.screen_top1 = {
|
||||
line=State.cursor1.line,
|
||||
pos=Text.pos_at_start_of_screen_line(State, State.cursor1),
|
||||
}
|
||||
Text.redraw_all(State) -- if we're scrolling, reclaim all fragments to avoid memory leaks
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -606,9 +609,11 @@ function Text.left(State)
|
|||
end
|
||||
end
|
||||
if Text.lt1(State.cursor1, State.screen_top1) then
|
||||
local top2 = Text.to2(State, State.screen_top1)
|
||||
top2 = Text.previous_screen_line(State, top2)
|
||||
State.screen_top1 = Text.to1(State, top2)
|
||||
State.screen_top1 = {
|
||||
line=State.cursor1.line,
|
||||
pos=Text.pos_at_start_of_screen_line(State, State.cursor1),
|
||||
}
|
||||
Text.redraw_all(State) -- if we're scrolling, reclaim all fragments to avoid memory leaks
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1251,6 +1251,28 @@ function test_up_arrow_scrolls_up_by_one_line()
|
|||
App.screen.check(y, 'ghi', 'screen:3')
|
||||
end
|
||||
|
||||
function test_up_arrow_scrolls_up_by_one_line_skipping_drawing()
|
||||
-- display lines 3/4/5 with a drawing just off screen at line 2
|
||||
App.screen.init{width=120, height=60}
|
||||
Editor_state = edit.initialize_test_state()
|
||||
Editor_state.lines = load_array{'abc', '```lines', '```', 'def', 'ghi', 'jkl'}
|
||||
Text.redraw_all(Editor_state)
|
||||
Editor_state.cursor1 = {line=3, pos=1}
|
||||
Editor_state.screen_top1 = {line=3, pos=1}
|
||||
Editor_state.screen_bottom1 = {}
|
||||
edit.draw(Editor_state)
|
||||
local y = Editor_state.top
|
||||
App.screen.check(y, 'def', 'baseline/screen:1')
|
||||
y = y + Editor_state.line_height
|
||||
App.screen.check(y, 'ghi', 'baseline/screen:2')
|
||||
y = y + Editor_state.line_height
|
||||
App.screen.check(y, 'jkl', 'baseline/screen:3')
|
||||
-- after hitting the up arrow the screen scrolls up to previous text line
|
||||
edit.run_after_keychord(Editor_state, 'up')
|
||||
check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
|
||||
check_eq(Editor_state.cursor1.line, 1, 'cursor')
|
||||
end
|
||||
|
||||
function test_up_arrow_scrolls_up_by_one_screen_line()
|
||||
-- display lines starting from second screen line of a line
|
||||
App.screen.init{width=Editor_state.left+30, height=60}
|
||||
|
|
23
text.lua
23
text.lua
|
@ -230,9 +230,10 @@ function Text.keychord_press(State, chord)
|
|||
local line_cache = State.line_cache[#State.line_cache]
|
||||
State.screen_top1 = {line=#State.lines, pos=line_cache.screen_line_starting_pos[#line_cache.screen_line_starting_pos]}
|
||||
elseif Text.lt1(State.cursor1, State.screen_top1) then
|
||||
local top2 = Text.to2(State, State.screen_top1)
|
||||
top2 = Text.previous_screen_line(State, top2, State.left, State.right)
|
||||
State.screen_top1 = Text.to1(State, top2)
|
||||
State.screen_top1 = {
|
||||
line=State.cursor1.line,
|
||||
pos=Text.pos_at_start_of_screen_line(State, State.cursor1),
|
||||
}
|
||||
Text.redraw_all(State) -- if we're scrolling, reclaim all fragments to avoid memory leaks
|
||||
end
|
||||
Text.clear_screen_line_cache(State, State.cursor1.line)
|
||||
|
@ -448,9 +449,11 @@ function Text.up(State)
|
|||
--? print('cursor pos is now '..tostring(State.cursor1.pos))
|
||||
end
|
||||
if Text.lt1(State.cursor1, State.screen_top1) then
|
||||
local top2 = Text.to2(State, State.screen_top1)
|
||||
top2 = Text.previous_screen_line(State, top2)
|
||||
State.screen_top1 = Text.to1(State, top2)
|
||||
State.screen_top1 = {
|
||||
line=State.cursor1.line,
|
||||
pos=Text.pos_at_start_of_screen_line(State, State.cursor1),
|
||||
}
|
||||
Text.redraw_all(State) -- if we're scrolling, reclaim all fragments to avoid memory leaks
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -589,9 +592,11 @@ function Text.left(State)
|
|||
end
|
||||
end
|
||||
if Text.lt1(State.cursor1, State.screen_top1) then
|
||||
local top2 = Text.to2(State, State.screen_top1)
|
||||
top2 = Text.previous_screen_line(State, top2)
|
||||
State.screen_top1 = Text.to1(State, top2)
|
||||
State.screen_top1 = {
|
||||
line=State.cursor1.line,
|
||||
pos=Text.pos_at_start_of_screen_line(State, State.cursor1),
|
||||
}
|
||||
Text.redraw_all(State) -- if we're scrolling, reclaim all fragments to avoid memory leaks
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1281,6 +1281,28 @@ function test_up_arrow_scrolls_up_by_one_line()
|
|||
App.screen.check(y, 'ghi', 'screen:3')
|
||||
end
|
||||
|
||||
function test_up_arrow_scrolls_up_by_one_line_skipping_drawing()
|
||||
-- display lines 3/4/5 with a drawing just off screen at line 2
|
||||
App.screen.init{width=120, height=60}
|
||||
Editor_state = edit.initialize_test_state()
|
||||
Editor_state.lines = load_array{'abc', '```lines', '```', 'def', 'ghi', 'jkl'}
|
||||
Text.redraw_all(Editor_state)
|
||||
Editor_state.cursor1 = {line=3, pos=1}
|
||||
Editor_state.screen_top1 = {line=3, pos=1}
|
||||
Editor_state.screen_bottom1 = {}
|
||||
edit.draw(Editor_state)
|
||||
local y = Editor_state.top
|
||||
App.screen.check(y, 'def', 'baseline/screen:1')
|
||||
y = y + Editor_state.line_height
|
||||
App.screen.check(y, 'ghi', 'baseline/screen:2')
|
||||
y = y + Editor_state.line_height
|
||||
App.screen.check(y, 'jkl', 'baseline/screen:3')
|
||||
-- after hitting the up arrow the screen scrolls up to previous text line
|
||||
edit.run_after_keychord(Editor_state, 'up')
|
||||
check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
|
||||
check_eq(Editor_state.cursor1.line, 1, 'cursor')
|
||||
end
|
||||
|
||||
function test_up_arrow_scrolls_up_by_one_screen_line()
|
||||
-- display lines starting from second screen line of a line
|
||||
App.screen.init{width=Editor_state.left+30, height=60}
|
||||
|
|
Loading…
Reference in New Issue