about summary refs log tree commit diff stats
path: root/drawing.lua
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-06-17 22:52:34 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-06-17 22:53:05 -0700
commit26995dd62e72b5d8075429c29b311125dbef5920 (patch)
treea17ccf09c18cbc5febf78462a7c85e6cec827187 /drawing.lua
parent1ecc3f43e5949596ccb1bf9e2c9ad143d779deb1 (diff)
downloadlines.love-26995dd62e72b5d8075429c29b311125dbef5920.tar.gz
correct commit f3abc2cbf2
I can't be trusted to do anything without a test.

This should fix #5. Please reopen if it doesn't.
Diffstat (limited to 'drawing.lua')
-rw-r--r--drawing.lua29
1 files changed, 22 insertions, 7 deletions
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