binary search to most natural up/down with proportional fonts

[?]
May 17, 2022, 3:55 AM
RJGZD4INLQ3IAWLCBYBZQDMP4ICSMZWJX2TRYODDYVUNMGPL6GYAC

Dependencies

  • [2] JS6JSYOT online contextual help
  • [3] 3CS5KKCI up/down cursor movement
  • [4] IYW7X3WL left/right cursor movement, deleting characters
  • [5] XX7G2FFJ intermingle freehand line drawings with text
  • [*] OTIBCAUJ love2d scaffold
  • [*] H7OEU6WP experimental approach to combining keyboard and mouse while drawing

Change contents

  • replacement in main.lua at line 160
    [3.88][3.88:411]()
    local line_before_cursor = lines[cursor_line]:sub(1, cursor_pos-1)
    local text_before_cursor = love.graphics.newText(love.graphics.getFont(), line_before_cursor)
    love.graphics.print('_', 25+text_before_cursor:getWidth()*1.5, y+6) -- drop the cursor down a bit to account for the increased font size
    [3.88]
    [3.411]
    love.graphics.print('_', 25+cursor_x(lines[cursor_line], cursor_pos)*1.5, y+6) -- drop the cursor down a bit to account for the increased font size
  • edit in main.lua at line 541
    [3.525]
    [3.525]
    elseif chord == 'home' then
    cursor_pos = 1
    elseif chord == 'end' then
    cursor_pos = #lines[cursor_line]+1
  • edit in main.lua at line 547
    [3.581]
    [3.581]
    local old_x = cursor_x(lines[cursor_line], cursor_pos)
  • replacement in main.lua at line 549
    [3.615][3.615:715]()
    if cursor_pos > #lines[cursor_line] then
    cursor_pos = #lines[cursor_line]+1
    end
    [3.615]
    [4.1510]
    cursor_pos = nearest_cursor_pos(lines[cursor_line], old_x)
  • edit in main.lua at line 553
    [3.779]
    [3.779]
    local old_x = cursor_x(lines[cursor_line], cursor_pos)
  • replacement in main.lua at line 555
    [3.813][3.813:913]()
    if cursor_pos > #lines[cursor_line] then
    cursor_pos = #lines[cursor_line]+1
    end
    [3.813]
    [3.913]
    cursor_pos = nearest_cursor_pos(lines[cursor_line], old_x)
  • edit in main.lua at line 705
    [2.576]
    [2.576]
    end
    end
    end
    function cursor_x(line, cursor_pos)
    local line_before_cursor = line:sub(1, cursor_pos-1)
    local text_before_cursor = love.graphics.newText(love.graphics.getFont(), line_before_cursor)
    return text_before_cursor:getWidth()
    end
    function nearest_cursor_pos(line, x)
    if x == 0 then
    return 1
    end
    local left, right = 1, #line+1
    while left < right-1 do
    local curr = math.floor((left+right)/2)
    local currx = cursor_x(line, curr)
    if currx > x-2 and currx < x+2 then
    return curr
  • edit in main.lua at line 726
    [2.584]
    [8.482]
    if currx > x then
    right = curr
    else
    left = curr
    end
  • edit in main.lua at line 732
    [8.488]
    [8.488]
    return right