From 26995dd62e72b5d8075429c29b311125dbef5920 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 17 Jun 2022 22:52:34 -0700 Subject: correct commit f3abc2cbf2 I can't be trusted to do anything without a test. This should fix #5. Please reopen if it doesn't. --- drawing.lua | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'drawing.lua') diff --git a/drawing.lua b/drawing.lua index 624fad7..7ebf177 100644 --- a/drawing.lua +++ b/drawing.lua @@ -243,24 +243,39 @@ function Drawing.update() local mx,my = Drawing.coord(x-Margin_left), Drawing.coord(y-drawing.y) drawing.pending.target_point.x = mx drawing.pending.target_point.y = my + Drawing.relax_constraints(drawing, drawing.pending.target_point_index) end end elseif Current_drawing_mode == 'move' then if Drawing.in_drawing(drawing, x, y) then local mx,my = Drawing.coord(x-Margin_left), Drawing.coord(y-drawing.y) - if drawing.mode == 'manhattan' then - drawing.mode = 'line' - elseif drawing.mode == 'rectangle' or drawing.mode == 'square' then - drawing.mode = 'polygon' - end drawing.pending.target_point.x = mx drawing.pending.target_point.y = my + Drawing.relax_constraints(drawing, drawing.pending.target_point_index) end else -- do nothing end end +function Drawing.relax_constraints(drawing, p) + for _,shape in ipairs(drawing.shapes) do + if shape.mode == 'manhattan' then + if shape.p1 == p then + shape.mode = 'line' + elseif shape.p2 == p then + shape.mode = 'line' + end + elseif shape.mode == 'rectangle' or shape.mode == 'square' then + for _,v in ipairs(shape.vertices) do + if v == p then + shape.mode = 'polygon' + end + end + end + end +end + function Drawing.mouse_released(x,y, button) if Current_drawing_mode == 'move' then Current_drawing_mode = Previous_drawing_mode @@ -474,13 +489,13 @@ function Drawing.keychord_pressed(chord) end drawing.pending.mode = 'circle' elseif chord == 'C-u' and not App.mouse_down(1) then - local drawing_index,drawing,_,p = Drawing.select_point_at_mouse() + local drawing_index,drawing,i,p = Drawing.select_point_at_mouse() if drawing then if Previous_drawing_mode == nil then Previous_drawing_mode = Current_drawing_mode end Current_drawing_mode = 'move' - drawing.pending = {mode=Current_drawing_mode, target_point=p} + drawing.pending = {mode=Current_drawing_mode, target_point=p, target_point_index=i} Lines.current_drawing_index = drawing_index Lines.current_drawing = drawing end -- cgit 1.4.1-2-gfad0