Merge upstream into main

[?]
Jul 13, 2022, 6:06 AM
7CEOB56DPV2VOG6BCO4YRGTDD3KOHVPAXBAUHO22747DRBKR2ZBQC

Dependencies

  • [2] XHGO5TGM switch lines to digit shortcuts as well
  • [3] DR5XD5JQ per-polygon icons
  • [4] CTK7YUFZ Merge upstream into main
  • [5] 7TGTAVEE Merge upstream into main
  • [6] BADSSEFM Merge upstream into main
  • [7] UUTYRLLE Merge upstream into main
  • [8] MXA3RZYK deduce left/right from state where possible
  • [9] P5QNVXSN drop final mention of state global beyond main.lua
  • [10] AJB4LFRB try to maintain a reasonable line width
  • [11] TLOAPLBJ add a license
  • [12] HOSPP2AN crisp font rendering
  • [13] 2ZYV7D3W handle tab characters
  • [14] HRWN5V6J Devine's suggestion to try to live with just freehand
  • [15] 66X36NZN a little more prose describing manual_tests
  • [16] GK47BBCY start passing left/right margins everywhere
  • [17] APYPFFS3 call edit rather than App callbacks in tests
  • [18] QCQTMUZ7 add args to some functions
  • [19] DRFE3B3Z mouse buttons are integers, not strings
  • [20] 3QNOKBFM beginnings of a test harness
  • [21] F63Q4OV7 several bugfixes
  • [22] NX3DDSCZ fix a variable name
  • [23] DAENUOGV eliminate assumptions that line length == size in bytes
  • [24] PX7DDEMO autosave slightly less aggressively
  • [25] YGCT2D2O start loading settings as applicable
  • [26] LFMI3D7D stop scanning from start of file on every App.draw
  • [27] NFCBIEZD affordance to adjust width for word wrap
  • [28] ZPUQSPQP extract a few methods
  • [29] BERHYBXM fix help for rectangles and squares
  • [30] JCSLDGAH beginnings of support for multiple shapes
  • [31] IDG26SXK bugfix in commit e51ce12969
  • [32] K2X6G75Z start writing some tests for drawings
  • [33] 23DEB6JL make sure to save right when quitting
  • [34] 5BJCYYHN convert videos to gif so they render inline on GitHub
  • [35] MTJEVRJR add state arg to a few functions
  • [36] 2ENZW7TV select text using mouse drag
  • [37] 3GFQP6IR stop saving the entire file when modifying drawings
  • [38] 2MA33THZ few more transitions between shapes
  • [39] SHEGBK4H while we're at it, undo naming points
  • [40] 7IKRRESB longer names for indices in long loops
  • [41] AD34IX2Z couple more tests
  • [42] OLZRJ4AX experiment: use digits to draw regular polygons
  • [43] AOIRVVJA revert selection logic to before commit 3ffc2ed8f
  • [44] VC2CU2GG faster paste
  • [45] 2CH77LZC add args to some functions
  • [46] OTIBCAUJ love2d scaffold
  • [47] OWK3U6VD tests for drawing polygons
  • [48] JRLBUB6L more intuitive point delete from polygons
  • [49] BJ5X5O4A let's prevent the text cursor from ever getting on a drawing
  • [50] SQLVYKVJ rename
  • [51] HYEAFRZ2 split mouse_pressed events between Text and Drawing
  • [52] NYQ7HD4D move
  • [53] YKRF5V3Z starting to load/save
  • [54] HMODUNJE scroll on backspace
  • [55] OGUV4HSA remove some memory leaks from rendered fragments
  • [56] TVM2WIHH bugfix: autosave and undo in a couple of cases
  • [57] CPZGQT72 go through and fix similar issues
  • [58] CIQN2MDE bugfix: typing a capital letter deletes selection
  • [59] 2RXZ3PGO beginning of a new approach to scroll+wrap
  • [60] 5DOTWNVM right margin
  • [61] 2LC3BM2N support other whitespace chars in word movements
  • [62] 3QQZ7W4E bring couple more globals back to the app level
  • [63] LNUHQOGH start passing in Editor_state explicitly
  • [64] 23MA4T3G add state arg to Drawing.keychord_pressed
  • [65] LS55YKGW switch copy/paste to ctrl- hotkeys
  • [66] DHCLUDCW .
  • [67] WTDKUACN rectangle and square shapes
  • [68] XNFTJHC4 split keyboard handling between Text and Drawing
  • [69] F3OOGMME switch freehand hotkey to eliminate conflict with search
  • [70] CRYGI3LR more drawing tests
  • [71] EQP53UQV autosave slightly less aggressively
  • [72] 3TTAYXPP cleanup
  • [73] CZB4CK2R bugfix
  • [74] S7ZZA3YE ugh, handle absolute as well as relative paths
  • [75] NUCZBE77 bugfix: alignment of help screen
  • [76] D2GCFTTT clean up repl functionality
  • [77] W7JMT5V2 rip out most support for polygons
  • [78] FFBIY74N bugfix: 'escape' to cancel a stroke
  • [79] 4KC7I3E2 make colors easier to edit
  • [80] LF7BWEG4 group all editor globals
  • [81] QW5KQQTD fix a comment
  • [82] 7M7LS7I2 start saving some settings to disk on quit
  • [83] DWZK32YD include CWD when saving filename
  • [84] BJ2C6F2B ignore 'name' mode in a few places
  • [85] NQWWTGXR switch undo/redo to ctrl- hotkeys
  • [86] NP7PIUBT bugfix: restore state after C-f (find)
  • [87] 4YDBYBA4 clean up memory leak experiments
  • [88] GXEM6FP6 typos
  • [89] IWYLK45K clicking to the right of a line within line width
  • [90] WOXIYUTL bugfix: manage screen_top and cursor when resizing
  • [91] 2L5MEZV3 experiment: new edit namespace
  • [92] 2JLVAYHB start decoupling editor tests from App
  • [93] PTDO2SOT add state arg to schedule_save
  • [94] 2H67P75X switch arg for a function
  • [95] VUVH2XLF Merge upstream into main
  • [96] R5QXEHUI somebody stop me
  • [97] WSXSEZQ2 switch circles to 'o' to avoid conflicting with copy
  • [98] 3OKKTUT4 up and down arrow now moving by screen line where possible
  • [99] K464QQR4 more defensive resize handling
  • [100] 4VKEE43Z bugfix
  • [101] CE4LZV4T drop last couple of manual tests
  • [102] AVLAYODP much simpler
  • [103] T4FRZSYL delete an ancient, unused file
  • [104] BYG5CEMV support for naming points
  • [105] Z5HLXU4P add state arg to a few functions
  • [106] SRVDX4I5 local var
  • [107] SN2QONLI autosave on cut/paste
  • [108] FS2ITYYH record a known issue
  • [109] KVHUFUFV reorg
  • [110] L6XA5EY2 test: moving a point
  • [111] VG75U7IM bugfix: typing should delete highlighted text
  • [112] SPSW74Y5 add state arg to Text.keychord_pressed
  • [113] VHQCNMAR several more modules
  • [114] PNGWLAFN Merge upstream into main
  • [115] JFFUF5AL override mouse state lookups in tests
  • [116] 4447N732 Merge upstream into main
  • [117] LXTTOB33 extract a couple of files
  • [118] 42LVB4DE test: naming a point
  • [119] DDXXXXBR new mode for polygons
  • [120] XX7G2FFJ intermingle freehand line drawings with text
  • [121] P4376EXK add state arg to few functions
  • [122] YCDYGEZU include drawing index in a few places
  • [123] 6J3NXBYG affordance to adjust width for word wrap
  • [124] RF5ALVNY allow the window to be resized
  • [125] NONKKVVP update Readme for this fork
  • [126] L5USRTY2 inline
  • [127] NQKFQSZE undo creating new drawings
  • [128] IPW5MN2Q Merge upstream into main
  • [129] 4PHDQ5L5 correct commit f3abc2cbf2
  • [130] M6TH7VSZ rip out notion of Line_width
  • [131] 4CXVIEBS add args to some functions
  • [132] BPWFKBXT new test: dragging and dropping a file on lines.love
  • [133] 6LJZN727 handle chords
  • [134] VJ77YABH more efficient undo/redo
  • [135] IRCKL6VN extract scrolling logic out of insert_at_cursor
  • [136] GY6LTMIJ more precise shape selection
  • [137] DLQAEAC7 add state arg to Drawing.mouse_pressed
  • [138] QXVD2RIF add state arg to Drawing.mouse_released
  • [139] 4CTZOJPC stop pretending globals are local
  • [140] BULPIBEG beginnings of a module for the text editor
  • [141] WDMPH4AN drop support for squares
  • [142] FYS7TCDW bugfix
  • [143] 6DE7RBZ6 move mouse_released events to Drawing
  • [144] 7Q6GKOOL .
  • [145] 7JH2ZT3F add state arg to Drawing.draw
  • [146] 27DROQW2 Merge upstream into main
  • [147] KTZQ57HV replace globals with args in a few functions
  • [148] EMHRPJ3R no, that's not right
  • [149] 6VQIWTQU standardize on ordering of cases
  • [150] C6QTJYA4 keep online help inside of drawing
  • [151] DXT4QTAH a few more integer coordinates
  • [152] TVCPXAAU rename
  • [153] AM42E4Y6 avoid redundant writes on exit
  • [154] YT5P6TO6 bugfix: save previous file when dropping a new one on
  • [155] 6UZ2JNZE yet another key conflict
  • [156] NVSWVPW5 move
  • [157] WIDXZBNW experiment: extremely precise scrolling on paste
  • [158] SGMDI4TC bugfix: alignment of help screen
  • [159] DHI6IJCN selecting text and deleting selections
  • [160] 73OCE2MC after much struggle, a brute-force undo
  • [161] WDWXNW7V slightly strange way to move points
  • [162] ESETRNLB bugfix: printing the first part of a line at the bottom made it seem non-wrapping
  • [163] 7LVK4KRD fix a failing test
  • [164] OAHNWDYG .
  • [165] 7M5PGWKU drop last couple of manual tests
  • [166] BATTU6HW stop blanking screen while resizing
  • [167] 62PZGSUC optimization: moving cursor to next word
  • [168] IHHNPJ5Q move
  • [169] V3EABA35 skip multiple consecutive whitespace
  • [170] RT6EV6OP delegate update events to drawings
  • [171] T7IWZFL4 more precise scroll on paste
  • [172] PGZJ6NAT ensure Filename is writable when opened outside a terminal
  • [173] AVTNUQYR basic test-enabled framework
  • [174] BTKAW76L rename
  • [175] J2SVGR2E experiment: blinking cursor
  • [176] WPW3AVFS more precise shape selection
  • [177] LAW2O3NW extract variable Margin_left
  • [178] DLQMM265 scroll past first page
  • [179] 3TDOZESE extract scrolling logic out of insert_return
  • [180] V366JSXA videos
  • [181] YW2GO3U4 bugfix: crash in Text.up() after return
  • [182] YIQYNVD2 rip out the line-width slider
  • [183] QCPXQ2E3 add state arg to a few functions
  • [184] R3JZDBI2 drop heavyweight near check on file load/store
  • [185] BLWAYPKV extract a module
  • [186] VXORMHME delete experimental REPL
  • [187] OYXDYPGS get rid of debug variables
  • [188] VVXVV2D2 change data model; text can now have metadata
  • [189] KAUD3YIK tests: deleting points/shapes
  • [190] RSZD5A7G forgot to add json.lua
  • [191] 65XHTZEK regression: couldn't do many drawing operations because line.y was reset
  • [192] MP2TBKU6 bugfix: crash in Text.up() after return
  • [193] OEUU62GM Merge upstream into main
  • [194] AQQQNDTL yet another bugfix in selection management
  • [195] ZUOL7X6V move
  • [196] Z4XRNDTR find text
  • [197] 7XKWT5Y5 correct location of the line width slider
  • [198] S2MISTTM add state arg to a few functions
  • [199] GSV7DABC make online help fit within a drawing
  • [200] VIU2FBNV make sure to save right when quitting
  • [201] UHB4GARJ left/right margin -> left/right coordinates
  • [202] 3HVBAZPA add state arg to a few functions
  • [203] AYE2VEGJ extract a couple of methods
  • [204] SR7L4QPZ revert previous commit

Change contents

  • file deletion: main_tests.lua (----------)main_tests.lua (----------)
    [10.2][10.1125:1163](),[10.2][10.1125:1163](),[10.1163][10.7:7]()
    Editor_state.lines = load_array{'abc', 'def'}
    Editor_state.filename = 'foo'
    schedule_save(Editor_state)
    -- now drag a new file bar from the filesystem
    App.filesystem['bar'] = 'abc\ndef\nghi\n'
    local fake_dropped_file = {
    opened = false,
    getFilename = function(self)
    return 'bar'
    end,
    open = function(self)
    self.opened = true
    end,
    lines = function(self)
    assert(self.opened)
    return App.filesystem['bar']:gmatch('[^\n]+')
    end,
    close = function(self)
    self.opened = false
    end,
    }
    App.filedropped(fake_dropped_file)
    -- filesystem now contains a file called foo
    check_eq(App.filesystem['foo'], 'abc\ndef\n', 'F - test_drop_file_saves_previous')
    check_eq(#Editor_state.lines, 3, 'F - test_drop_file/#lines')
    check_eq(Editor_state.lines[1].data, 'abc', 'F - test_drop_file/lines:1')
    check_eq(Editor_state.lines[2].data, 'def', 'F - test_drop_file/lines:2')
    check_eq(Editor_state.lines[3].data, 'ghi', 'F - test_drop_file/lines:3')
    App.screen.init{width=Editor_state.left+300, height=300}
    -- initially editing a file called foo that hasn't been saved to filesystem yet
    end
    function test_drop_file_saves_previous()
    io.write('\ntest_drop_file_saves_previous')
    Editor_state.filename = 'foo'
    App.screen.init{width=Editor_state.left+300, height=300}
    check_eq(App.screen.width, Editor_state.left+300, 'F - test_resize_window/baseline/width')
    App.screen.init{width=Editor_state.left+300, height=300}
    App.filesystem['foo'] = 'abc\ndef\nghi\n'
    local fake_dropped_file = {
    opened = false,
    getFilename = function(self)
    return 'foo'
    end,
    open = function(self)
    self.opened = true
    end,
    lines = function(self)
    assert(self.opened)
    return App.filesystem['foo']:gmatch('[^\n]+')
    end,
    close = function(self)
    self.opened = false
    end,
    }
    App.filedropped(fake_dropped_file)
    check_eq(App.screen.height, 300, 'F - test_resize_window/baseline/height')
    App.resize(200, 400)
    check_eq(App.screen.width, 200, 'F - test_resize_window/width')
    check_eq(App.screen.height, 400, 'F - test_resize_window/height')
    -- TODO: how to make assertions about when App.update got past the early exit?
    end
  • resurrect zombie in text_tests.lua at line 443
    [10.1122][10.2:7](),[10.1122][10.2:7]()
    end
  • edit in text_tests.lua at line 443
    [10.981]
    [10.2]
    check_eq(Editor_state.cursor1.pos, 15, 'F - test_click_on_wrapping_line_containing_non_ascii/cursor') -- one more than the number of UTF-8 code-points
  • edit in text_tests.lua at line 446
    [10.7][10.3:3](),[10.981][10.12150:12304](),[10.981][10.12150:12304]()
    check_eq(Editor_state.cursor1.pos, 15, 'F - test_click_on_wrapping_line_containing_non_ascii/cursor') -- one more than the number of UTF-8 code-points
  • resolve order conflict in text_tests.lua at line 446
    [10.7]
    [10.7]
  • edit in text_tests.lua at line 453
    [10.335][10.335:404](),[10.335][10.335:404](),[10.404][10.722:769](),[10.404][10.722:769](),[10.769][10.423:505](),[10.423][10.423:505](),[10.769][10.423:505](),[10.423][10.423:505](),[10.769][10.423:505](),[10.505][10.505:518](),[10.505][10.505:518](),[10.505][10.505:518](),[10.518][10.518:541](),[10.451][10.518:541](),[10.518][10.518:541](),[10.518][10.518:541]()
    Lines = load_array{'the quick brown fox jumped over the lazy dog'}
    Margin_right = 0; Margin_width = Margin_left
    Cursor1 = {line=1, pos=1}
    Screen_top1 = {line=1, pos=1}
    Screen_bottom1 = {}
    App.draw()
    local y = Margin_top
  • resurrect zombie in text_tests.lua at line 459
    [10.3934][10.541:654](),[10.12631][10.541:654](),[10.541][10.541:654](),[10.541][10.541:654](),[10.541][10.541:654]()
    App.screen.check(y, 'the quick brown fox ', 'F - test_click_past_end_of_word_wrapping_line/baseline/screen:1')
  • edit in text_tests.lua at line 460
    [10.654][10.654:676](),[10.654][10.654:676](),[10.654][10.654:676]()
    y = y + Line_height
  • resurrect zombie in text_tests.lua at line 460
    [10.654][10.12632:12667](),[10.654][10.12632:12667]()
    y = y + Editor_state.line_height
  • resurrect zombie in text_tests.lua at line 463
    [10.301][10.803:843](),[10.1547][10.803:843](),[10.803][10.803:843](),[10.301][10.803:843](),[10.803][10.803:843](),[10.803][10.803:843]()
    -- cursor moves to end of screen line
  • edit in text_tests.lua at line 464
    [10.843][10.843:927](),[10.843][10.843:927](),[10.843][10.843:927](),[10.843][10.843:927]()
    check_eq(Cursor1.pos, 20, 'F - test_click_past_end_of_word_wrapping_line/cursor')
  • resurrect zombie in text_tests.lua at line 464
    [10.927][10.4:9](),[10.927][10.4:9]()
    end
  • edit in text_tests.lua at line 464
    [10.843]
    [10.4]
    check_eq(Editor_state.cursor1.pos, 20, 'F - test_click_past_end_of_word_wrapping_line/cursor')
  • edit in text_tests.lua at line 1832
    [10.843][10.12668:12765](),[10.843][10.12668:12765](),[10.843][10.12668:12765]()
    check_eq(Editor_state.cursor1.pos, 20, 'F - test_click_past_end_of_word_wrapping_line/cursor')
  • resolve order conflict in text_tests.lua at line 1832
    [10.43800]
  • edit in text.lua at line 170
    [10.113][10.3:23](),[10.113][10.3:23](),[10.23][10.8:8](),[10.23][10.8:8]()
    schedule_save()
  • resurrect zombie in text.lua at line 170
    [10.113][10.3:28](),[10.113][10.3:28](),[10.28][10.1211:1313](),[10.28][10.1211:1313]()
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, before_line, State.cursor1.line)})
  • edit in text.lua at line 181
    [10.814][10.24:44](),[10.814][10.24:44](),[10.44][10.10:10](),[10.44][10.10:10]()
    schedule_save()
  • resurrect zombie in text.lua at line 181
    [10.814][10.29:54](),[10.814][10.29:54](),[10.54][10.1370:1459](),[10.54][10.1370:1459]()
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
  • edit in text.lua at line 220
    [10.216][10.68:88](),[10.216][10.68:88](),[10.88][10.12:12](),[10.88][10.12:12]()
    schedule_save()
  • resurrect zombie in text.lua at line 220
    [10.3000][10.2756:2865](),[10.3000][10.2756:2865](),[10.2865][10.83:108](),[10.2865][10.83:108](),[10.108][10.1586:1675](),[10.108][10.1586:1675]()
    Text.clear_cache(State.lines[State.cursor1.line])
    assert(Text.le1(State.screen_top1, State.cursor1))
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
  • edit in text.lua at line 225
    [10.8503][7.3:75](),[10.8503][7.3:75](),[7.75][10.89:111](),[10.8533][10.89:111](),[10.111][7.77:77]()
    Text.delete_selection(Margin_left, App.screen.width-Margin_right)
    schedule_save()
  • resurrect zombie in text.lua at line 225
    [10.3066][10.2942:2976](),[10.3066][10.2942:2976](),[10.2976][10.15732:15792](),[10.2976][10.15732:15792](),[10.339][10.109:136](),[10.15792][10.109:136](),[10.3060][10.109:136](),[10.3060][10.109:136]()
    if State.selection1.line then
    Text.delete_selection(State, State.left, State.right)
    schedule_save(State)
  • edit in text.lua at line 447
    [10.2441][10.362:479](),[10.2441][10.362:479](),[10.479][10.16:16](),[10.479][10.16:16]()
    local new_screen_line_starting_byte_offset = Text.offset(Lines[Cursor1.line].data, new_screen_line_starting_pos)
  • edit in text.lua at line 551
    [10.5383][10.669:739](),[10.5383][10.669:739](),[10.5383][10.669:739](),[10.739][10.18:18](),[10.739][10.18:18]()
    local offset = Text.offset(Lines[Cursor1.line].data, Cursor1.pos)
  • edit in text.lua at line 890
    [10.1005][10.1005:1095]()
    print(Cursor1.line, Cursor1.pos, #Lines[Cursor1.line].data, Lines[Cursor1.line].data)
  • edit in text.lua at line 896
    [10.564][10.264:318](),[10.564][10.264:318]()
    function Text.previous_screen_line(pos2, left, right)
  • resurrect zombie in text.lua at line 896
    [10.564][8.3517:3565](),[10.564][8.3517:3565]()
    function Text.previous_screen_line(State, pos2)
  • replacement in main_tests.lua at line 3
    [10.73][10.73:232]()
    Filename = 'foo'
    App.screen.init{width=Margin_left+300, height=300}
    check_eq(App.screen.width, Margin_left+300, 'F - test_resize_window/baseline/width')
    [10.73]
    [10.232]
    Editor_state.filename = 'foo'
    App.screen.init{width=Editor_state.left+300, height=300}
    check_eq(App.screen.width, Editor_state.left+300, 'F - test_resize_window/baseline/width')
  • replacement in main_tests.lua at line 15
    [10.64][10.64:117]()
    App.screen.init{width=Margin_left+300, height=300}
    [10.64]
    [10.117]
    App.screen.init{width=Editor_state.left+300, height=300}
  • replacement in main_tests.lua at line 34
    [10.631][10.631:871]()
    check_eq(#Lines, 3, 'F - test_drop_file/#lines')
    check_eq(Lines[1].data, 'abc', 'F - test_drop_file/lines:1')
    check_eq(Lines[2].data, 'def', 'F - test_drop_file/lines:2')
    check_eq(Lines[3].data, 'ghi', 'F - test_drop_file/lines:3')
    [10.631]
    [10.871]
    check_eq(#Editor_state.lines, 3, 'F - test_drop_file/#lines')
    check_eq(Editor_state.lines[1].data, 'abc', 'F - test_drop_file/lines:1')
    check_eq(Editor_state.lines[2].data, 'def', 'F - test_drop_file/lines:2')
    check_eq(Editor_state.lines[3].data, 'ghi', 'F - test_drop_file/lines:3')
  • replacement in main_tests.lua at line 42
    [10.963][10.963:1016]()
    App.screen.init{width=Margin_left+300, height=300}
    [10.963]
    [10.1016]
    App.screen.init{width=Editor_state.left+300, height=300}
  • replacement in main_tests.lua at line 44
    [10.1098][10.1098:1170]()
    Lines = load_array{'abc', 'def'}
    Filename = 'foo'
    schedule_save()
    [10.1098]
    [10.1170]
    Editor_state.lines = load_array{'abc', 'def'}
    Editor_state.filename = 'foo'
    schedule_save(Editor_state)
  • edit in main.lua at line 17
    [10.405][10.7:52](),[10.405][10.7:52](),[10.41][10.53:103](),[10.41][10.53:103](),[10.109][10.7:37](),[10.109][10.7:37](),[10.63][10.137:153](),[10.63][10.137:153](),[10.153][10.31:31](),[10.153][10.31:31]()
    -- an array vertices for mode 'rectangle'
    -- center, p1, num_vertices for mode 'polygon'
    Current_drawing_submode = nil
    Next_save = nil
  • edit in main.lua at line 25
    [10.144][10.162:163](),[10.455][10.162:163]()
  • resurrect zombie in main.lua at line 25
    [10.240][10.7:8](),[10.240][10.7:8]()
  • edit in main.lua at line 123
    [10.217][10.1274:1343](),[10.217][10.1274:1343](),[10.217][10.1274:1343](),[10.1343][7.83:163](),[10.1343][7.83:163](),[7.163][10.8:43](),[10.1380][10.8:43](),[7.163][10.8:43](),[10.1380][10.8:43]()
    Selection1 = {} -- no support for shift drag while we're resizing
    Text.tweak_screen_top_and_cursor(Margin_left, App.screen.height-Margin_right)
    Last_resize_time = App.getTime()
  • resurrect zombie in main.lua at line 123
    [10.477][10.6094:6126](),[10.477][10.6094:6126](),[10.6126][10.86117:86199](),[10.217][10.86117:86199](),[10.217][10.86117:86199](),[10.86199][10.18284:18372](),[10.86199][10.18284:18372]()
    Text.redraw_all(Editor_state)
    Editor_state.selection1 = {} -- no support for shift drag while we're resizing
    Text.tweak_screen_top_and_cursor(Editor_state, Editor_state.left, Editor_state.right)
  • edit in main.lua at line 126
    [10.18372]
    [10.440]
    Last_resize_time = App.getTime()
  • edit in main.lua at line 150
    [10.273][10.273:274](),[10.273][10.273:274](),[10.274][7.165:165](),[10.274][7.165:165](),[7.165][10.658:692](),[10.261][10.658:692](),[10.261][10.658:692](),[10.679][10.306:331](),[10.394][10.306:331](),[10.679][10.306:331](),[10.394][10.306:331](),[10.679][10.306:331]()
    love.graphics.setColor(0, 0, 0)
    end
  • edit in main.lua at line 165
    [10.24][10.3:8](),[10.178][10.3:8](),[10.444][10.3:8](),[10.444][10.3:8](),[10.2384][10.3:8](),[10.1683][10.3:8](),[10.8][10.445:604]()
    end
    function schedule_save()
    if Next_save == nil then
    Next_save = App.getTime() + 3 -- short enough that you're likely to still remember what you did
    end
  • edit in main.lua at line 168
    [10.66][10.47:47](),[10.66][10.47:47](),[10.1873][10.8:68](),[10.66][10.8:68](),[10.47][10.8:68](),[10.66][10.8:68](),[10.47][10.8:47](),[10.66][10.8:47](),[10.66][10.8:47]()
    if Next_save then
    save_to_disk(Lines, Filename)
    end
    -- make sure to save before quitting
  • resurrect zombie in main.lua at line 168
    [10.68][10.48:135](),[10.68][10.48:135]()
    -- save some important settings
    local x,y,displayindex = love.window.getPosition()
  • edit in main.lua at line 168
    [10.66]
    [10.48]
    edit.quit(Editor_state)
  • edit in main.lua at line 171
    [10.135][4.9:9](),[10.135][4.9:9](),[4.9][10.8:36](),[10.135][10.8:36](),[10.135][10.8:36]()
    local filename = Filename
  • resurrect zombie in main.lua at line 171
    [10.135][10.86892:86933](),[10.135][10.86892:86933]()
    local filename = Editor_state.filename
  • resolve order conflict in main.lua at line 171
    [10.135]
    [10.86892]
  • resurrect zombie in main.lua at line 172
    [10.86933][10.36:181](),[10.36][10.36:181](),[10.36][10.36:181]()
    if filename:sub(1,1) ~= '/' then
    filename = love.filesystem.getWorkingDirectory()..'/'..filename -- '/' should work even on Windows
    end
  • resurrect zombie in main.lua at line 175
    [10.181][4.10:126](),[10.181][4.10:126]()
    local settings = {
    x=x, y=y, displayindex=displayindex,
    width=App.screen.width, height=App.screen.height,
  • edit in main.lua at line 178
    [10.9][10.8:37](),[4.126][10.8:37](),[10.251][10.8:37](),[10.251][10.8:37]()
    font_height=Font_height,
  • resurrect zombie in main.lua at line 178
    [10.251][10.86934:86976](),[10.251][10.86934:86976]()
    font_height=Editor_state.font_height,
  • resolve order conflict in main.lua at line 178
    [4.126]
    [10.86934]
  • edit in main.lua at line 180
    [10.205][10.140:184](),[10.140][10.140:184](),[10.205][10.140:184](),[10.140][10.140:184]()
    screen_top=Screen_top1, cursor=Cursor1}
  • resurrect zombie in main.lua at line 180
    [10.184][10.10:72](),[10.184][10.10:72]()
    love.filesystem.write('config', json.encode(settings))
    end
  • edit in main.lua at line 180
    [10.205]
    [10.10]
    screen_top=Editor_state.screen_top1, cursor=Editor_state.cursor1}
  • edit in main.lua at line 185
    [10.877][10.47:47](),[10.877][10.47:47]()
  • edit in main.lua at line 190
    [10.365][10.610:630](),[10.365][10.610:630](),[10.365][10.610:630](),[10.630][10.51:51](),[10.630][10.51:51]()
    schedule_save()
  • edit in main.lua at line 195
    [10.354][10.631:649](),[10.354][10.631:649](),[10.649][10.53:53]()
    schedule_save()
  • edit in main.lua at line 200
    [10.3421][10.1543:1599](),[10.3421][10.1543:1599](),[10.1599][10.55:55](),[10.1599][10.55:55](),[10.646][10.717:737](),[10.646][10.717:737](),[10.737][10.57:57](),[10.737][10.57:57](),[10.189][10.738:760](),[10.189][10.738:760](),[10.760][10.59:59](),[10.760][10.59:59](),[10.5055][10.868:874](),[10.5055][10.868:874]()
    local byte_offset = Text.offset(Search_term, len)
    schedule_save()
    schedule_save()
    end
  • edit in main.lua at line 208
    [10.331][7.167:167](),[10.205][10.86977:87047](),[10.205][10.86977:87047](),[10.66][10.2385:2411](),[10.66][10.2385:2411](),[10.66][10.2385:2411]()
    screen_top=Editor_state.screen_top1, cursor=Editor_state.cursor1}
    edit.quit(Editor_state)
  • resolve order conflict in main.lua at line 208
    [10.331]
  • edit in icons.lua at line 3
    [10.882][10.882:1345](),[10.1345][10.64:64](),[10.64][10.881:882](),[10.5334][10.881:882]()
    function icon.line_width(x, y)
    love.graphics.setColor(0.7,0.7,0.7)
    love.graphics.line(x+0,y+0, x+9,y+0)
    love.graphics.line(x+0,y+1, x+9,y+1)
    love.graphics.line(x+0,y+2, x+9,y+2)
    love.graphics.line(x+0,y+3, x+9,y+3)
    love.graphics.line(x+0,y+4, x+9,y+4)
    love.graphics.line(x+0,y+5, x+9,y+5)
    love.graphics.line(x+1,y+6, x+8,y+6)
    love.graphics.line(x+2,y+7, x+7,y+7)
    love.graphics.line(x+3,y+8, x+6,y+8)
    love.graphics.line(x+4,y+9, x+5,y+9)
    end
  • replacement in icons.lua at line 36
    [3.26][3.26:65]()
    if Current_drawing_submode == 3 then
    [3.26]
    [3.65]
    if Editor_state.current_drawing_submode == 3 then
  • replacement in icons.lua at line 38
    [3.105][3.105:148]()
    elseif Current_drawing_submode == 4 then
    [3.105]
    [3.148]
    elseif Editor_state.current_drawing_submode == 4 then
  • replacement in icons.lua at line 40
    [3.195][3.195:238]()
    elseif Current_drawing_submode == 5 then
    [3.195]
    [3.238]
    elseif Editor_state.current_drawing_submode == 5 then
  • replacement in icons.lua at line 42
    [3.295][3.295:338]()
    elseif Current_drawing_submode == 6 then
    [3.295]
    [3.338]
    elseif Editor_state.current_drawing_submode == 6 then
  • replacement in icons.lua at line 44
    [3.402][3.402:445]()
    elseif Current_drawing_submode == 7 then
    [3.402]
    [3.445]
    elseif Editor_state.current_drawing_submode == 7 then
  • replacement in icons.lua at line 47
    [3.539][3.539:582]()
    elseif Current_drawing_submode == 8 then
    [3.539]
    [3.582]
    elseif Editor_state.current_drawing_submode == 8 then
  • replacement in icons.lua at line 49
    [3.663][3.663:706]()
    elseif Current_drawing_submode == 9 then
    [3.663]
    [3.706]
    elseif Editor_state.current_drawing_submode == 9 then
  • replacement in icons.lua at line 53
    [3.825][3.825:860]()
    print(Current_drawing_submode)
    [3.825]
    [3.860]
    print(Editor_state.current_drawing_submode)
  • edit in help.lua at line 4
    [10.6732][10.11:73](),[10.6732][10.11:73](),[10.73][10.67:67](),[10.73][10.67:67](),[10.5014][10.180:296](),[10.5014][10.180:296](),[10.296][10.69:69](),[10.296][10.69:69](),[10.5128][10.297:395](),[10.5128][10.297:395](),[10.395][10.71:71](),[10.395][10.71:71](),[10.5445][10.511:614](),[10.5445][10.511:614](),[10.614][10.73:73](),[10.614][10.73:73](),[10.7341][10.615:715](),[10.7341][10.615:715](),[10.715][10.75:75](),[10.715][10.75:75]()
    love.graphics.print("Things you can do:", Margin_left+30,y)
    love.graphics.print("* Hover on a point and press 'ctrl+u' to pick it up and start moving it,", Margin_left+30,y)
    love.graphics.print("then press the mouse button to drop it", Margin_left+30+bullet_indent(),y)
    love.graphics.print("* Hover on a point or shape and press 'ctrl+d' to delete it", Margin_left+30,y)
    love.graphics.print("* Press 'ctrl+p' to switch to drawing freehand strokes", Margin_left+30,y)
  • replacement in help.lua at line 5
    [10.18438][10.138:166](),[10.138][10.138:166](),[10.166][10.18439:18548](),[10.18548][10.282:310](),[10.282][10.282:310]()
    y = y + State.line_height
    love.graphics.print("* Press the mouse button to start drawing a "..current_shape(State), State.left+30,y)
    y = y + State.line_height
    [10.18438]
    [10.18549]
    y = y + Line_height
    love.graphics.print("* Press the mouse button to start drawing a "..current_shape(), State.left+30,y)
    y = y + Line_height
  • replacement in help.lua at line 9
    [10.18664][10.432:460](),[10.432][10.432:460]()
    y = y + State.line_height
    [10.18664]
    [10.18665]
    y = y + Line_height
  • replacement in help.lua at line 11
    [10.18762][10.564:592](),[10.564][10.564:592]()
    y = y + State.line_height
    [10.18762]
    [10.18763]
    y = y + Line_height
  • replacement in help.lua at line 13
    [10.18876][10.712:740](),[10.712][10.712:740]()
    y = y + State.line_height
    [10.18876]
    [10.18877]
    y = y + Line_height
  • replacement in help.lua at line 15
    [10.18979][10.849:928](),[10.849][10.849:928]()
    y = y + State.line_height
    if State.current_drawing_mode ~= 'freehand' then
    [10.18979]
    [10.18980]
    y = y + Line_height
    if Current_drawing_mode ~= 'freehand' then
  • replacement in help.lua at line 18
    [10.19079][10.1034:1064](),[10.1034][10.1034:1064]()
    y = y + State.line_height
    [10.19079]
    [10.7459]
    y = y + Line_height
  • replacement in help.lua at line 20
    [10.7506][10.11:100](),[10.7506][10.11:100](),[10.100][10.77:77](),[10.100][10.77:77](),[10.7465][10.1065:1112](),[10.1112][10.19080:19168](),[10.19168][10.1207:1237](),[10.1207][10.1207:1237]()
    love.graphics.print("* Press 'ctrl+2' to switch to drawing lines", Margin_left+30,y)
    if State.current_drawing_mode ~= 'line' then
    love.graphics.print("* Press 'ctrl+l' to switch to drawing lines", State.left+30,y)
    y = y + State.line_height
    [10.7465]
    [10.7613]
    if Current_drawing_mode ~= 'line' then
    love.graphics.print("* Press 'ctrl+2' to switch to drawing lines", State.left+30,y)
    y = y + Line_height
  • replacement in help.lua at line 24
    [10.7665][10.806:915](),[10.7665][10.806:915](),[10.915][10.79:79](),[10.915][10.79:79](),[10.7619][10.1238:1290]()
    love.graphics.print("* Press 'ctrl+m' to switch to drawing horizontal/vertical lines", Margin_left+30,y)
    if State.current_drawing_mode ~= 'manhattan' then
    [10.7619]
    [10.19169]
    if Current_drawing_mode ~= 'manhattan' then
  • replacement in help.lua at line 26
    [10.19277][10.1405:1435](),[10.1405][10.1405:1435]()
    y = y + State.line_height
    [10.19277]
    [10.7792]
    y = y + Line_height
  • replacement in help.lua at line 28
    [10.7798][10.1436:1485]()
    if State.current_drawing_mode ~= 'circle' then
    [10.7798]
    [10.19278]
    if Current_drawing_mode ~= 'circle' then
  • replacement in help.lua at line 30
    [10.19373][10.1587:1617](),[10.1587][10.1587:1617]()
    y = y + State.line_height
    [10.19373]
    [10.7955]
    y = y + Line_height
  • replacement in help.lua at line 32
    [10.8005][10.1013:1119](),[10.8005][10.1013:1119](),[10.1119][10.81:81](),[10.1119][10.81:81](),[10.7961][10.1618:1668](),[10.1668][10.19374:19465](),[10.19465][10.1766:1796](),[10.1766][10.1766:1796]()
    love.graphics.print("* Press 'ctrl+<digit>' to switch to drawing regular polygons", Margin_left+30,y)
    if State.current_drawing_mode ~= 'polygon' then
    love.graphics.print("* Press 'ctrl+g' to switch to drawing polygons", State.left+30,y)
    y = y + State.line_height
    [10.7961]
    [10.422]
    if Current_drawing_mode ~= 'polygon' then
    love.graphics.print("* Press 'ctrl+<digit>' to switch to drawing regular polygons", State.left+30,y)
    y = y + Line_height
  • replacement in help.lua at line 36
    [10.474][10.1120:1214](),[10.474][10.1120:1214](),[10.1214][10.83:83](),[10.1214][10.83:83](),[10.428][10.1797:1849]()
    love.graphics.print("* Press 'ctrl+r' to switch to drawing rectangles", Margin_left+30,y)
    if State.current_drawing_mode ~= 'rectangle' then
    [10.428]
    [10.19466]
    if Current_drawing_mode ~= 'rectangle' then
  • replacement in help.lua at line 38
    [10.19559][10.1949:1979](),[10.1949][10.1949:1979]()
    y = y + State.line_height
    [10.19559]
    [10.586]
    y = y + Line_height
  • edit in help.lua at line 40
    [10.592][10.1215:1327](),[10.592][10.1215:1327](),[10.1327][10.85:85](),[10.1327][10.85:85](),[10.592][10.1980:2029](),[10.592][10.1980:2029](),[10.2029][10.19560:19650](),[10.2029][10.19560:19650](),[10.19650][10.2126:2156](),[10.2126][10.2126:2156](),[10.2126][10.2126:2156]()
    love.graphics.print("* Press 'ctrl+=' or 'ctrl+-' to zoom in or out, ctrl+0 to reset zoom", Margin_left+30,y)
    if State.current_drawing_mode ~= 'square' then
    love.graphics.print("* Press 'ctrl+s' to switch to drawing squares", State.left+30,y)
    y = y + State.line_height
  • resurrect zombie in help.lua at line 40
    [10.8121][10.19651:19762](),[10.8121][10.19651:19762](),[10.2303][10.19763:19842](),[10.2303][10.19763:19842]()
    love.graphics.print("* Press 'ctrl+=' or 'ctrl+-' to zoom in or out, ctrl+0 to reset zoom", State.left+30,y)
    love.graphics.print("Press 'esc' now to hide this message", State.left+30,y)
  • replacement in help.lua at line 41
    [10.19762][10.2275:2303](),[10.2275][10.2275:2303](),[10.2275][10.2275:2303]()
    y = y + State.line_height
    [10.19762]
    [10.19763]
    y = y + Line_height
  • replacement in help.lua at line 43
    [10.19842][10.2389:2417](),[10.2389][10.2389:2417](),[10.2389][10.2389:2417](),[10.2417][10.314:349](),[10.89653][10.314:349](),[10.6670][10.314:349](),[10.349][10.336:467]()
    y = y + State.line_height
    App.color(Help_background_color)
    love.graphics.rectangle('fill', State.left,drawing.y, State.width, math.max(Drawing.pixels(drawing.h, State.width),y-drawing.y))
    [10.19842]
    [10.8578]
    y = y + Line_height
    love.graphics.setColor(0,0.5,0, 0.1)
    love.graphics.rectangle('fill', State.left,drawing.y, State.right, math.max(Drawing.pixels(drawing.h),y-drawing.y))
  • edit in help.lua at line 51
    [10.8689][10.1528:1631](),[10.8689][10.1528:1631](),[10.1631][10.87:87](),[10.1631][10.87:87](),[10.6787][10.1632:1698](),[10.6787][10.1632:1698](),[10.1698][10.89:89](),[10.1698][10.89:89](),[10.8935][10.1699:1800](),[10.8935][10.1699:1800](),[10.1800][10.91:91](),[10.1800][10.91:91](),[10.9138][10.1801:1900](),[10.9138][10.1801:1900](),[10.1900][10.93:93](),[10.1900][10.93:93]()
    love.graphics.print("You're currently drawing a "..current_shape(drawing.pending), Margin_left+30,y)
    love.graphics.print('Things you can do now:', Margin_left+30,y)
    love.graphics.print('* Release the mouse button to finish drawing the stroke', Margin_left+30,y)
    love.graphics.print('* Release the mouse button to finish drawing the line', Margin_left+30,y)
  • edit in help.lua at line 63
    [10.7219][10.2005:2096](),[10.7219][10.2005:2096](),[10.2096][10.95:95]()
    love.graphics.print("* Press 'a' to draw just an arc of a circle", Margin_left+30,y)
  • edit in help.lua at line 67
    [10.9570][10.2097:2197](),[10.2197][10.97:97]()
    love.graphics.print('* Release the mouse button to finish drawing the arc', Margin_left+30,y)
  • edit in help.lua at line 69
    [10.9744][10.2198:2308](),[10.9744][10.2198:2308](),[10.2308][10.99:99](),[10.2308][10.99:99](),[10.9678][10.3686:3770](),[10.9678][10.3686:3770](),[10.3770][10.20632:20733](),[10.3770][10.20632:20733](),[10.20733][10.3878:3908](),[10.3878][10.3878:3908](),[10.3878][10.3878:3908](),[10.3908][10.20734:20821](),[10.3908][10.20734:20821](),[10.20821][10.4002:4088](),[10.4002][10.4002:4088](),[10.4002][10.4002:4088]()
    love.graphics.print('* Release the mouse button to finish drawing the regular polygon', Margin_left+30,y)
    y = y + State.line_height
    elseif State.current_drawing_mode == 'polygon' then
    love.graphics.print('* Release the mouse button to finish drawing the polygon', State.left+30,y)
    y = y + State.line_height
    love.graphics.print("* Press 'p' to add a vertex to the polygon", State.left+30,y)
    y = y + State.line_height
    elseif State.current_drawing_mode == 'rectangle' then
  • resurrect zombie in help.lua at line 69
    [10.7639][10.12:104](),[10.7639][10.12:104]()
    elseif Current_drawing_mode == 'rectangle' then
    if #drawing.pending.vertices < 2 then
  • edit in help.lua at line 69
    [10.9678]
    [10.12]
    y = y + Line_height
    elseif Current_drawing_mode == 'polygon' then
    love.graphics.print('* Release the mouse button to finish drawing the regular polygon', State.left+30,y)
    y = y + Line_height
  • replacement in help.lua at line 75
    [10.104][10.104:222](),[10.104][10.104:222]()
    love.graphics.print("* Press 'p' to add a vertex to the rectangle", Margin_left+30,y)
    y = y + Line_height
    [10.104]
    [10.222]
    love.graphics.print("* Press 'p' to add a vertex to the rectangle", State.left+30,y)
    y = y + State.line_height
  • replacement in help.lua at line 78
    [10.231][10.231:494](),[10.231][10.231:494]()
    love.graphics.print('* Release the mouse button to finish drawing the rectangle', Margin_left+30,y)
    y = y + Line_height
    love.graphics.print("* Press 'p' to replace the second vertex of the rectangle", Margin_left+30,y)
    y = y + Line_height
    [10.231]
    [10.494]
    love.graphics.print('* Release the mouse button to finish drawing the rectangle', State.left+30,y)
    y = y + State.line_height
    love.graphics.print("* Press 'p' to replace the second vertex of the rectangle", State.left+30,y)
    y = y + State.line_height
  • edit in help.lua at line 84
    [10.9976][10.2309:2424](),[10.9976][10.2309:2424](),[10.2424][10.103:103](),[10.2424][10.103:103](),[10.10164][10.101:185](),[10.10164][10.101:185](),[10.185][10.105:105](),[10.185][10.105:105]()
    love.graphics.print("* Press 'esc' then release the mouse button to cancel the current shape", Margin_left+30,y)
    love.graphics.print("* Press '2' to switch to drawing lines", Margin_left+30,y)
  • replacement in help.lua at line 85
    [10.21533][10.5093:5196](),[10.5093][10.5093:5196](),[10.5196][10.21534:21617](),[10.21617][10.5286:5316](),[10.5286][10.5286:5316]()
    y = y + State.line_height
    y = y + State.line_height
    if State.current_drawing_mode ~= 'line' then
    love.graphics.print("* Press 'l' to switch to drawing lines", State.left+30,y)
    y = y + State.line_height
    [10.21533]
    [10.10266]
    y = y + Line_height
    y = y + Line_height
    if Current_drawing_mode ~= 'line' then
    love.graphics.print("* Press '2' to switch to drawing lines", State.left+30,y)
    y = y + Line_height
  • edit in help.lua at line 91
    [10.10272][10.186:300](),[10.10272][10.186:300]()
    love.graphics.print("* Press other digits to switch to polygons with corresponding vertices", Margin_left+30,y)
  • resurrect zombie in help.lua at line 91
    [10.300][10.300:322](),[10.300][10.300:322]()
    y = y + Line_height
  • edit in help.lua at line 91
    [10.10272]
    [10.300]
    love.graphics.print("* Press other digits to switch to polygons with corresponding vertices", State.left+30,y)
  • edit in help.lua at line 93
    [10.10272][10.5317:5369]()
    if State.current_drawing_mode ~= 'manhattan' then
  • resolve order conflict in help.lua at line 93
    [10.322]
  • edit in help.lua at line 93
    [0.3529]
    [10.21618]
    if Current_drawing_mode ~= 'manhattan' then
  • replacement in help.lua at line 95
    [10.21721][10.5479:5509](),[10.5479][10.5479:5509]()
    y = y + State.line_height
    [10.21721]
    [10.10440]
    y = y + Line_height
  • edit in help.lua at line 97
    [10.10489][10.2615:2706](),[10.10489][10.2615:2706](),[10.2706][10.107:107](),[10.2706][10.107:107]()
    love.graphics.print("* Press 'o' to switch to drawing circles/arcs", Margin_left+30,y)
  • edit in help.lua at line 101
    [10.10604][10.5687:5737](),[10.10604][10.5687:5737](),[10.5737][10.21813:21899](),[10.5737][10.21813:21899](),[10.21899][10.5830:5860](),[10.5830][10.5830:5860](),[10.5830][10.5830:5860](),[10.751][10.5861:5913](),[10.751][10.5861:5913]()
    if State.current_drawing_mode ~= 'polygon' then
    love.graphics.print("* Press 'g' to switch to drawing polygons", State.left+30,y)
    y = y + State.line_height
    if State.current_drawing_mode ~= 'rectangle' then
  • resurrect zombie in help.lua at line 101
    [10.5913][10.21900:21988](),[10.5913][10.21900:21988]()
    love.graphics.print("* Press 'r' to switch to drawing rectangles", State.left+30,y)
  • edit in help.lua at line 101
    [10.10604]
    [10.21900]
    if Current_drawing_mode ~= 'rectangle' then
  • replacement in help.lua at line 103
    [10.21988][10.6008:6038](),[10.6008][10.6008:6038](),[10.6008][10.6008:6038]()
    y = y + State.line_height
    [10.21988]
    [10.904]
    y = y + Line_height
  • replacement in help.lua at line 105
    [10.10759][10.375:410](),[10.10759][10.375:410](),[10.410][10.468:599](),[10.410][10.468:599]()
    App.color(Help_background_color)
    love.graphics.rectangle('fill', State.left,drawing.y, State.width, math.max(Drawing.pixels(drawing.h, State.width),y-drawing.y))
    [10.910]
    [10.10910]
    love.graphics.setColor(0,0.5,0, 0.1)
    love.graphics.rectangle('fill', State.left,drawing.y, State.right, math.max(Drawing.pixels(drawing.h),y-drawing.y))
  • edit in help.lua at line 131
    [10.910][10.6039:6088](),[10.910][10.6039:6088](),[10.6088][10.21989:22074](),[10.6088][10.21989:22074](),[10.22074][10.6180:6210](),[10.6180][10.6180:6210](),[10.6180][10.6180:6210](),[10.104][10.20822:20913](),[10.104][10.20822:20913](),[10.20913][10.4187:4219](),[10.4187][10.4187:4219](),[10.4187][10.4187:4219](),[10.231][10.20914:21019](),[10.231][10.20914:21019](),[10.21019][10.4332:4364](),[10.4332][10.4332:4364](),[10.4332][10.4332:4364](),[10.4364][10.21020:21124](),[10.4364][10.21020:21124](),[10.21124][10.4475:4507](),[10.4475][10.4475:4507](),[10.4475][10.4475:4507](),[10.503][10.4508:4561](),[10.503][10.4508:4561](),[10.592][10.21125:21213](),[10.592][10.21125:21213](),[10.21213][10.4657:4689](),[10.4657][10.4657:4689](),[10.4657][10.4657:4689](),[10.716][10.21214:21316](),[10.716][10.21214:21316](),[10.21316][10.4799:4831](),[10.4799][10.4799:4831](),[10.4799][10.4799:4831](),[10.4831][10.21317:21418](),[10.4831][10.21317:21418](),[10.21418][10.4939:4971](),[10.4939][10.4939:4971](),[10.4939][10.4939:4971]()
    if State.current_drawing_mode ~= 'square' then
    love.graphics.print("* Press 's' to switch to drawing squares", State.left+30,y)
    y = y + State.line_height
    love.graphics.print("* Press 'p' to add a vertex to the rectangle", State.left+30,y)
    y = y + State.line_height
    love.graphics.print('* Release the mouse button to finish drawing the rectangle', State.left+30,y)
    y = y + State.line_height
    love.graphics.print("* Press 'p' to replace the second vertex of the rectangle", State.left+30,y)
    y = y + State.line_height
    elseif State.current_drawing_mode == 'square' then
    love.graphics.print("* Press 'p' to add a vertex to the square", State.left+30,y)
    y = y + State.line_height
    love.graphics.print('* Release the mouse button to finish drawing the square', State.left+30,y)
    y = y + State.line_height
    love.graphics.print("* Press 'p' to replace the second vertex of the square", State.left+30,y)
    y = y + State.line_height
  • resolve order conflict in help.lua at line 131
    [10.11544]
  • edit in geom.lua at line 1
    [10.11579]
    [10.213]
    geom = {}
  • edit in geom.lua at line 3
    [10.214][10.110:110](),[10.11579][10.85:95](),[10.11579][10.85:95]()
    geom = {}
  • resolve order conflict in geom.lua at line 3
    [10.214]
    [10.11597]
  • replacement in edit.lua at line 51
    [10.95310][10.95310:95380]()
    -- an array vertices for mode 'polygon', 'rectangle', 'square'
    [10.95310]
    [10.95380]
    -- an array vertices for mode 'rectangle'
  • edit in edit.lua at line 54
    [10.95456]
    [10.95456]
    -- center, p1, num_vertices for mode 'polygon'
  • edit in edit.lua at line 90
    [10.97108]
    [10.97108]
    current_drawing_submode = nil,
  • edit in drawing_tests.lua at line 226
    [10.1415][10.406:500](),[10.500][10.1468:1512](),[10.1468][10.1468:1512](),[10.86][10.1571:2612](),[10.1571][10.1571:2612](),[10.2612][10.88:88]()
    App.screen.init{width=Margin_width+256, height=300} -- drawing coordinates 1:1 with pixels
    Lines = load_array{'```lines', '```', ''}
    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')
    -- start a stroke
    App.run_after_mouse_press(Margin_left+35, Margin_top+Drawing_padding_top+36, 1)
    -- switch to polygon mode
    App.run_after_keychord('5')
    App.run_after_mouse_release(Margin_left+55, 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, 2, 'F - test_draw_polygon/vertices')
    local shape = drawing.shapes[1]
    check_eq(shape.mode, 'polygon', 'F - test_draw_polygon/shape_mode')
    check_eq(shape.num_vertices, 5, 'F - test_draw_polygon/vertices')
  • resurrect zombie in drawing_tests.lua at line 226
    [10.847][10.27367:27564](),[10.847][10.27367:27564](),[10.27564][10.112971:113028](),[10.112971][10.112971:113028](),[10.112971][10.112971:113028](),[10.113028][10.9860:9886](),[10.113028][10.9860:9886](),[10.9886][10.113029:113295](),[10.1462][10.113029:113295](),[10.1462][10.113029:113295](),[10.113295][10.27565:27688](),[10.113295][10.27565:27688](),[10.27688][10.113425:113589](),[10.113425][10.113425:113589](),[10.113425][10.113425:113589](),[10.9673][10.113941:113981](),[10.28028][10.113941:113981](),[10.113941][10.113941:113981](),[10.113941][10.113941:113981]()
    App.screen.init{width=Margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
    Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width) -- zero right margin
    Editor_state.lines = load_array{'```lines', '```', ''}
    edit.draw(Editor_state)
    check_eq(Editor_state.current_drawing_mode, 'line', 'F - test_draw_polygon/baseline/drawing_mode')
    check_eq(#Editor_state.lines, 2, 'F - test_draw_polygon/baseline/#lines')
    check_eq(Editor_state.lines[1].mode, 'drawing', 'F - test_draw_polygon/baseline/mode')
    check_eq(Editor_state.lines[1].y, Editor_state.top+Editor_state.drawing_padding_top, 'F - test_draw_polygon/baseline/y')
    check_eq(Editor_state.lines[1].h, 128, 'F - test_draw_polygon/baseline/y')
    check_eq(#Editor_state.lines[1].shapes, 0, 'F - test_draw_polygon/baseline/#shapes')
    local drawing = Editor_state.lines[1]
  • resolve order conflict in drawing_tests.lua at line 226
    [10.1415]
    [10.27367]
  • replacement in drawing_tests.lua at line 236
    [10.1489][10.27689:27809](),[10.1489][10.27689:27809](),[10.27809][10.9412:9474](),[10.9412][10.9412:9474](),[10.9412][10.9412:9474](),[10.1634][10.27810:27903](),[10.1634][10.27810:27903](),[10.27903][10.9475:9534](),[10.113817][10.9475:9534](),[10.113817][10.9475:9534](),[10.1763][10.27904:28028](),[10.1763][10.27904:28028]()
    edit.run_after_mouse_press(Editor_state, Editor_state.left+5, Editor_state.top+Editor_state.drawing_padding_top+6, 1)
    edit.run_after_keychord(Editor_state, 'g') -- polygon mode
    App.mouse_move(Editor_state.left+65, Editor_state.top+Editor_state.drawing_padding_top+36)
    edit.run_after_keychord(Editor_state, 'p') -- add point
    edit.run_after_mouse_release(Editor_state, Editor_state.left+35, Editor_state.top+Editor_state.drawing_padding_top+26, 1)
    [10.113589]
    [10.113941]
    -- start a stroke
    edit.run_after_mouse_press(Editor_state, Editor_state.left+35, Editor_state.top+Editor_state.drawing_padding_top+36, 1)
    -- switch to polygon mode
    edit.run_after_keychord(Editor_state, '5')
    edit.run_after_mouse_release(Editor_state, Editor_state.left+55, Editor_state.top+Editor_state.drawing_padding_top+26, 1)
  • edit in drawing_tests.lua at line 242
    [10.113981]
    [10.2608]
    check_eq(#drawing.shapes, 1, 'F - test_draw_polygon/#shapes')
    check_eq(#drawing.points, 2, 'F - test_draw_polygon/vertices')
    local shape = drawing.shapes[1]
    check_eq(shape.mode, 'polygon', 'F - test_draw_polygon/shape_mode')
    check_eq(shape.num_vertices, 5, 'F - test_draw_polygon/vertices')
  • edit in drawing_tests.lua at line 329
    [10.7265][10.29437:29634](),[10.7265][10.29437:29634](),[10.29634][10.116524:116581](),[10.116524][10.116524:116581](),[10.116524][10.116524:116581](),[10.116581][10.9941:9967](),[10.116581][10.9941:9967](),[10.9967][10.116582:116845](),[10.1507][10.116582:116845](),[10.1507][10.116582:116845](),[10.116845][10.29635:29757](),[10.116845][10.29635:29757](),[10.29757][10.116974:117136](),[10.116974][10.116974:117136](),[10.116974][10.116974:117136](),[10.7901][10.29758:29880](),[10.7901][10.29758:29880](),[10.29880][10.10535:10596](),[10.10535][10.10535:10596](),[10.10535][10.10535:10596](),[10.8058][10.29881:29974](),[10.8058][10.29881:29974](),[10.29974][10.10597:10642](),[10.117366][10.10597:10642](),[10.117366][10.10597:10642](),[10.8194][10.29975:30068](),[10.8194][10.29975:30068](),[10.30068][10.10643:10688](),[10.117474][10.10643:10688](),[10.117474][10.10643:10688](),[10.8358][10.30069:30193](),[10.8358][10.30069:30193](),[10.10827][10.117598:117638](),[10.30193][10.117598:117638](),[10.117598][10.117598:117638](),[10.117598][10.117598:117638]()
    App.screen.init{width=Margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
    Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width) -- zero right margin
    Editor_state.lines = load_array{'```lines', '```', ''}
    edit.draw(Editor_state)
    check_eq(Editor_state.current_drawing_mode, 'line', 'F - test_draw_square/baseline/drawing_mode')
    check_eq(#Editor_state.lines, 2, 'F - test_draw_square/baseline/#lines')
    check_eq(Editor_state.lines[1].mode, 'drawing', 'F - test_draw_square/baseline/mode')
    check_eq(Editor_state.lines[1].y, Editor_state.top+Editor_state.drawing_padding_top, 'F - test_draw_square/baseline/y')
    check_eq(Editor_state.lines[1].h, 128, 'F - test_draw_square/baseline/y')
    check_eq(#Editor_state.lines[1].shapes, 0, 'F - test_draw_square/baseline/#shapes')
    edit.run_after_mouse_press(Editor_state, Editor_state.left+35, Editor_state.top+Editor_state.drawing_padding_top+36, 1)
    edit.run_after_keychord(Editor_state, 's') -- square mode
    App.mouse_move(Editor_state.left+42, Editor_state.top+Editor_state.drawing_padding_top+45)
    edit.run_after_keychord(Editor_state, 'p')
    App.mouse_move(Editor_state.left+65, Editor_state.top+Editor_state.drawing_padding_top+66)
    edit.run_after_keychord(Editor_state, 'p')
    edit.run_after_mouse_release(Editor_state, Editor_state.left+15, Editor_state.top+Editor_state.drawing_padding_top+26, 1)
    local drawing = Editor_state.lines[1]
  • edit in drawing_tests.lua at line 507
    [10.2844][10.33400:33597](),[10.2844][10.33400:33597](),[10.33597][10.122477:122579](),[10.122477][10.122477:122579](),[10.122477][10.122477:122579](),[10.122579][10.10157:10183](),[10.122579][10.10157:10183](),[10.3062][10.33598:33718](),[10.3062][10.33598:33718](),[10.33718][10.13350:13412](),[10.13350][10.13350:13412](),[10.13350][10.13350:13412](),[10.3207][10.33719:33812](),[10.3207][10.33719:33812](),[10.33812][10.13413:13472](),[10.122807][10.13413:13472](),[10.122807][10.13413:13472](),[10.3336][10.33813:33906](),[10.3336][10.33813:33906](),[10.33906][10.13473:13532](),[10.122915][10.13473:13532](),[10.122915][10.13473:13532](),[10.3466][10.33907:34031](),[10.3466][10.33907:34031](),[10.13671][10.123039:123079](),[10.34031][10.123039:123079](),[10.123039][10.123039:123079](),[10.123039][10.123039:123079](),[10.3893][10.34032:34125](),[10.3893][10.34032:34125](),[10.34125][10.13672:13719](),[10.123187][10.13672:13719](),[10.123187][10.13672:13719](),[10.4357][10.34126:34323](),[10.4357][10.34126:34323](),[10.34323][10.123295:123397](),[10.123295][10.123295:123397](),[10.123295][10.123295:123397](),[10.123397][10.10184:10210](),[10.123397][10.10184:10210](),[10.4575][10.34324:34444](),[10.4575][10.34324:34444](),[10.34444][10.13854:13916](),[10.13854][10.13854:13916](),[10.13854][10.13854:13916](),[10.4720][10.34445:34538](),[10.4720][10.34445:34538](),[10.34538][10.13917:13976](),[10.123625][10.13917:13976](),[10.123625][10.13917:13976](),[10.4849][10.34539:34663](),[10.4849][10.34539:34663](),[10.14115][10.123749:123789](),[10.34663][10.123749:123789](),[10.123749][10.123749:123789](),[10.123749][10.123749:123789](),[10.5276][10.34664:34757](),[10.5276][10.34664:34757](),[10.34757][10.14116:14163](),[10.123897][10.14116:14163](),[10.123897][10.14116:14163]()
    App.screen.init{width=Margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
    Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width) -- zero right margin
    Editor_state.lines = load_array{'```lines', '```', ''}
    Editor_state.current_drawing_mode = 'line'
    edit.draw(Editor_state)
    edit.run_after_mouse_press(Editor_state, Editor_state.left+5, Editor_state.top+Editor_state.drawing_padding_top+6, 1)
    edit.run_after_keychord(Editor_state, 'g') -- polygon mode
    App.mouse_move(Editor_state.left+65, Editor_state.top+Editor_state.drawing_padding_top+36)
    edit.run_after_keychord(Editor_state, 'p') -- add point
    App.mouse_move(Editor_state.left+35, Editor_state.top+Editor_state.drawing_padding_top+26)
    edit.run_after_keychord(Editor_state, 'p') -- add point
    edit.run_after_mouse_release(Editor_state, Editor_state.left+14, Editor_state.top+Editor_state.drawing_padding_top+16, 1)
    local drawing = Editor_state.lines[1]
    App.mouse_move(Editor_state.left+35, Editor_state.top+Editor_state.drawing_padding_top+26)
    edit.run_after_keychord(Editor_state, 'C-d')
    App.screen.init{width=Margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
    Editor_state = edit.initialize_state(Margin_top, Margin_left, App.screen.width) -- zero right margin
    Editor_state.lines = load_array{'```lines', '```', ''}
    Editor_state.current_drawing_mode = 'line'
    edit.draw(Editor_state)
    edit.run_after_mouse_press(Editor_state, Editor_state.left+5, Editor_state.top+Editor_state.drawing_padding_top+6, 1)
    edit.run_after_keychord(Editor_state, 'g') -- polygon mode
    App.mouse_move(Editor_state.left+65, Editor_state.top+Editor_state.drawing_padding_top+36)
    edit.run_after_keychord(Editor_state, 'p') -- add point
    edit.run_after_mouse_release(Editor_state, Editor_state.left+14, Editor_state.top+Editor_state.drawing_padding_top+16, 1)
    local drawing = Editor_state.lines[1]
    App.mouse_move(Editor_state.left+65, Editor_state.top+Editor_state.drawing_padding_top+36)
    edit.run_after_keychord(Editor_state, 'C-d')
  • replacement in drawing.lua at line 69
    [10.1279][10.1461:1528]()
    Drawing.draw_pending_shape(line, line.y, State.left,State.right)
    [10.1279]
    [10.10]
    Drawing.draw_pending_shape(State, line, line.y, State.left,State.right)
  • resurrect zombie in drawing.lua at line 85
    [10.636][10.185:225](),[10.636][10.185:225]()
    elseif shape.mode == 'rectangle' then
  • edit in drawing.lua at line 85
    [10.509]
    [10.185]
    love.graphics.line(Drawing.pixels(p1.x, width)+left,Drawing.pixels(p1.y, width)+top, Drawing.pixels(p2.x, width)+left,Drawing.pixels(p2.y, width)+top)
  • edit in drawing.lua at line 87
    [10.509][10.1788:1943](),[10.509][10.1788:1943]()
    love.graphics.line(Drawing.pixels(p1.x, width)+left,Drawing.pixels(p1.y, width)+top, Drawing.pixels(p2.x, width)+left,Drawing.pixels(p2.y, width)+top)
  • resolve order conflict in drawing.lua at line 87
    [10.225]
    [10.674]
  • resurrect zombie in drawing.lua at line 97
    [10.1183][10.2614:2700](),[10.1183][10.2614:2700]()
    elseif shape.mode == 'polygon' then
    local center = drawing.points[shape.center]
  • edit in drawing.lua at line 97
    [10.1048]
    [10.2614]
    love.graphics.line(Drawing.pixels(prev.x, width)+left,Drawing.pixels(prev.y, width)+top, Drawing.pixels(curr.x, width)+left,Drawing.pixels(curr.y, width)+top)
  • replacement in drawing.lua at line 100
    [10.2700][10.2700:2778](),[10.2700][10.2700:2778]()
    local cx,cy = Drawing.pixels(center.x)+left, Drawing.pixels(center.y)+top
    [10.2700]
    [10.2778]
    local cx,cy = Drawing.pixels(center.x, width)+left, Drawing.pixels(center.y, width)+top
  • replacement in drawing.lua at line 102
    [10.2818][10.2818:2886](),[10.2818][10.2818:2886]()
    local x,y = Drawing.pixels(p1.x)+left, Drawing.pixels(p1.y)+top
    [10.2818]
    [10.2886]
    local x,y = Drawing.pixels(p1.x, width)+left, Drawing.pixels(p1.y, width)+top
  • edit in drawing.lua at line 104
    [10.1048][10.2112:2275]()
    love.graphics.line(Drawing.pixels(prev.x, width)+left,Drawing.pixels(prev.y, width)+top, Drawing.pixels(curr.x, width)+left,Drawing.pixels(curr.y, width)+top)
  • resolve order conflict in drawing.lua at line 104
    [10.2943]
    [10.1183]
  • replacement in drawing.lua at line 119
    [10.1738][10.2612:2674]()
    function Drawing.draw_pending_shape(drawing, top, left,right)
    [10.1738]
    [10.2674]
    function Drawing.draw_pending_shape(State, drawing, top, left,right)
  • edit in drawing.lua at line 146
    [10.3081][10.3228:3395](),[10.3081][10.3228:3395](),[10.3256][10.3396:3518](),[10.3256][10.3396:3518]()
    love.graphics.line(Drawing.pixels(prev.x, width)+left,Drawing.pixels(prev.y, width)+top, Drawing.pixels(curr.x, width)+left,Drawing.pixels(curr.y, width)+top)
    love.graphics.line(Drawing.pixels(prev.x, width)+left,Drawing.pixels(prev.y, width)+top, App.mouse_x(),App.mouse_y())
  • resurrect zombie in drawing.lua at line 156
    [10.2936][10.2944:3030](),[10.2936][10.2944:3030]()
    elseif shape.mode == 'polygon' then
    local center = drawing.points[shape.center]
  • edit in drawing.lua at line 156
    [10.2380]
    [10.2944]
    love.graphics.line(Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top, Drawing.pixels(second.x, width)+left,Drawing.pixels(second.y, width)+top)
    love.graphics.line(Drawing.pixels(second.x, width)+left,Drawing.pixels(second.y, width)+top, Drawing.pixels(thirdx, width)+left,Drawing.pixels(thirdy, width)+top)
    love.graphics.line(Drawing.pixels(thirdx, width)+left,Drawing.pixels(thirdy, width)+top, Drawing.pixels(fourthx, width)+left,Drawing.pixels(fourthy, width)+top)
    love.graphics.line(Drawing.pixels(fourthx, width)+left,Drawing.pixels(fourthy, width)+top, Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top)
  • replacement in drawing.lua at line 162
    [10.3030][10.3030:3116](),[10.3030][10.3030:3116]()
    local mx,my = Drawing.coord(App.mouse_x()-left), Drawing.coord(App.mouse_y()-top)
    [10.3030]
    [10.3116]
    local mx,my = Drawing.coord(App.mouse_x()-left, width), Drawing.coord(App.mouse_y()-top, width)
  • edit in drawing.lua at line 166
    [10.3198][10.3198:3362](),[10.3198][10.3198:3362](),[10.2380][10.3626:4294](),[10.2380][10.3626:4294](),[10.3115][10.4295:4401](),[10.3115][10.4295:4401](),[10.3281][9.400:480](),[10.3281][9.400:480](),[10.3457][10.4402:5070](),[10.3457][10.4402:5070]()
    local cx,cy = Drawing.pixels(center.x)+left, Drawing.pixels(center.y)+top
    Drawing.draw_polygon(Current_drawing_submode, cx,cy, App.mouse_x(),App.mouse_y())
    love.graphics.line(Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top, Drawing.pixels(second.x, width)+left,Drawing.pixels(second.y, width)+top)
    love.graphics.line(Drawing.pixels(second.x, width)+left,Drawing.pixels(second.y, width)+top, Drawing.pixels(thirdx, width)+left,Drawing.pixels(thirdy, width)+top)
    love.graphics.line(Drawing.pixels(thirdx, width)+left,Drawing.pixels(thirdy, width)+top, Drawing.pixels(fourthx, width)+left,Drawing.pixels(fourthy, width)+top)
    love.graphics.line(Drawing.pixels(fourthx, width)+left,Drawing.pixels(fourthy, width)+top, Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top)
    love.graphics.line(Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top, pmx,pmy)
    local mx,my = Drawing.coord(pmx-left, width), Drawing.coord(pmy-top, width)
    love.graphics.line(Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top, Drawing.pixels(second.x, width)+left,Drawing.pixels(second.y, width)+top)
    love.graphics.line(Drawing.pixels(second.x, width)+left,Drawing.pixels(second.y, width)+top, Drawing.pixels(thirdx, width)+left,Drawing.pixels(thirdy, width)+top)
    love.graphics.line(Drawing.pixels(thirdx, width)+left,Drawing.pixels(thirdy, width)+top, Drawing.pixels(fourthx, width)+left,Drawing.pixels(fourthy, width)+top)
    love.graphics.line(Drawing.pixels(fourthx, width)+left,Drawing.pixels(fourthy, width)+top, Drawing.pixels(first.x, width)+left,Drawing.pixels(first.y, width)+top)
  • resolve order conflict in drawing.lua at line 166
    [10.3198]
  • edit in drawing.lua at line 166
    [0.6053]
    [10.3372]
    local cx,cy = Drawing.pixels(center.x, width)+left, Drawing.pixels(center.y, width)+top
    Drawing.draw_polygon(State.current_drawing_submode, cx,cy, App.mouse_x(),App.mouse_y())
  • resurrect zombie in drawing.lua at line 195
    [10.646][10.3363:3517](),[10.646][10.3363:3517]()
    function Drawing.draw_polygon(n, cx,cy, x1,y1)
    local r = geom.dist(cx,cy, x1,y1)
    local theta = 2*math.pi/n
    local prevx,prevy = x1,y1
    for i=1,n do
  • resurrect zombie in drawing.lua at line 201
    [3.1147][10.3517:3639](),[10.3517][10.3517:3639](),[10.3517][10.3517:3639]()
    x,y = geom.rotate(cx,cy, prevx,prevy, theta)
    love.graphics.line(prevx,prevy, x,y)
    prevx,prevy = x,y
    end
    end
  • edit in drawing.lua at line 206
    [10.3639]
    [10.5380]
  • edit in drawing.lua at line 213
    [10.1252][10.239:289](),[10.1252][10.239:289](),[10.1464][10.3640:3895](),[10.1464][10.3640:3895]()
    elseif Current_drawing_mode == 'rectangle' then
    elseif Current_drawing_mode == 'polygon' then
    local j = Drawing.insert_point(drawing.points, Drawing.coord(x-Margin_left), Drawing.coord(y-drawing.y))
    drawing.pending = {mode=Current_drawing_mode, num_vertices=Current_drawing_submode, center=j}
  • replacement in drawing.lua at line 217
    [10.422][9.838:993]()
    local j = Drawing.find_or_insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width), State.width)
    [10.422]
    [10.537]
    local j = Drawing.insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width))
  • replacement in drawing.lua at line 219
    [10.599][10.599:740](),[10.740][9.994:1149]()
    elseif State.current_drawing_mode == 'polygon' or State.current_drawing_mode == 'rectangle' or State.current_drawing_mode == 'square' then
    local j = Drawing.find_or_insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width), State.width)
    [10.599]
    [10.855]
    elseif State.current_drawing_mode == 'rectangle' then
    local j = Drawing.insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width))
  • edit in drawing.lua at line 222
    [10.925]
    [10.925]
    elseif State.current_drawing_mode == 'polygon' then
    local j = Drawing.insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width))
    drawing.pending = {mode=State.current_drawing_mode, num_vertices=State.current_drawing_submode, center=j}
  • replacement in drawing.lua at line 226
    [10.978][9.1150:1305]()
    local j = Drawing.find_or_insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width), State.width)
    [10.978]
    [10.1093]
    local j = Drawing.insert_point(drawing.points, Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width))
  • resurrect zombie in drawing.lua at line 264
    [10.1864][10.1864:1875](),[10.1864][10.1864:1875]()
    end
    end
  • replacement in drawing.lua at line 337
    [10.3948][10.3948:4100]()
    local mx,my = Drawing.coord(x-Margin_left), Drawing.coord(y-drawing.y)
    drawing.pending.p1 = Drawing.insert_point(drawing.points, mx,my)
    [10.3948]
    [10.4100]
    local mx,my = Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width)
    drawing.pending.p1 = Drawing.find_or_insert_point(drawing.points, mx,my, State.width)
  • resurrect zombie in drawing.lua at line 368
    [10.5858][2.15:64](),[10.5858][2.15:64]()
    elseif App.mouse_down(1) and chord == '2' then
  • edit in drawing.lua at line 368
    [10.1665]
    [2.15]
    State.current_drawing_mode = 'freehand'
  • replacement in drawing.lua at line 370
    [2.64][10.64:98](),[10.64][10.64:98]()
    Current_drawing_mode = 'line'
    [2.64]
    [10.98]
    State.current_drawing_mode = 'line'
  • replacement in drawing.lua at line 381
    [2.120][10.724:758](),[10.724][10.724:758]()
    Current_drawing_mode = 'line'
    [2.120]
    [10.758]
    State.current_drawing_mode = 'line'
  • replacement in drawing.lua at line 383
    [10.807][10.807:900]()
    Current_drawing_mode = 'manhattan'
    local drawing = Drawing.select_drawing_at_mouse()
    [10.807]
    [10.900]
    State.current_drawing_mode = 'manhattan'
    local drawing = Drawing.select_drawing_at_mouse(State)
  • replacement in drawing.lua at line 386
    [10.947][10.947:1069]()
    drawing.pending.p1 = Drawing.insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y)
    [10.947]
    [10.1069]
    drawing.pending.p1 = Drawing.find_or_insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y, State.width)
  • edit in drawing.lua at line 396
    [10.1550][10.1550:1589](),[10.1550][10.1550:1589]()
    Current_drawing_mode = 'manhattan'
  • resurrect zombie in drawing.lua at line 396
    [10.1550][10.285:330](),[10.1550][10.285:330]()
    State.current_drawing_mode = 'manhattan'
  • edit in drawing.lua at line 397
    [10.1721][10.331:374](),[10.1721][10.331:374](),[10.1771][10.375:418](),[10.1771][10.375:418](),[10.418][10.198:251](),[10.418][10.198:251]()
    State.current_drawing_mode = 'polygon'
    State.current_drawing_mode = 'polygon'
    local _,drawing = Drawing.current_drawing(State)
  • edit in drawing.lua at line 412
    [10.1983][10.554:596](),[10.1983][10.554:596]()
    State.current_drawing_mode = 'square'
  • resurrect zombie in drawing.lua at line 412
    [10.596][10.306:359](),[10.596][10.306:359]()
    local _,drawing = Drawing.current_drawing(State)
  • edit in drawing.lua at line 412
    [10.7207]
    [10.306]
    elseif App.mouse_down(1) and chord == 'p' and State.current_drawing_mode == 'rectangle' then
  • edit in drawing.lua at line 414
    [10.7998][10.597:690](),[10.7998][10.597:690](),[10.7998][10.597:690](),[10.690][10.360:413](),[10.690][10.360:413](),[10.690][10.360:413](),[10.9759][10.650:739](),[10.9759][10.650:739](),[10.9759][10.797:936](),[10.9759][10.797:936](),[10.936][10.414:467](),[10.936][10.414:467]()
    elseif App.mouse_down(1) and chord == 'p' and State.current_drawing_mode == 'polygon' then
    local _,drawing = Drawing.current_drawing(State)
    elseif App.mouse_down(1) and chord == 'p' and Current_drawing_mode == 'rectangle' then
    elseif App.mouse_down(1) and chord == 'p' and (State.current_drawing_mode == 'rectangle' or State.current_drawing_mode == 'square') then
    local _,drawing = Drawing.current_drawing(State)
  • resurrect zombie in drawing.lua at line 414
    [10.467][9.2537:2661](),[10.467][9.2537:2661](),[9.2661][10.7963:8042](),[10.39140][10.7963:8042](),[10.39140][10.7963:8042]()
    local mx,my = Drawing.coord(App.mouse_x()-State.left, State.width), Drawing.coord(App.mouse_y()-drawing.y, State.width)
    local j = Drawing.find_or_insert_point(drawing.points, mx,my, State.width)
  • replacement in drawing.lua at line 421
    [10.4556][10.4556:4625]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 3
    [10.4556]
    [10.4625]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 3
  • replacement in drawing.lua at line 424
    [10.4680][10.4680:4749]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 4
    [10.4680]
    [10.4749]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 4
  • replacement in drawing.lua at line 427
    [10.4804][10.4804:4873]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 5
    [10.4804]
    [10.4873]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 5
  • replacement in drawing.lua at line 430
    [10.4928][10.4928:4997]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 6
    [10.4928]
    [10.4997]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 6
  • replacement in drawing.lua at line 433
    [10.5052][10.5052:5121]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 7
    [10.5052]
    [10.5121]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 7
  • replacement in drawing.lua at line 436
    [10.5176][10.5176:5245]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 8
    [10.5176]
    [10.5245]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 8
  • replacement in drawing.lua at line 439
    [10.5300][10.5300:5369]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 9
    [10.5300]
    [10.5369]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 9
  • replacement in drawing.lua at line 442
    [10.5418][10.5418:5543]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 3
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.5418]
    [10.5543]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 3
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 446
    [10.5592][10.5592:5717]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 4
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.5592]
    [10.5717]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 4
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 450
    [10.5766][10.5766:5891]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 5
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.5766]
    [10.5891]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 5
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 454
    [10.5940][10.5940:6065]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 6
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.5940]
    [10.6065]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 6
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 458
    [10.6114][10.6114:6239]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 7
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.6114]
    [10.6239]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 7
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 462
    [10.6288][10.6288:6413]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 8
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.6288]
    [10.6413]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 8
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 466
    [10.6462][10.6462:6587]()
    Current_drawing_mode = 'polygon'
    Current_drawing_submode = 9
    Drawing.switch_current_drawing_pending_to_polygon()
    [10.6462]
    [10.2149]
    State.current_drawing_mode = 'polygon'
    State.current_drawing_submode = 9
    Drawing.switch_current_drawing_pending_to_polygon(State)
  • replacement in drawing.lua at line 540
    [10.8179][10.6588:6695]()
    function Drawing.switch_current_drawing_pending_to_polygon()
    local _,drawing = Drawing.current_drawing()
    [10.8179]
    [10.6695]
    function Drawing.switch_current_drawing_pending_to_polygon(State)
    local _,drawing = Drawing.current_drawing(State)
  • replacement in drawing.lua at line 543
    [10.6740][10.6740:6864]()
    drawing.pending.center = Drawing.insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y)
    [10.6740]
    [10.6864]
    drawing.pending.center = Drawing.find_or_insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y, State.width)
  • replacement in drawing.lua at line 552
    [10.7281][10.7281:7338]()
    drawing.pending.num_vertices = Current_drawing_submode
    [10.7281]
    [10.7338]
    drawing.pending.num_vertices = State.current_drawing_submode
  • edit in drawing.lua at line 714
    [10.413][9.2412:2536](),[10.413][9.2412:2536](),[10.413][9.2412:2536](),[9.2536][10.7883:7962](),[10.39041][10.7883:7962](),[10.39041][10.7883:7962](),[10.39041][10.7883:7962](),[10.7486][10.7731:7882](),[10.7486][10.7731:7882](),[10.6139][10.7427:7578](),[10.6139][10.7427:7578](),[10.1665][10.112:156](),[10.1665][10.112:156](),[10.64][10.157:197](),[10.64][10.157:197](),[10.197][10.84:137](),[10.197][10.84:137](),[10.724][10.198:238](),[10.724][10.198:238](),[10.807][10.239:284](),[10.807][10.239:284](),[10.284][10.138:197](),[10.284][10.138:197](),[10.193][10.7139:7282](),[10.193][10.7139:7282](),[10.947][10.7283:7426](),[10.947][10.7283:7426](),[10.6000][10.6886:7138](),[10.6000][10.6886:7138](),[10.2366][9.2095:2201](),[10.2366][9.2095:2201](),[10.1369][10.6517:6632](),[10.1369][10.6517:6632](),[10.1231][9.1883:1987](),[10.1231][9.1883:1987](),[10.1231][9.1883:1987]()
    local mx,my = Drawing.coord(App.mouse_x()-State.left, State.width), Drawing.coord(App.mouse_y()-drawing.y, State.width)
    local j = Drawing.find_or_insert_point(drawing.points, mx,my, State.width)
    drawing.pending.vertices = {Drawing.find_or_insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y, State.width)}
    drawing.pending.vertices = {Drawing.find_or_insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y, State.width)}
    State.current_drawing_mode = 'freehand'
    State.current_drawing_mode = 'line'
    local _,drawing = Drawing.current_drawing(State)
    State.current_drawing_mode = 'line'
    State.current_drawing_mode = 'manhattan'
    local drawing = Drawing.select_drawing_at_mouse(State)
    drawing.pending.p1 = Drawing.find_or_insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y, State.width)
    drawing.pending.p1 = Drawing.find_or_insert_point(drawing.points, drawing.pending.points[1].x, drawing.pending.points[1].y, State.width)
    table.insert(drawing.pending.vertices, Drawing.find_or_insert_point(drawing.points, thirdx,thirdy, State.width))
    table.insert(drawing.pending.vertices, Drawing.find_or_insert_point(drawing.points, fourthx,fourthy, State.width))
    local mx,my = Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width)
    table.insert(drawing.pending.vertices, Drawing.find_or_insert_point(drawing.points, mx,my, State.width))
    local mx,my = Drawing.coord(x-State.left, State.width), Drawing.coord(y-drawing.y, State.width)
  • resolve order conflict in drawing.lua at line 714
    [10.1525]