From baf46b21b00f05fd175df9a097a5e728efdb5783 Mon Sep 17 00:00:00 2001
From: adroitwhiz <adroitwhiz@protonmail.com>
Date: Thu, 11 Jul 2019 11:58:56 -0400
Subject: [PATCH] Only call renderer.pick() on draggable drawables

---
 src/containers/stage.jsx | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/containers/stage.jsx b/src/containers/stage.jsx
index 8e1ac9248..3a61f5b17 100644
--- a/src/containers/stage.jsx
+++ b/src/containers/stage.jsx
@@ -342,16 +342,24 @@ class Stage extends React.Component {
     }
     onStartDrag (x, y) {
         if (this.state.dragId) return;
-        const drawableId = this.renderer.pick(x, y);
+
+        // Because pick queries are expensive, only perform them for drawables that are currently draggable.
+        let draggableTargets = this.props.vm.runtime.targets;
+        if (!this.props.useEditorDragStyle) {
+            draggableTargets = draggableTargets.filter(
+                target => Number.isFinite(target.drawableID) && target.draggable
+            );
+        }
+        if (draggableTargets.length === 0) return;
+
+        const draggableIDs = draggableTargets.map(target => target.drawableID);
+        const drawableId = this.renderer.pick(x, y, 1, 1, draggableIDs);
         if (drawableId === null) return;
         const targetId = this.props.vm.getTargetIdForDrawableId(drawableId);
         if (targetId === null) return;
 
         const target = this.props.vm.runtime.getTargetById(targetId);
 
-        // Do not start drag unless in editor drag mode or target is draggable
-        if (!(this.props.useEditorDragStyle || target.draggable)) return;
-
         // Dragging always brings the target to the front
         target.goToFront();
 
-- 
GitLab