3 Commits d27c03373c ... 9d1bea2941

Author SHA1 Message Date
  Kartik K. Agaram 9d1bea2941 Merge text.love 2 months ago
  Kartik K. Agaram 6b33c9e223 Merge lines.love 2 months ago
  Kartik K. Agaram 4e9298dda1 bugfix in cursor positioning 2 months ago
4 changed files with 14 additions and 14 deletions
  1. 1 1
      source_text.lua
  2. 6 6
      source_text_tests.lua
  3. 1 1
      text.lua
  4. 6 6
      text_tests.lua

+ 1 - 1
source_text.lua

@@ -798,7 +798,7 @@ function Text.to_pos_on_line(State, line_index, mx, my)
       -- (The final screen line positions past end of screen line as always.)
       if screen_line_index < #line_cache.screen_line_starting_pos and mx > State.left + Text.screen_line_width(State, line_index, screen_line_index) then
 --?         print('past end of non-final line; return')
-        return line_cache.screen_line_starting_pos[screen_line_index+1]-1
+        return line_cache.screen_line_starting_pos[screen_line_index+1]
       end
       local s = string.sub(line.data, screen_line_starting_byte_offset)
 --?       print('return', mx, Text.nearest_cursor_pos(State.font, s, mx, State.left), '=>', screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1)

+ 6 - 6
source_text_tests.lua

@@ -485,9 +485,9 @@ function test_click_past_end_of_screen_line()
   y = y + Editor_state.line_height
   -- click past end of second screen line
   edit.run_after_mouse_click(Editor_state, App.screen.width-2,y-2, 1)
-  -- cursor moves to end of screen line
+  -- cursor moves to end of screen line (one more than final character shown)
   check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
-  check_eq(Editor_state.cursor1.pos, 12, 'cursor:pos')
+  check_eq(Editor_state.cursor1.pos, 13, 'cursor:pos')
 end
 
 function test_click_on_wrapping_line_rendered_from_partway_at_top_of_screen()
@@ -506,9 +506,9 @@ function test_click_on_wrapping_line_rendered_from_partway_at_top_of_screen()
   y = y + Editor_state.line_height
   -- click past end of second screen line
   edit.run_after_mouse_click(Editor_state, App.screen.width-2,y-2, 1)
-  -- cursor moves to end of screen line
+  -- cursor moves to end of screen line (one more than final character shown)
   check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
-  check_eq(Editor_state.cursor1.pos, 12, 'cursor:pos')
+  check_eq(Editor_state.cursor1.pos, 13, 'cursor:pos')
 end
 
 function test_click_past_end_of_wrapping_line()
@@ -576,8 +576,8 @@ function test_click_past_end_of_word_wrapping_line()
   y = y + Editor_state.line_height
   -- click past the end of the screen line
   edit.run_after_mouse_click(Editor_state, App.screen.width-2,y-2, 1)
-  -- cursor moves to end of screen line
-  check_eq(Editor_state.cursor1.pos, 20, 'cursor')
+  -- cursor moves to end of screen line (one more than final character shown)
+  check_eq(Editor_state.cursor1.pos, 21, 'cursor')
 end
 
 function test_select_text()

+ 1 - 1
text.lua

@@ -544,7 +544,7 @@ function Text.to_pos_on_line(State, line_index, mx, my)
       -- (The final screen line positions past end of screen line as always.)
       if screen_line_index < #line_cache.screen_line_starting_pos and mx > State.left + Text.screen_line_width(State, line_index, screen_line_index) then
 --?         print('past end of non-final line; return')
-        return line_cache.screen_line_starting_pos[screen_line_index+1]-1
+        return line_cache.screen_line_starting_pos[screen_line_index+1]
       end
       local s = string.sub(line.data, screen_line_starting_byte_offset)
 --?       print('return', mx, Text.nearest_cursor_pos(State.font, s, mx, State.left), '=>', screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1)

+ 6 - 6
text_tests.lua

@@ -421,9 +421,9 @@ function test_click_past_end_of_screen_line()
   y = y + Editor_state.line_height
   -- click past end of second screen line
   edit.run_after_mouse_click(Editor_state, App.screen.width-2,y-2, 1)
-  -- cursor moves to end of screen line
+  -- cursor moves to end of screen line (one more than final character shown)
   check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
-  check_eq(Editor_state.cursor1.pos, 12, 'cursor:pos')
+  check_eq(Editor_state.cursor1.pos, 13, 'cursor:pos')
 end
 
 function test_click_on_wrapping_line_rendered_from_partway_at_top_of_screen()
@@ -442,9 +442,9 @@ function test_click_on_wrapping_line_rendered_from_partway_at_top_of_screen()
   y = y + Editor_state.line_height
   -- click past end of second screen line
   edit.run_after_mouse_click(Editor_state, App.screen.width-2,y-2, 1)
-  -- cursor moves to end of screen line
+  -- cursor moves to end of screen line (one more than final character shown)
   check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
-  check_eq(Editor_state.cursor1.pos, 12, 'cursor:pos')
+  check_eq(Editor_state.cursor1.pos, 13, 'cursor:pos')
 end
 
 function test_click_past_end_of_wrapping_line()
@@ -512,8 +512,8 @@ function test_click_past_end_of_word_wrapping_line()
   y = y + Editor_state.line_height
   -- click past the end of the screen line
   edit.run_after_mouse_click(Editor_state, App.screen.width-2,y-2, 1)
-  -- cursor moves to end of screen line
-  check_eq(Editor_state.cursor1.pos, 20, 'cursor')
+  -- cursor moves to end of screen line (one more than final character shown)
+  check_eq(Editor_state.cursor1.pos, 21, 'cursor')
 end
 
 function test_select_text()