C2SXFA4EMQ7MBIA3SOIT4XVOXWNYU7NAU7UPCTZKI2YJXILFXFQQC
HGEVMBDCRYMPNK3HVJJMCBG5GYCSINKWGAQMXUO3GMIXOK553R7AC
BUGMLBT5O5FQXR4BFDVE77F5KVBKBIGKJ5C2OF6WEHIBP4YXCDVAC
3MQ7ESDB6EZS6N4KXHP5BDMBU4RAXCQ3D6WJE3GAR6ITDGOKGAKAC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
JOPVPUSAMMU6RFVDQR4NJC4GNNUFB7GPKVH7OS5FKCYS5QZ53VLQC
76XOJEND6OWBWA7V6YXTQV2NP5SVVMLVZCCINBWKOBJARSUWNJJQC
TJPL6S3YDULVVDS5AWVPQ6QJ3B4YFTNFIZTS3SOHNTMFIOMYVFTQC
C7CQOQ6ZDF3O66KAPNWO4QZWXGCYY6VKU3J7RUQKQTF46JTATRGAC
4LRRUJONRE6BLHZ5M2OVX443PQFYMBNCMRWGLTP6AVP5MD5C23FQC
Editor_state.selection1 = {}
Editor_state.selection1 = {}
Editor_state.selection1 = {}
check_eq(Editor_state.cursor1.line, 1, 'cursor')
-- selection remains empty
check_nil(Editor_state.selection1.line, 'selection is empty to avoid perturbing future edits')
end
function test_click_below_all_lines()
-- display one line
App.screen.init{width=50, height=80}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc'}
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 = {}
-- click below first line
edit.draw(Editor_state)
edit.run_after_mouse_click(Editor_state, Editor_state.left+8,Editor_state.top+50, 1)
-- cursor doesn't move
-- selection remains empty
check_nil(Editor_state.selection1.line, 'selection is empty to avoid perturbing future edits')
end
function test_draw_text()
check_eq(Editor_state.cursor1.line, 1, 'cursor')
-- click on the empty line
edit.draw(Editor_state)
edit.run_after_mouse_click(Editor_state, Editor_state.left+8,Editor_state.top+5, 1)
-- cursor moves
-- click on the other line
edit.draw(Editor_state)
edit.run_after_mouse_click(Editor_state, Editor_state.left+8,Editor_state.top+5, 1)
-- cursor moves
-- click to the left of the line
edit.draw(Editor_state)
edit.run_after_mouse_click(Editor_state, Editor_state.left-4,Editor_state.top+5, 1)
-- cursor moves to start of line
-- still here? mouse press is below all screen lines
if y < State.top then
State.cursor1 = {line=State.screen_top1.line, pos=State.screen_top1.pos}
edit.clean_up_mouse_press(State)
return
end
edit.clean_up_mouse_press(State)
return
-- still here? mouse release is below all screen lines
State.cursor1.line, State.cursor1.pos = State.screen_bottom1.line, Text.pos_at_end_of_screen_line(State, State.screen_bottom1)
edit.clean_up_mouse_press(State)
end
end
function edit.clean_up_mouse_press(State)
if State.mousepress_shift then
if State.old_selection1.line == nil then
State.selection1 = State.old_cursor1
else
State.selection1 = State.old_selection1
end
State.old_cursor1, State.old_selection1, State.mousepress_shift = nil
if eq(State.cursor1, State.selection1) then
State.selection1 = {}
end
end
function edit.mouse_wheel_move(State, dx,dy)
if dy > 0 then
State.cursor1 = {line=State.screen_top1.line, pos=State.screen_top1.pos}
end
--? print_and_log(('edit.mouse_release: finally selection %s,%s cursor %d,%d'):format(tostring(State.selection1.line), tostring(State.selection1.pos), State.cursor1.line, State.cursor1.pos))
end
end
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
State.old_cursor1 = State.cursor1
State.old_selection1 = State.selection1
State.mousepress_shift = App.shift_down()
State.selection1 = {
line=State.screen_bottom1.line,
pos=Text.pos_at_end_of_screen_line(State, State.screen_bottom1),
}