Enable fast open for files which support it
This commit is contained in:
parent
f0a3930ed7
commit
17fe5299dc
173
src/main.js
173
src/main.js
|
|
@ -4449,97 +4449,106 @@ async function _open(path, returnJson = false) {
|
||||||
|
|
||||||
const objectOffsets = {};
|
const objectOffsets = {};
|
||||||
const frameIDs = []
|
const frameIDs = []
|
||||||
for (let action of file.actions) {
|
if (file.version < "1.7.5") {
|
||||||
if (!(action.name in actions)) {
|
for (let action of file.actions) {
|
||||||
await messageDialog(
|
if (!(action.name in actions)) {
|
||||||
`Invalid action ${action.name}. File may be corrupt.`,
|
await messageDialog(
|
||||||
{ title: "Error", kind: "error" },
|
`Invalid action ${action.name}. File may be corrupt.`,
|
||||||
);
|
{ title: "Error", kind: "error" },
|
||||||
return;
|
);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
console.log(action.name);
|
console.log(action.name);
|
||||||
// Data fixes
|
// Data fixes
|
||||||
if (file.version <= "1.5") {
|
if (file.version <= "1.5") {
|
||||||
// Fix coordinates of objects
|
// Fix coordinates of objects
|
||||||
if (action.name == "group") {
|
if (action.name == "group") {
|
||||||
let bbox;
|
let bbox;
|
||||||
for (let i of action.action.shapes) {
|
for (let i of action.action.shapes) {
|
||||||
const shape = pointerList[i];
|
const shape = pointerList[i];
|
||||||
if (bbox == undefined) {
|
if (bbox == undefined) {
|
||||||
bbox = shape.bbox();
|
bbox = shape.bbox();
|
||||||
} else {
|
} else {
|
||||||
growBoundingBox(bbox, shape.bbox());
|
growBoundingBox(bbox, shape.bbox());
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let i of action.action.objects) {
|
|
||||||
const object = pointerList[i]; // TODO: rotated bbox
|
|
||||||
if (bbox == undefined) {
|
|
||||||
bbox = object.bbox();
|
|
||||||
} else {
|
|
||||||
growBoundingBox(bbox, object.bbox());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const position = {
|
|
||||||
x: (bbox.x.min + bbox.x.max) / 2,
|
|
||||||
y: (bbox.y.min + bbox.y.max) / 2,
|
|
||||||
};
|
|
||||||
action.action.position = position;
|
|
||||||
objectOffsets[action.action.groupUuid] = position;
|
|
||||||
for (let shape of action.action.shapes) {
|
|
||||||
objectOffsets[shape] = position
|
|
||||||
}
|
|
||||||
} else if (action.name == "editFrame") {
|
|
||||||
for (let key in action.action.newState) {
|
|
||||||
if (key in objectOffsets) {
|
|
||||||
action.action.newState[key].x += objectOffsets[key].x;
|
|
||||||
action.action.newState[key].y += objectOffsets[key].y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let key in action.action.oldState) {
|
|
||||||
if (key in objectOffsets) {
|
|
||||||
action.action.oldState[key].x += objectOffsets[key].x;
|
|
||||||
action.action.oldState[key].y += objectOffsets[key].y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (action.name == "addKeyframe") {
|
|
||||||
for (let id in objectOffsets) {
|
|
||||||
objectOffsets[action.action.uuid.slice(0,8) + id.slice(8)] = objectOffsets[id]
|
|
||||||
}
|
|
||||||
} else if (action.name == "editShape") {
|
|
||||||
if (action.action.shape in objectOffsets) {
|
|
||||||
console.log("editing shape")
|
|
||||||
for (let curve of action.action.newCurves) {
|
|
||||||
for (let point of curve.points) {
|
|
||||||
point.x -= objectOffsets[action.action.shape].x
|
|
||||||
point.y -= objectOffsets[action.action.shape].y
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let curve of action.action.oldCurves) {
|
for (let i of action.action.objects) {
|
||||||
for (let point of curve.points) {
|
const object = pointerList[i]; // TODO: rotated bbox
|
||||||
point.x -= objectOffsets[action.action.shape].x
|
if (bbox == undefined) {
|
||||||
point.y -= objectOffsets[action.action.shape].y
|
bbox = object.bbox();
|
||||||
|
} else {
|
||||||
|
growBoundingBox(bbox, object.bbox());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const position = {
|
||||||
|
x: (bbox.x.min + bbox.x.max) / 2,
|
||||||
|
y: (bbox.y.min + bbox.y.max) / 2,
|
||||||
|
};
|
||||||
|
action.action.position = position;
|
||||||
|
objectOffsets[action.action.groupUuid] = position;
|
||||||
|
for (let shape of action.action.shapes) {
|
||||||
|
objectOffsets[shape] = position
|
||||||
|
}
|
||||||
|
} else if (action.name == "editFrame") {
|
||||||
|
for (let key in action.action.newState) {
|
||||||
|
if (key in objectOffsets) {
|
||||||
|
action.action.newState[key].x += objectOffsets[key].x;
|
||||||
|
action.action.newState[key].y += objectOffsets[key].y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let key in action.action.oldState) {
|
||||||
|
if (key in objectOffsets) {
|
||||||
|
action.action.oldState[key].x += objectOffsets[key].x;
|
||||||
|
action.action.oldState[key].y += objectOffsets[key].y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (action.name == "addKeyframe") {
|
||||||
|
for (let id in objectOffsets) {
|
||||||
|
objectOffsets[action.action.uuid.slice(0,8) + id.slice(8)] = objectOffsets[id]
|
||||||
|
}
|
||||||
|
} else if (action.name == "editShape") {
|
||||||
|
if (action.action.shape in objectOffsets) {
|
||||||
|
console.log("editing shape")
|
||||||
|
for (let curve of action.action.newCurves) {
|
||||||
|
for (let point of curve.points) {
|
||||||
|
point.x -= objectOffsets[action.action.shape].x
|
||||||
|
point.y -= objectOffsets[action.action.shape].y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let curve of action.action.oldCurves) {
|
||||||
|
for (let point of curve.points) {
|
||||||
|
point.x -= objectOffsets[action.action.shape].x
|
||||||
|
point.y -= objectOffsets[action.action.shape].y
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (file.version <= "1.6") {
|
||||||
if (file.version <= "1.6") {
|
// Fix copy-paste
|
||||||
// Fix copy-paste
|
if (action.name == "duplicateObject") {
|
||||||
if (action.name == "duplicateObject") {
|
const obj = pointerList[action.action.object];
|
||||||
const obj = pointerList[action.action.object];
|
const objJson = obj.toJSON(true);
|
||||||
const objJson = obj.toJSON(true);
|
objJson.idx =
|
||||||
objJson.idx =
|
action.action.uuid.slice(0, 8) +
|
||||||
action.action.uuid.slice(0, 8) +
|
action.action.object.slice(8);
|
||||||
action.action.object.slice(8);
|
action.action.items = [objJson];
|
||||||
action.action.items = [objJson];
|
action.action.object = "root";
|
||||||
action.action.object = "root";
|
action.action.frame = root.currentFrame.idx;
|
||||||
action.action.frame = root.currentFrame.idx;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
await actions[action.name].execute(action.action);
|
await actions[action.name].execute(action.action);
|
||||||
undoStack.push(action);
|
undoStack.push(action);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// disabled for now
|
||||||
|
// for (let action of file.actions) {
|
||||||
|
// undoStack.push(action)
|
||||||
|
// }
|
||||||
|
root = GraphicsObject.fromJSON(file.json)
|
||||||
|
context.objectStack = [root]
|
||||||
}
|
}
|
||||||
|
|
||||||
lastSaveIndex = undoStack.length;
|
lastSaveIndex = undoStack.length;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue