change how we handle clicks above top margin

This commit is contained in:
Kartik K. Agaram 2023-06-03 10:36:05 -07:00
parent 541519a998
commit 3114176ebd
4 changed files with 34 additions and 24 deletions

View File

@ -361,6 +361,7 @@ function App.run_tests()
for _,name in ipairs(sorted_names) do
App.initialize_for_test()
--? print('=== '..name)
--? _G[name]()
xpcall(_G[name], function(err) prepend_debug_info_to_test_failure(name, err) end)
end
-- clean up all test methods

View File

@ -227,6 +227,17 @@ function edit.mouse_press(State, x,y, mouse_button)
return
end
if y < State.top then
State.old_cursor1 = State.cursor1
State.old_selection1 = State.selection1
State.mousepress_shift = App.shift_down()
State.selection1 = {
line=1,
pos=1,
}
return
end
for line_index,line in ipairs(State.lines) do
if line.mode == 'text' then
if Text.in_line(State, line_index, x,y) then

View File

@ -74,6 +74,9 @@ function Text.mouse_pos(State)
end
function Text.to_pos(State, x,y)
if y < State.line_cache[State.screen_top1.line].starty then
return State.screen_top1.line, State.screen_top1.pos
end
for line_index,line in ipairs(State.lines) do
if line.mode == 'text' then
if Text.in_line(State, line_index, x,y) then

View File

@ -1,4 +1,6 @@
-- major tests for text editing flows
-- Arguably this should be called edit_tests.lua,
-- but that would mess up the git blame at this point.
function test_initial_state()
App.screen.init{width=120, height=60}
@ -828,6 +830,23 @@ function test_select_text_using_mouse()
check_eq(Editor_state.cursor1.pos, 4, 'cursor:pos')
end
function test_select_text_using_mouse_starting_above_text()
App.screen.init{width=50, height=60}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', 'def', 'xyz'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=1, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
Editor_state.selection1 = {}
edit.draw(Editor_state) -- populate line_cache.starty for each line Editor_state.line_cache
-- press mouse above first line of text
edit.run_after_mouse_press(Editor_state, Editor_state.left+8,5, 1)
check(Editor_state.selection1.line ~= nil, 'selection:line-not-nil')
check_eq(Editor_state.selection1.line, 1, 'selection:line')
check_eq(Editor_state.selection1.pos, 1, 'selection:pos')
end
function test_select_text_using_mouse_and_shift()
App.screen.init{width=50, height=60}
Editor_state = edit.initialize_test_state()
@ -904,30 +923,6 @@ function test_select_all_text()
check_eq(Editor_state.cursor1.pos, 8, 'cursor:pos')
end
--? function test_select_all_text_then_mouse_press_outside_text()
--? -- display a single line of text
--? App.screen.init{width=75, height=80}
--? Editor_state = edit.initialize_test_state()
--? Editor_state.lines = load_array{'abc def'}
--? Text.redraw_all(Editor_state)
--? Editor_state.cursor1 = {line=1, pos=1}
--? Editor_state.screen_top1 = {line=1, pos=1}
--? Editor_state.screen_bottom1 = {}
--? edit.draw(Editor_state)
--? -- select all
--? App.fake_key_press('lctrl')
--? edit.run_after_keychord(Editor_state, 'C-a')
--? App.fake_key_release('lctrl')
--? edit.key_release(Editor_state, 'lctrl')
--? -- selection
--? check_eq(Editor_state.selection1.line, 1, 'selection:line')
--? check_eq(Editor_state.selection1.pos, 1, 'selection:pos')
--? check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
--? check_eq(Editor_state.cursor1.pos, 8, 'cursor:pos')
--? -- part of a mouse click outside the selected line
--? edit.run_after_mouse_press(Editor_state, 45, Margin_top + Editor_state.line_height + 10, --[[mouse button]] 1)
--? end
function test_cut_without_selection()
-- display a few lines
App.screen.init{width=Editor_state.left+30, height=60}