diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2022-06-02 19:28:38 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2022-06-02 19:28:38 -0700 |
commit | 63f59e7c2cda73ec6e932249523723c6fb970a11 (patch) | |
tree | 347e2f9bbe51df69a0c460927ebb1c080e7c27e9 | |
parent | 15c54f43836ba5f00ff8df39c34a7aec16284b14 (diff) | |
download | lines.love-63f59e7c2cda73ec6e932249523723c6fb970a11.tar.gz |
scroll if necessary on paste
-rw-r--r-- | text.lua | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/text.lua b/text.lua index e8b4b24..c397ff3 100644 --- a/text.lua +++ b/text.lua @@ -1435,17 +1435,40 @@ function Text.keychord_pressed(chord) App.setClipboardText(s) end elseif chord == 'M-v' then + -- We don't have a good sense of when to scroll, so we'll be conservative + -- and sometimes scroll when we didn't quite need to. local before_line = Cursor1.line local before = snapshot(before_line) local clipboard_data = App.getClipboardText() + local num_newlines = 0 -- hack 1 for _,code in utf8.codes(clipboard_data) do local c = utf8.char(code) if c == '\n' then Text.insert_return() + num_newlines = num_newlines+1 else Text.insert_at_cursor(utf8.char(code)) end end + -- hack 1: if we have too many newlines we definitely need to scroll + for i=before_line,Cursor1.line do + Lines[i].screen_line_starting_pos = nil + Text.populate_screen_line_starting_pos(i) + end + if Cursor1.line-Screen_top1.line+1 + num_newlines > App.screen.height/math.floor(15*Zoom) then + Screen_top1.line = Cursor1.line + Screen_top1.pos = 1 + Text.scroll_up_while_cursor_on_screen() + end + -- hack 2: if we have too much text wrapping we definitely need to scroll + local clipboard_text = App.newText(love.graphics.getFont(), clipboard_data) + local clipboard_width = App.width(clipboard_text) +--? print(Cursor_y, Cursor_y*Line_width, Cursor_y*Line_width+Cursor_x, Cursor_y*Line_width+Cursor_x+clipboard_width, Line_width*App.screen.height/math.floor(15*Zoom)) + if Cursor_y*Line_width+Cursor_x + clipboard_width > Line_width*App.screen.height/math.floor(15*Zoom) then + Screen_top1.line = Cursor1.line + Screen_top1.pos = 1 + Text.scroll_up_while_cursor_on_screen() + end record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)}) --== shortcuts that move the cursor elseif chord == 'left' then |