rip out most support for polygons

[?]
Jun 15, 2022, 3:56 PM
W7JMT5V2ELDFZG354LUL5AR6IQLIYQUDXBEPDNZ2BEBXDCZLQJTAC

Dependencies

  • [2] KAUD3YIK tests: deleting points/shapes
  • [3] WDMPH4AN drop support for squares
  • [4] CRYGI3LR more drawing tests
  • [5] YCDYGEZU include drawing index in a few places
  • [6] DRFE3B3Z mouse buttons are integers, not strings
  • [7] JFFUF5AL override mouse state lookups in tests
  • [8] L6XA5EY2 test: moving a point
  • [9] H4K2GFIL experiment: give up on changing shape mode
  • [10] T7SJSJIH test: undo naming a point
  • [11] HYEAFRZ2 split mouse_pressed events between Text and Drawing
  • [12] HOSPP2AN crisp font rendering
  • [13] 3RGHOJ25 DRY some code
  • [14] E6TMJY2T lighter color for in-progress strokes
  • [15] 42LVB4DE test: naming a point
  • [16] 6DE7RBZ6 move mouse_released events to Drawing
  • [17] Y4VYNEGF test: autosave after name/move/delete of point
  • [18] XRLJDW3W casting about for more helpers to extract..
  • [19] 7OUJM7DL one missing transition between shape modes
  • [20] QYIFOHW3 first test!
  • [21] OWK3U6VD tests for drawing polygons
  • [22] 2MA33THZ few more transitions between shapes
  • [23] 2WGRQI5E missing shape modes in a couple more places
  • [24] XNFTJHC4 split keyboard handling between Text and Drawing
  • [25] NYQ7HD4D move
  • [26] LAW2O3NW extract variable Margin_left
  • [27] BYG5CEMV support for naming points
  • [28] VHQCNMAR several more modules
  • [29] YTSPVDZH first successful pagedown test, first bug found by test
  • [30] F3OOGMME switch freehand hotkey to eliminate conflict with search
  • [31] UN7L3DNN avoid some string concatenations
  • [32] 2XLZCWZC bugfix: rectangles and squares are now saved
  • [33] SRVDX4I5 local var
  • [34] B4YZWV6S bugfix: checking if a point is on a manhattan line
  • [35] WTDKUACN rectangle and square shapes
  • [*] K2X6G75Z start writing some tests for drawings
  • [*] BLWAYPKV extract a module

Change contents

  • replacement in geom.lua at line 28
    [4.518][3.109:176]()
    elseif shape.mode == 'polygon' or shape.mode == 'rectangle' then
    [4.518]
    [4.11961]
    elseif shape.mode == 'rectangle' then
  • replacement in file.lua at line 60
    [4.1350][3.178:247]()
    elseif shape.mode == 'polygon' or shape.mode == 'rectangle' then
    [4.1350]
    [4.16782]
    elseif shape.mode == 'rectangle' then
  • replacement in file.lua at line 89
    [4.131][3.248:317]()
    elseif shape.mode == 'polygon' or shape.mode == 'rectangle' then
    [4.131]
    [4.17579]
    elseif shape.mode == 'rectangle' then
  • replacement in file.lua at line 153
    [4.2610][3.318:387]()
    elseif shape.mode == 'polygon' or shape.mode == 'rectangle' then
    [4.2610]
    [4.2705]
    elseif shape.mode == 'rectangle' then
  • edit in drawing_tests.lua at line 188
    [4.7377][4.7377:7381](),[4.7381][4.680:2608]()
    end
    function test_draw_polygon()
    io.write('\ntest_draw_polygon')
    -- display a drawing followed by a line of text (you shouldn't ever have a drawing right at the end)
    App.screen.init{width=Margin_left+300, height=300}
    Lines = load_array{'```lines', '```', ''}
    Line_width = 256 -- drawing coordinates 1:1 with pixels
    App.draw()
    check_eq(Current_drawing_mode, 'line', 'F - test_draw_polygon/baseline/drawing_mode')
    check_eq(#Lines, 2, 'F - test_draw_polygon/baseline/#lines')
    check_eq(Lines[1].mode, 'drawing', 'F - test_draw_polygon/baseline/mode')
    check_eq(Lines[1].y, Margin_top+Drawing_padding_top, 'F - test_draw_polygon/baseline/y')
    check_eq(Lines[1].h, 128, 'F - test_draw_polygon/baseline/y')
    check_eq(#Lines[1].shapes, 0, 'F - test_draw_polygon/baseline/#shapes')
    -- first point
    App.run_after_mouse_press(Margin_left+5, Margin_top+Drawing_padding_top+6, 1)
    App.run_after_keychord('g') -- polygon mode
    -- second point
    App.mouse_move(Margin_left+65, Margin_top+Drawing_padding_top+36)
    App.run_after_keychord('p') -- add point
    -- final point
    App.run_after_mouse_release(Margin_left+35, Margin_top+Drawing_padding_top+26, 1)
    local drawing = Lines[1]
    check_eq(#drawing.shapes, 1, 'F - test_draw_polygon/#shapes')
    check_eq(#drawing.points, 3, 'F - test_draw_polygon/vertices')
    local shape = drawing.shapes[1]
    check_eq(shape.mode, 'polygon', 'F - test_draw_polygon/shape_mode')
    check_eq(#shape.vertices, 3, 'F - test_draw_polygon/vertices')
    local p = drawing.points[shape.vertices[1]]
    check_eq(p.x, 5, 'F - test_draw_polygon/p1:x')
    check_eq(p.y, 6, 'F - test_draw_polygon/p1:y')
    local p = drawing.points[shape.vertices[2]]
    check_eq(p.x, 65, 'F - test_draw_polygon/p2:x')
    check_eq(p.y, 36, 'F - test_draw_polygon/p2:y')
    local p = drawing.points[shape.vertices[3]]
    check_eq(p.x, 35, 'F - test_draw_polygon/p3:x')
    check_eq(p.y, 26, 'F - test_draw_polygon/p3:y')
  • edit in drawing_tests.lua at line 411
    [2.2692][2.2692:4208](),[4.1938][4.1770:1774](),[2.4208][4.1770:1774](),[4.1770][4.1770:1774](),[4.1774][2.4209:5522]()
    end
    function test_delete_point_from_polygon()
    io.write('\ntest_delete_point_from_polygon')
    -- create a drawing with two lines connected at a point
    App.screen.init{width=Margin_left+300, height=300}
    Lines = load_array{'```lines', '```', ''}
    Line_width = 256 -- drawing coordinates 1:1 with pixels
    Current_drawing_mode = 'line'
    App.draw()
    -- first point
    App.run_after_mouse_press(Margin_left+5, Margin_top+Drawing_padding_top+6, 1)
    App.run_after_keychord('g') -- polygon mode
    -- second point
    App.mouse_move(Margin_left+65, Margin_top+Drawing_padding_top+36)
    App.run_after_keychord('p') -- add point
    -- third point
    App.mouse_move(Margin_left+35, Margin_top+Drawing_padding_top+26)
    App.run_after_keychord('p') -- add point
    -- fourth point
    App.run_after_mouse_release(Margin_left+14, Margin_top+Drawing_padding_top+16, 1)
    local drawing = Lines[1]
    check_eq(#drawing.shapes, 1, 'F - test_delete_point_from_polygon/baseline/#shapes')
    check_eq(drawing.shapes[1].mode, 'polygon', 'F - test_delete_point_from_polygon/baseline/mode')
    check_eq(#drawing.shapes[1].vertices, 4, 'F - test_delete_point_from_polygon/baseline/vertices')
    -- hover on a point and delete
    App.mouse_move(Margin_left+35, Margin_top+Drawing_padding_top+26)
    App.run_after_keychord('C-d')
    -- just the one point is deleted
    check_eq(drawing.shapes[1].mode, 'polygon', 'F - test_delete_point_from_polygon/shape')
    check_eq(#drawing.shapes[1].vertices, 3, 'F - test_delete_point_from_polygon/vertices')
    end
    function test_delete_point_from_polygon()
    io.write('\ntest_delete_point_from_polygon')
    -- create a drawing with two lines connected at a point
    App.screen.init{width=Margin_left+300, height=300}
    Lines = load_array{'```lines', '```', ''}
    Line_width = 256 -- drawing coordinates 1:1 with pixels
    Current_drawing_mode = 'line'
    App.draw()
    -- first point
    App.run_after_mouse_press(Margin_left+5, Margin_top+Drawing_padding_top+6, 1)
    App.run_after_keychord('g') -- polygon mode
    -- second point
    App.mouse_move(Margin_left+65, Margin_top+Drawing_padding_top+36)
    App.run_after_keychord('p') -- add point
    -- third point
    App.run_after_mouse_release(Margin_left+14, Margin_top+Drawing_padding_top+16, 1)
    local drawing = Lines[1]
    check_eq(#drawing.shapes, 1, 'F - test_delete_point_from_polygon/baseline/#shapes')
    check_eq(drawing.shapes[1].mode, 'polygon', 'F - test_delete_point_from_polygon/baseline/mode')
    check_eq(#drawing.shapes[1].vertices, 3, 'F - test_delete_point_from_polygon/baseline/vertices')
    -- hover on a point and delete
    App.mouse_move(Margin_left+65, Margin_top+Drawing_padding_top+36)
    App.run_after_keychord('C-d')
    -- there's < 3 points left, so the whole polygon is deleted
    check_eq(drawing.shapes[1].mode, 'deleted', 'F - test_delete_point_from_polygon')
  • replacement in drawing.lua at line 87
    [4.636][3.390:457]()
    elseif shape.mode == 'polygon' or shape.mode == 'rectangle' then
    [4.636]
    [4.674]
    elseif shape.mode == 'rectangle' then
  • replacement in drawing.lua at line 139
    [4.2906][4.2906:3256](),[4.3256][4.1818:1926]()
    -- don't close the loop on a pending polygon
    local prev = nil
    for _,point in ipairs(shape.vertices) do
    local curr = drawing.points[point]
    if prev then
    love.graphics.line(Drawing.pixels(prev.x)+left,Drawing.pixels(prev.y)+top, Drawing.pixels(curr.x)+left,Drawing.pixels(curr.y)+top)
    end
    prev = curr
    end
    love.graphics.line(Drawing.pixels(prev.x)+left,Drawing.pixels(prev.y)+top, App.mouse_x(),App.mouse_y())
    [4.2906]
    [4.1853]
    -- TODO
  • replacement in drawing.lua at line 193
    [4.1252][3.458:545]()
    elseif Current_drawing_mode == 'polygon' or Current_drawing_mode == 'rectangle' then
    [4.1252]
    [4.3709]
    elseif Current_drawing_mode == 'rectangle' then
  • replacement in drawing.lua at line 273
    [4.1231][4.4473:4552](),[4.4552][4.1301:1519](),[4.1301][4.1301:1519](),[4.1519][4.2042:2054](),[4.2042][4.2042:2054]()
    local mx,my = Drawing.coord(x-Margin_left), Drawing.coord(y-drawing.y)
    if mx >= 0 and mx < 256 and my >= 0 and my < drawing.h then
    table.insert(drawing.pending.vertices, Drawing.insert_point(drawing.points, mx,my))
    table.insert(drawing.shapes, drawing.pending)
    end
    [4.1231]
    [4.1520]
    -- TODO
  • edit in drawing.lua at line 318
    [4.5858][4.1666:1721](),[4.1721][4.5918:5955](),[4.2683][4.5918:5955](),[4.5918][4.5918:5955](),[4.5955][4.1722:1771](),[4.1771][4.6009:6046](),[4.2735][4.6009:6046](),[4.6009][4.6009:6046](),[4.6046][4.16:64](),[4.64][4.6092:6467](),[4.6092][4.6092:6467](),[4.6467][3.546:598](),[3.598][4.98:131](),[4.98][4.98:131](),[4.131][4.6467:6652](),[4.6467][4.6467:6652]()
    elseif chord == 'C-g' and not App.mouse_down(1) then
    Current_drawing_mode = 'polygon'
    elseif App.mouse_down(1) and chord == 'g' then
    Current_drawing_mode = 'polygon'
    local _,drawing = Drawing.current_drawing()
    if drawing.pending.mode == 'freehand' then
    drawing.pending.vertices = {Drawing.insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y)}
    elseif drawing.pending.mode == 'line' or drawing.pending.mode == 'manhattan' then
    if drawing.pending.vertices == nil then
    drawing.pending.vertices = {drawing.pending.p1}
    end
    elseif drawing.pending.mode == 'rectangle' then
    -- reuse existing vertices
    elseif drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
    drawing.pending.vertices = {drawing.pending.center}
    end
    drawing.pending.mode = 'polygon'
  • replacement in drawing.lua at line 329
    [4.7020][4.7020:7102]()
    elseif drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
    [4.7020]
    [4.7102]
    elseif drawing.pending.mode == 'polygon' or drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
  • edit in drawing.lua at line 331
    [4.7160][3.599:649](),[3.649][4.97:136](),[4.97][4.97:136]()
    elseif drawing.pending.mode == 'polygon' then
    -- reuse existing (1-2) vertices
  • edit in drawing.lua at line 333
    [4.7998][4.9421:9759]()
    elseif App.mouse_down(1) and chord == 'p' and Current_drawing_mode == 'polygon' then
    local _,drawing = Drawing.current_drawing()
    local mx,my = Drawing.coord(App.mouse_x()-Margin_left), Drawing.coord(App.mouse_y()-drawing.y)
    local j = Drawing.insert_point(drawing.points, mx,my)
    table.insert(drawing.pending.vertices, j)
  • replacement in drawing.lua at line 358
    [4.8053][3.740:829]()
    elseif drawing.pending.mode == 'polygon' or drawing.pending.mode == 'rectangle' then
    [4.8053]
    [4.8103]
    elseif drawing.pending.mode == 'polygon' then
    -- reuse center
    elseif drawing.pending.mode == 'rectangle' then
  • replacement in drawing.lua at line 369
    [4.8509][4.8509:8591]()
    elseif drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
    [4.8509]
    [4.8591]
    elseif drawing.pending.mode == 'rectangle' then
    drawing.pending.p1 = drawing.pending.vertices[1]
    elseif drawing.pending.mode == 'polygon' or drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
  • edit in drawing.lua at line 373
    [4.8641][3.830:919](),[4.257][4.8691:8746](),[3.919][4.8691:8746](),[4.8691][4.8691:8746]()
    elseif drawing.pending.mode == 'polygon' or drawing.pending.mode == 'rectangle' then
    drawing.pending.p1 = drawing.pending.vertices[1]
  • replacement in drawing.lua at line 384
    [4.9357][3.920:1009]()
    elseif drawing.pending.mode == 'polygon' or drawing.pending.mode == 'rectangle' then
    [4.9357]
    [4.9407]
    elseif drawing.pending.mode == 'rectangle' then
  • replacement in drawing.lua at line 386
    [4.9462][4.9462:9544]()
    elseif drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
    [4.9462]
    [4.9544]
    elseif drawing.pending.mode == 'polygon' or drawing.pending.mode == 'circle' or drawing.pending.mode == 'arc' then
  • replacement in drawing.lua at line 426
    [4.10920][4.10920:11243]()
    if shape.mode == 'polygon' then
    local idx = table.find(shape.vertices, i)
    assert(idx)
    table.remove(shape.vertices, idx)
    if #shape.vertices < 3 then
    shape.mode = 'deleted'
    end
    else
    shape.mode = 'deleted'
    end
    [4.10920]
    [4.11243]
    shape.mode = 'deleted'
  • replacement in drawing.lua at line 536
    [4.21152][3.1010:1077]()
    elseif shape.mode == 'polygon' or shape.mode == 'rectangle' then
    [4.21152]
    [4.21190]
    elseif shape.mode == 'rectangle' then