-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Implement draggable shapes #660
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
aba25e3
Shapes: make shapes draggable
n-riesco 2802e0a
test: draggable shapes
n-riesco 5a62051
test: try smaller shape drags
n-riesco d923637
Revert "test: try smaller shape drags"
n-riesco 2340a96
test: replace MouseEvent with window.MouseEvent
n-riesco 74173b4
Revert "test: replace MouseEvent with window.MouseEvent"
n-riesco 0e522a9
test: compatibility workaround for Firefox 38
n-riesco d027674
Shapes: rename shapePath to getPathString
n-riesco 9905594
Shapes: add function setupDragElement(node)
n-riesco e9f8ac4
Shapes: add startDrag, moveShape and endDrag
n-riesco abd8e93
Shapes: add line, rect and circle resize
n-riesco 01903bd
test: Update shape drag test
n-riesco 2167261
test: shapes are resizeable
n-riesco 82b4102
DragElement: add options.setCursor
n-riesco ac15570
Shapes: update cursor before drag/resize
n-riesco 5c1ff68
Shapes: shiftKey forces move drag mode
n-riesco e8b587c
test: draggable shapes referenced to timestamps
n-riesco 5b965ab
Shapes: fix drag of shapes linked to timestamps
n-riesco File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -361,17 +361,35 @@ function setupDragElement(gd, shapePath, shapeOptions, index) { | |
|
||
var xa, ya, x2p, y2p, p2x, p2y; | ||
|
||
var dragBBox, dragMode; | ||
|
||
var dragOptions = { | ||
element: shapePath.node(), | ||
prepFn: startDrag, | ||
doneFn: endDrag | ||
}; | ||
setCursor: updateDragMode, | ||
element: shapePath.node(), | ||
prepFn: startDrag, | ||
doneFn: endDrag | ||
}, | ||
dragBBox = dragOptions.element.getBoundingClientRect(), | ||
dragMode; | ||
|
||
dragElement.init(dragOptions); | ||
|
||
function startDrag(evt, startX, startY) { | ||
function updateDragMode(evt) { | ||
// choose 'move' or 'resize' | ||
// based on initial position of cursor within the drag element | ||
var w = dragBBox.right - dragBBox.left, | ||
h = dragBBox.bottom - dragBBox.top, | ||
x = evt.clientX - dragBBox.left, | ||
y = evt.clientY - dragBBox.top, | ||
cursor = (w > MINWIDTH && h > MINHEIGHT) ? | ||
dragElement.getCursor(x / w, 1 - y / h) : | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nicely done here. |
||
'move'; | ||
|
||
setCursor(shapePath, cursor); | ||
|
||
// possible values 'move', 'sw', 'w', 'se', 'e', 'ne', 'n', 'nw' and 'w' | ||
dragMode = cursor.split('-')[0]; | ||
} | ||
|
||
function startDrag(evt) { | ||
// setup conversion functions | ||
xa = Axes.getFromId(gd, shapeOptions.xref); | ||
ya = Axes.getFromId(gd, shapeOptions.yref); | ||
|
@@ -418,23 +436,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index) { | |
|
||
update = {}; | ||
|
||
// choose 'move' or 'resize' | ||
// based on initial position of cursor within the drag element | ||
dragBBox = dragOptions.element.getBoundingClientRect(); | ||
|
||
var w = dragBBox.right - dragBBox.left, | ||
h = dragBBox.bottom - dragBBox.top, | ||
x = startX - dragBBox.left, | ||
y = startY - dragBBox.top, | ||
cursor = (w > MINWIDTH && h > MINHEIGHT) ? | ||
dragElement.getCursor(x / w, 1 - y / h) : | ||
'move'; | ||
|
||
setCursor(shapePath, cursor); | ||
|
||
// possible values 'move', 'sw', 'w', 'se', 'e', 'ne', 'n', 'nw' and 'w' | ||
dragMode = cursor.split('-')[0]; | ||
|
||
// setup dragMode and the corresponding handler | ||
updateDragMode(evt); | ||
dragOptions.moveFn = (dragMode === 'move') ? moveShape : resizeShape; | ||
} | ||
|
||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great. We should add a
setCursor
handler for annotations too.That will deserve a PR of it own. Ticket here: #679