refactor(nodes): use dom matrix to calculate handle bounds zoom

This commit is contained in:
braks
2022-10-07 22:55:38 +02:00
committed by Braks
parent a8d0830dcd
commit ee56ddb0cf
+16 -7
View File
@@ -92,22 +92,31 @@ export default (state: State, getters: ComputedGetters): Actions => {
}
const updateNodeDimensions: Actions['updateNodeDimensions'] = (updates) => {
if (!state.vueFlowRef) return
const viewportNode = state.vueFlowRef.querySelector('.vue-flow__transformationpane')
if (!viewportNode) return
const changes: NodeDimensionChange[] = updates.reduce<NodeDimensionChange[]>((res, update) => {
const node = getters.getNode.value(update.id)
if (node) {
const dimensions = getDimensions(update.nodeElement)
const doUpdate = !!(
(dimensions.width &&
const style = window.getComputedStyle(viewportNode)
const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform)
const doUpdate =
!!(
dimensions.width &&
dimensions.height &&
(node.dimensions.width !== dimensions.width || node.dimensions.height !== dimensions.height)) ||
update.forceUpdate
)
(node.dimensions.width !== dimensions.width || node.dimensions.height !== dimensions.height)
) || update.forceUpdate
node.handleBounds = {
source: getHandleBounds('.source', update.nodeElement, state.viewport.zoom),
target: getHandleBounds('.target', update.nodeElement, state.viewport.zoom),
source: getHandleBounds('.source', update.nodeElement, zoom),
target: getHandleBounds('.target', update.nodeElement, zoom),
}
if (doUpdate) {