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