|
@@ -388,6 +388,7 @@ var animationTimeline = function (window, document) {
|
|
// ctrl + a. Select all keyframes
|
|
// ctrl + a. Select all keyframes
|
|
if (e.which === 65 && e.ctrlKey) {
|
|
if (e.which === 65 && e.ctrlKey) {
|
|
performSelection(true);
|
|
performSelection(true);
|
|
|
|
+ redraw();
|
|
e.preventDefault();
|
|
e.preventDefault();
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
@@ -434,78 +435,75 @@ var animationTimeline = function (window, document) {
|
|
//redraw();
|
|
//redraw();
|
|
let isChanged = false;
|
|
let isChanged = false;
|
|
if (drag.type == 'timeline') {
|
|
if (drag.type == 'timeline') {
|
|
- isChanged = setTime(convertedMs);
|
|
|
|
- } else if (drag.type == 'keyframe' || drag.type == 'lane') {
|
|
|
|
|
|
+ isChanged |= setTime(convertedMs);
|
|
|
|
+ } else if ((drag.type == 'keyframe' || drag.type == 'lane') && drag.selectedItems) {
|
|
|
|
+ let offset = Math.floor(convertedMs - drag.ms);
|
|
|
|
+ if (Math.abs(offset) > 0) {
|
|
|
|
+ // dont allow to move less than zero.
|
|
|
|
+ drag.selectedItems.forEach(function (p) {
|
|
|
|
+ if (options.snapAllKeyframesOnMove) {
|
|
|
|
+ let toSet = snapMs(p.ms);
|
|
|
|
+ if (p.ms != toSet) {
|
|
|
|
+ p.ms = toSet;
|
|
|
|
+ isChanged = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ let newPostion = p.ms + offset;
|
|
|
|
+ if (newPostion < 0) {
|
|
|
|
+ offset = -p.ms;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
|
|
- if (drag.selectedItems) {
|
|
|
|
- let offset = Math.floor(convertedMs - drag.ms);
|
|
|
|
if (Math.abs(offset) > 0) {
|
|
if (Math.abs(offset) > 0) {
|
|
// dont allow to move less than zero.
|
|
// dont allow to move less than zero.
|
|
drag.selectedItems.forEach(function (p) {
|
|
drag.selectedItems.forEach(function (p) {
|
|
- if (options.snapAllKeyframesOnMove) {
|
|
|
|
- let toSet = snapMs(p.ms);
|
|
|
|
- if (p.ms != toSet) {
|
|
|
|
- p.ms = toSet;
|
|
|
|
- isChanged = true;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- let newPostion = p.ms + offset;
|
|
|
|
- if (newPostion < 0) {
|
|
|
|
- offset = -p.ms;
|
|
|
|
|
|
+ let ms = p.ms + offset;
|
|
|
|
+
|
|
|
|
+ let toSet = p.ms + offset;
|
|
|
|
+ if (p.ms != toSet) {
|
|
|
|
+ p.ms = toSet;
|
|
|
|
+ isChanged = true;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
- if (Math.abs(offset) > 0) {
|
|
|
|
- // dont allow to move less than zero.
|
|
|
|
- drag.selectedItems.forEach(function (p) {
|
|
|
|
- let ms = p.ms + offset;
|
|
|
|
-
|
|
|
|
- let toSet = p.ms + offset;
|
|
|
|
- if (p.ms != toSet) {
|
|
|
|
- p.ms = toSet;
|
|
|
|
- isChanged = true;
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (isChanged) {
|
|
|
|
- drag.ms += offset;
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (isChanged) {
|
|
|
|
+ drag.ms += offset;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (isChanged) {
|
|
if (isChanged) {
|
|
// move all selected keyframes
|
|
// move all selected keyframes
|
|
redraw();
|
|
redraw();
|
|
- } else {
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- // Cancel mouse move when focus was lost.
|
|
|
|
|
|
+ // Fallback. Cancel mouse move when focus was lost and mouse down is still counted.
|
|
cleanUpSelection();
|
|
cleanUpSelection();
|
|
|
|
+ redraw();
|
|
}
|
|
}
|
|
- redraw();
|
|
|
|
} else {
|
|
} else {
|
|
|
|
+ let cursor = 'default';
|
|
let draggable = getDraggable(currentPos);
|
|
let draggable = getDraggable(currentPos);
|
|
if (draggable) {
|
|
if (draggable) {
|
|
if (draggable.type == 'lane') {
|
|
if (draggable.type == 'lane') {
|
|
- canvas.style.cursor = "ew-resize";
|
|
|
|
|
|
+ cursor = "ew-resize";
|
|
}
|
|
}
|
|
else if (draggable.type == 'keyframe') {
|
|
else if (draggable.type == 'keyframe') {
|
|
- canvas.style.cursor = "pointer";
|
|
|
|
|
|
+ cursor = "pointer";
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- canvas.style.cursor = "ew-resize";
|
|
|
|
|
|
+ cursor = "ew-resize";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- canvas.style.cursor = 'default';
|
|
|
|
|
|
+
|
|
|
|
+ if (canvas.style.cursor != cursor) {
|
|
|
|
+ canvas.style.cursor = cursor;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}, false);
|
|
}, false);
|
|
@@ -532,6 +530,7 @@ var animationTimeline = function (window, document) {
|
|
|
|
|
|
|
|
|
|
function performClick(pos, args, drag) {
|
|
function performClick(pos, args, drag) {
|
|
|
|
+ let isChanged = false;
|
|
if (drag && drag.type == 'keyframe') {
|
|
if (drag && drag.type == 'keyframe') {
|
|
let isSelected = true;
|
|
let isSelected = true;
|
|
if ((drag.startedWithCtrl && args.ctrlKey) || (drag.startedWithShiftKey && args.shiftKey)) {
|
|
if ((drag.startedWithCtrl && args.ctrlKey) || (drag.startedWithShiftKey && args.shiftKey)) {
|
|
@@ -540,24 +539,26 @@ var animationTimeline = function (window, document) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Reverse selected keyframe selection by a click:
|
|
// Reverse selected keyframe selection by a click:
|
|
- performSelection(isSelected, drag.obj, 'keyframe', args.ctrlKey || args.shiftKey);
|
|
|
|
|
|
+ isChanged |= performSelection(isSelected, drag.obj, 'keyframe', args.ctrlKey || args.shiftKey);
|
|
|
|
|
|
if (args.shiftKey) {
|
|
if (args.shiftKey) {
|
|
// change timeline pos:
|
|
// change timeline pos:
|
|
let convertedMs = mousePosToMs(pos.x, true);
|
|
let convertedMs = mousePosToMs(pos.x, true);
|
|
// Set current timeline position if it's not a drag or selection rect small or fast click.
|
|
// Set current timeline position if it's not a drag or selection rect small or fast click.
|
|
- setTime(convertedMs);
|
|
|
|
|
|
+ isChanged |= setTime(convertedMs);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
// deselect keyframes if any:
|
|
// deselect keyframes if any:
|
|
- performSelection(false);
|
|
|
|
|
|
+ isChanged |= performSelection(false);
|
|
|
|
|
|
// change timeline pos:
|
|
// change timeline pos:
|
|
let convertedMs = mousePosToMs(pos.x, true);
|
|
let convertedMs = mousePosToMs(pos.x, true);
|
|
// Set current timeline position if it's not a drag or selection rect small or fast click.
|
|
// Set current timeline position if it's not a drag or selection rect small or fast click.
|
|
- setTime(convertedMs);
|
|
|
|
|
|
+ isChanged |= setTime(convertedMs);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ return isChanged;
|
|
}
|
|
}
|
|
|
|
|
|
selectedKeyframes = [];
|
|
selectedKeyframes = [];
|
|
@@ -702,7 +703,11 @@ var animationTimeline = function (window, document) {
|
|
let lastX = null;
|
|
let lastX = null;
|
|
let intervalReference = null;
|
|
let intervalReference = null;
|
|
let lastCallDate = null;
|
|
let lastCallDate = null;
|
|
- function startMoveInterval(x) {
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Automatically move canvas when selection and mouse over the bounds.
|
|
|
|
+ */
|
|
|
|
+ function startMoveInterval() {
|
|
if (!intervalReference) {
|
|
if (!intervalReference) {
|
|
// Repeat move calls to
|
|
// Repeat move calls to
|
|
intervalReference = setInterval(function () {
|
|
intervalReference = setInterval(function () {
|
|
@@ -712,6 +717,7 @@ var animationTimeline = function (window, document) {
|
|
}, 300);
|
|
}, 300);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
function clearMoveInterval() {
|
|
function clearMoveInterval() {
|
|
if (intervalReference) {
|
|
if (intervalReference) {
|
|
clearInterval(intervalReference);
|
|
clearInterval(intervalReference);
|
|
@@ -752,7 +758,6 @@ var animationTimeline = function (window, document) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
// One second distance:
|
|
// One second distance:
|
|
let speed = Math.floor(Math.max(options.stepPx, getDistance(x, canvas.clientWidth)));
|
|
let speed = Math.floor(Math.max(options.stepPx, getDistance(x, canvas.clientWidth)));
|
|
let step = canvas.clientWidth / scrollContainer.scrollWidth;
|
|
let step = canvas.clientWidth / scrollContainer.scrollWidth;
|
|
@@ -772,8 +777,6 @@ var animationTimeline = function (window, document) {
|
|
redraw();
|
|
redraw();
|
|
}
|
|
}
|
|
|
|
|
|
- scrollByMouse();
|
|
|
|
-
|
|
|
|
// Find ms from the the px coordinates
|
|
// Find ms from the the px coordinates
|
|
function pxToMS(coords) {
|
|
function pxToMS(coords) {
|
|
coords -= options.leftMarginPx;
|
|
coords -= options.leftMarginPx;
|
|
@@ -984,10 +987,6 @@ var animationTimeline = function (window, document) {
|
|
var toPos = getSharp(msToPx(size.to));
|
|
var toPos = getSharp(msToPx(size.to));
|
|
const laneHeight = getKeyframeLaneHeight(lane, laneSize.y);
|
|
const laneHeight = getKeyframeLaneHeight(lane, laneSize.y);
|
|
|
|
|
|
- if (fromPos <= 0) {
|
|
|
|
- fromPos = 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
size.x = fromPos;
|
|
size.x = fromPos;
|
|
size.y = laneHeight.y;
|
|
size.y = laneHeight.y;
|
|
size.w = getDistance(fromPos, toPos);
|
|
size.w = getDistance(fromPos, toPos);
|