Skip to content

Commit ac15570

Browse files
committed
Shapes: update cursor before drag/resize
* Update cursor before drag/resize interactions starts, so that the user knows what interactions will be initiated on click.
1 parent 82b4102 commit ac15570

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

src/components/shapes/index.js

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -361,17 +361,35 @@ function setupDragElement(gd, shapePath, shapeOptions, index) {
361361

362362
var xa, ya, x2p, y2p, p2x, p2y;
363363

364-
var dragBBox, dragMode;
365-
366364
var dragOptions = {
367-
element: shapePath.node(),
368-
prepFn: startDrag,
369-
doneFn: endDrag
370-
};
365+
setCursor: updateDragMode,
366+
element: shapePath.node(),
367+
prepFn: startDrag,
368+
doneFn: endDrag
369+
},
370+
dragBBox = dragOptions.element.getBoundingClientRect(),
371+
dragMode;
371372

372373
dragElement.init(dragOptions);
373374

374-
function startDrag(evt, startX, startY) {
375+
function updateDragMode(evt) {
376+
// choose 'move' or 'resize'
377+
// based on initial position of cursor within the drag element
378+
var w = dragBBox.right - dragBBox.left,
379+
h = dragBBox.bottom - dragBBox.top,
380+
x = evt.clientX - dragBBox.left,
381+
y = evt.clientY - dragBBox.top,
382+
cursor = (w > MINWIDTH && h > MINHEIGHT) ?
383+
dragElement.getCursor(x / w, 1 - y / h) :
384+
'move';
385+
386+
setCursor(shapePath, cursor);
387+
388+
// possible values 'move', 'sw', 'w', 'se', 'e', 'ne', 'n', 'nw' and 'w'
389+
dragMode = cursor.split('-')[0];
390+
}
391+
392+
function startDrag(evt) {
375393
// setup conversion functions
376394
xa = Axes.getFromId(gd, shapeOptions.xref);
377395
ya = Axes.getFromId(gd, shapeOptions.yref);
@@ -418,23 +436,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index) {
418436

419437
update = {};
420438

421-
// choose 'move' or 'resize'
422-
// based on initial position of cursor within the drag element
423-
dragBBox = dragOptions.element.getBoundingClientRect();
424-
425-
var w = dragBBox.right - dragBBox.left,
426-
h = dragBBox.bottom - dragBBox.top,
427-
x = startX - dragBBox.left,
428-
y = startY - dragBBox.top,
429-
cursor = (w > MINWIDTH && h > MINHEIGHT) ?
430-
dragElement.getCursor(x / w, 1 - y / h) :
431-
'move';
432-
433-
setCursor(shapePath, cursor);
434-
435-
// possible values 'move', 'sw', 'w', 'se', 'e', 'ne', 'n', 'nw' and 'w'
436-
dragMode = cursor.split('-')[0];
437-
439+
// setup dragMode and the corresponding handler
440+
updateDragMode(evt);
438441
dragOptions.moveFn = (dragMode === 'move') ? moveShape : resizeShape;
439442
}
440443

0 commit comments

Comments
 (0)