diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2023-09-15 08:52:39 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2023-09-15 08:52:39 -0700 |
commit | bafc45b028ad8db3d8be51cf1a09b7f118d75503 (patch) | |
tree | 28da99013b98a30b48783e72fc6c57d7db9c1f3f | |
parent | 0a12e4c733a2483eef840fb82aec4f4f6ec68b3c (diff) | |
download | view.love-bafc45b028ad8db3d8be51cf1a09b7f118d75503.tar.gz |
bugfix: crash when using mouse wheel
All the Text functions assume the cursor is always on a text line. I was violating that invariant. * When scrolling up, I start the cursor at the top-most line below the screen top. * When scrolling down, I start the cursor at the top-most line below the screen bottom. I think it would feel slightly more natural for it to be the bottom-most line above the screen bottom. However, the Text functions maintain an invariant that the bottom-most line in a buffer will be text. There's no such invariant for the top-most line.
-rw-r--r-- | edit.lua | 2 | ||||
-rw-r--r-- | source_edit.lua | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/edit.lua b/edit.lua index 1ac2bd1..d30dbdc 100644 --- a/edit.lua +++ b/edit.lua @@ -343,11 +343,13 @@ 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} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(dy) do Text.up(State) end elseif dy < 0 then State.cursor1 = {line=State.screen_bottom1.line, pos=State.screen_bottom1.pos} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(-dy) do Text.down(State) end diff --git a/source_edit.lua b/source_edit.lua index f949aa5..6dbf883 100644 --- a/source_edit.lua +++ b/source_edit.lua @@ -333,11 +333,13 @@ 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} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(dy) do Text.up(State) end elseif dy < 0 then State.cursor1 = {line=State.screen_bottom1.line, pos=State.screen_bottom1.pos} + edit.put_cursor_on_next_text_line(State) for i=1,math.floor(-dy) do Text.down(State) end |