If I'd had this stuff in my test harness earlier, two recent commits would have failed tests and given me early warning: ff88238ff1 ff88a2a927
JFFUF5ALUWPDM7IEDEZVAYG2SVXO334STONRGKVB3QKY2TT5QGBQC PTT4K4EURCVSZDFDNBEKMJORH5WQYZHQFHU4MILFZUGETC7XIEBQC VCMS2CWTJDOW2FYCDH4ZSMVJAP6W4ZV4VWHJPPGGNHRX47GWYAGAC H4K2GFILFMCVWL2EBTPHPYXLVH6ZBFWTH2FIQXOTMQAMJZJ2HSGQC F3OOGMME4ETOHRX4T7IQWX2JHMVXO4PPQK44OIC3LJLQSAL36IRAC WSXSEZQ2NLWSCVBFS6DBQMNDHPL7RWDTAPZZHT3K3UMXSBMBQH4AC RMKMPFT5L67WIFWIO4GTC6XESX6UPKNL4GPNQLOBC5CXSUZABEHQC JAXPXLEBWHBLNLMZ5VCSO63X6Z5WT4KZKWBOVACCAVX4QJAWWNYQC G3C4FKPRNQ35BW3YU2RAON6O2HZBLIVDASR6VP5BU4I4L37K24PAC IDG26SXKRKPRUQM3G2MMBQR3UZGNU7NCWJBBDKKIM5IGUNJQ2URQC LXTTOB33N2HCUZFIUDRQGGBVHK2HODRG4NBLH6RXRQZDCHF27BSAC WAR3HXHTN7JZVV6TFMU2F3QYAG6NDH7DN7KKPTM2ICEHRNQYP6PAC ZLJGZYQGQ2S4UFWTVF4PQDSGMP6A4IS4GDHCMBAAA5SK2N2NWR3QC BYG5CEMVXANDTBI2ORNVMEY6K3EBRIHZHS4QBK27VONJC5537COQC XNFTJHC4QSHNSIWNN7K6QZEZ37GTQYKHS4EPNSVPQCUSWREROGIQC BULPIBEGL7TMK6CVIE7IS7WGAHGOSUJBGJSFQK542MOWGHP2ADQQC 4QQBMWLLIA42YP6FBFC445ABQH62RRJBL5KKILTERJALPOJCYK4QC R6GUSTBY5ZHR7E46DSIDQDNZDJI6QMZQDC7RPQMQWLGWQKXU6HVQC Z4XRNDTRTGSZHNB65WNHOVUBFW4QWQABLVSK4RM3QJHGK33DMRJAC OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC NQWWTGXRLSBASOSP75FPOSVYP664VYRFQH7MY5LALLIP2VEBQMCQC LS55YKGWKICTQTAHR5KLMNDOL6CDI4ATT3NT5Z2YL5IM3CRQOONQC HOSPP2ANSW654DYRTC6CQUQA2GUKV6T2FI7QBKXD2DZS3R32IMGAC 65XHTZEKUTGHMOIWAFRH7ZVGUP4DWBCUT2TN4Y3LHYILKWTTBLKAC TVM2WIHHCOTGYGJ4EL6MIUVH22Y4TU3HHHUFWAVVJQAT2ARCA2NQC 252M2QMDBMNWHBZY5MDSC7WVYO5JBLJYPVMW5W4IVJCZVYRQ5IQQC YJGADSGKT43NZWJL4BKCN6LCBVDNNHED6XGN76PWF54R3LNM46LAC BLWAYPKV3MLDZ4ALXLUJ25AIR6PCIL4RFYNRYLB26GFVC2KQBYBAC LUNH47XXUUITDLE6NBI3J7GJQWQ45OQAGXY2HJI4HRPOR2GUULPAC NYQ7HD4D5L44UORK52TH7CAEXYN5CE4ZUVLCWMY6XXPYHXVBTGHAC WTDKUACNTWB4KD34TZZNPILNX4FQ6MR64XYBAA5GOMICF73WLIAAC RT6EV6OPUYCXYZOX2PHFXJ7KT77KHNEVINEGQXIQLHQVKPGTN6VQC SRVDX4I5QKWAH3Y5DX25PG34U7NY55H46ZYG2APH47BUZT3EJ2HAC YCDYGEZUKVVFRLV5TKF2VYPDXWIHDSZD32KINFARWAJX4X3JPSFAC 6UZ2JNZECLGR4VFEPQKEJWORNOMNKZFS5DV4TVXDKG3IX3ZPLDSAC VHQCNMARPMNBSIUFLJG7HVK4QGDNPCGNVFLHS3I4IGNVSV5MRLYQC 3RGHOJ25MCTQ5CRQADFIVJ53QZWRSIQOFGXLFGKQ765QABJ5S54AC AD34IX2ZSGYGU3LGY2IZOZNKD4HRQOYJVG5UWMWLXJZJSM62FFOAC 3QNOKBFMKBGXBVJIRHR2444JRRMBTABHE4674NR3DT67RRM2X6GAC JF5L2BBS7ESMKHNGKLXI2F32GZKET2ICJ4KT2L5BMH3P2L2Y5MRAC 6E3HVYWFP3JLJ3DJ5BH4WGJUXQV5MDCBCE5GH3SXRHRQZOG4VJLQC 2ENZW7TVCS47BWCA4AIEVGKGMT4Y2TSM5IJ7O5K2VSWNXIN3SG4QC AVTNUQYRBW7IX2YQ3KDLVQ23RGW3BAKTAE7P73ASBYNKOHMQMH5AC App.run_after_mousepress(screen_left_margin+8,Margin_top+5, '1')App.run_after_mouserelease(screen_left_margin+8,Margin_top+5, '1')
App.run_after_mouse_press(screen_left_margin+8,Margin_top+5, '1')App.run_after_mouse_release(screen_left_margin+8,Margin_top+5, '1')
App.keypress('lshift')App.run_after_mousepress(screen_left_margin+20,Margin_top+5, '1')App.run_after_mouserelease(screen_left_margin+20,Margin_top+Line_height+5, '1')App.keyrelease('lshift')
App.fake_key_press('lshift')App.run_after_mouse_press(screen_left_margin+20,Margin_top+5, '1')App.run_after_mouse_release(screen_left_margin+20,Margin_top+Line_height+5, '1')App.fake_key_release('lshift')
App.run_after_mousepress(screen_left_margin+8,Margin_top+5, '1')App.run_after_mouserelease(screen_left_margin+8,Margin_top+5, '1')
App.run_after_mouse_press(screen_left_margin+8,Margin_top+5, '1')App.run_after_mouse_release(screen_left_margin+8,Margin_top+5, '1')
App.keypress('lshift')App.run_after_mousepress(screen_left_margin+20,Margin_top+5, '1')App.run_after_mouserelease(screen_left_margin+20,Margin_top+Line_height+5, '1')
App.fake_key_press('lshift')App.run_after_mouse_press(screen_left_margin+20,Margin_top+5, '1')App.run_after_mouse_release(screen_left_margin+20,Margin_top+Line_height+5, '1')
App.keypress('lshift')App.run_after_mousepress(screen_left_margin+20,Margin_top+5, '1')App.run_after_mouserelease(screen_left_margin+8,Margin_top+Line_height+5, '1')App.keyrelease('lshift')
App.fake_key_press('lshift')App.run_after_mouse_press(screen_left_margin+20,Margin_top+5, '1')App.run_after_mouse_release(screen_left_margin+8,Margin_top+Line_height+5, '1')App.fake_key_release('lshift')
elseif love.mouse.isDown('1') and chord == 'p' and (Current_drawing_mode == 'polygon' or Current_drawing_mode == 'rectangle' or Current_drawing_mode == 'square') then
elseif App.mouse_down('1') and chord == 'p' and (Current_drawing_mode == 'polygon' or Current_drawing_mode == 'rectangle' or Current_drawing_mode == 'square') then
function App.modifier_down(key)return App.modifier_keys[key]
App.fake_mouse_state = {x=-1, y=-1} -- x,y always setfunction App.fake_mouse_press(x,y, button)App.fake_mouse_state.x = xApp.fake_mouse_state.y = yApp.fake_mouse_state[button] = trueendfunction App.fake_mouse_release(x,y, button)App.fake_mouse_state.x = xApp.fake_mouse_state.y = yApp.fake_mouse_state[button] = nilendfunction App.mouse_move(x,y)App.fake_mouse_state.x = xApp.fake_mouse_state.y = yendfunction App.mouse_down(button)return App.fake_mouse_state[button]endfunction App.mouse_x()return App.fake_mouse_state.xendfunction App.mouse_y()return App.fake_mouse_state.y