Skip to content

Commit f37f939

Browse files
authored
Follow-up to CanvasPlaceAt: fix missed PaperArea adjusted transform when it happens at the same time as viewport changes (#83)
1 parent 90f8be4 commit f37f939

1 file changed

Lines changed: 21 additions & 14 deletions

File tree

src/diagram/paperArea.tsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,24 +1010,31 @@ export class PaperArea extends React.Component<PaperAreaProps, State> implements
10101010
}
10111011

10121012
private applyViewportState(targetState: ViewportState) {
1013-
const previous = this.state.transform;
1013+
let previous = this.state.transform;
10141014
const scale = targetState.scale.x;
10151015
const paperCenter = targetState.center;
10161016

1017-
this.setState({transform: {...previous, scale}}, () => {
1018-
const {originX, originY, paddingX, paddingY} = this.state.transform;
1019-
const scrollCenterX = (paperCenter.x + originX) * scale;
1020-
const scrollCenterY = (paperCenter.y + originY) * scale;
1021-
const {clientWidth, clientHeight} = this.area;
1022-
1023-
this.area.scrollLeft = scrollCenterX - clientWidth / 2 + paddingX;
1024-
this.area.scrollTop = scrollCenterY - clientHeight / 2 + paddingY;
1025-
1026-
if (scale !== previous.scale) {
1027-
this.source.trigger('changeScale', {source: this, previous: previous.scale});
1028-
this.source.trigger('changeTransform', {previous, source: this});
1017+
this.setState(
1018+
state => {
1019+
previous = state.transform;
1020+
return {
1021+
transform: {...state.transform, scale},
1022+
};
1023+
}, () => {
1024+
const {originX, originY, paddingX, paddingY} = this.state.transform;
1025+
const scrollCenterX = (paperCenter.x + originX) * scale;
1026+
const scrollCenterY = (paperCenter.y + originY) * scale;
1027+
const {clientWidth, clientHeight} = this.area;
1028+
1029+
this.area.scrollLeft = scrollCenterX - clientWidth / 2 + paddingX;
1030+
this.area.scrollTop = scrollCenterY - clientHeight / 2 + paddingY;
1031+
1032+
if (scale !== previous.scale) {
1033+
this.source.trigger('changeScale', {source: this, previous: previous.scale});
1034+
this.source.trigger('changeTransform', {previous, source: this});
1035+
}
10291036
}
1030-
});
1037+
);
10311038
}
10321039
}
10331040

0 commit comments

Comments
 (0)