refactor(nodes): use dom matrix to calculate handle bounds zoom
This commit is contained in:
@@ -92,22 +92,31 @@ export default (state: State, getters: ComputedGetters): Actions => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const updateNodeDimensions: Actions['updateNodeDimensions'] = (updates) => {
|
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 changes: NodeDimensionChange[] = updates.reduce<NodeDimensionChange[]>((res, update) => {
|
||||||
const node = getters.getNode.value(update.id)
|
const node = getters.getNode.value(update.id)
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
const dimensions = getDimensions(update.nodeElement)
|
const dimensions = getDimensions(update.nodeElement)
|
||||||
|
|
||||||
const doUpdate = !!(
|
const style = window.getComputedStyle(viewportNode)
|
||||||
(dimensions.width &&
|
const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform)
|
||||||
|
|
||||||
|
const doUpdate =
|
||||||
|
!!(
|
||||||
|
dimensions.width &&
|
||||||
dimensions.height &&
|
dimensions.height &&
|
||||||
(node.dimensions.width !== dimensions.width || node.dimensions.height !== dimensions.height)) ||
|
(node.dimensions.width !== dimensions.width || node.dimensions.height !== dimensions.height)
|
||||||
update.forceUpdate
|
) || update.forceUpdate
|
||||||
)
|
|
||||||
|
|
||||||
node.handleBounds = {
|
node.handleBounds = {
|
||||||
source: getHandleBounds('.source', update.nodeElement, state.viewport.zoom),
|
source: getHandleBounds('.source', update.nodeElement, zoom),
|
||||||
target: getHandleBounds('.target', update.nodeElement, state.viewport.zoom),
|
target: getHandleBounds('.target', update.nodeElement, zoom),
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doUpdate) {
|
if (doUpdate) {
|
||||||
|
|||||||
Reference in New Issue
Block a user