From 6c843d7aae24936653c747f43ff000b41f5676cd Mon Sep 17 00:00:00 2001 From: Mirko Pecora Date: Thu, 19 Mar 2026 18:45:06 +0100 Subject: [PATCH] fix: dom mountX, mountY calculation --- src/dom-renderer/domRenderer.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/dom-renderer/domRenderer.ts b/src/dom-renderer/domRenderer.ts index 88128b0..334632e 100644 --- a/src/dom-renderer/domRenderer.ts +++ b/src/dom-renderer/domRenderer.ts @@ -253,18 +253,14 @@ function updateNodeStyles(node: DOMNode | DOMText) { let transform = ''; let { x, y } = props; - - if (props.mountX != null) { - x -= (props.width ?? 0) * props.mountX; - } - - if (props.mountY != null) { - y -= (props.height ?? 0) * props.mountY; - } + const hasMountX = props.mountX != null && props.mountX !== 0; + const hasMountY = props.mountY != null && props.mountY !== 0; if (x !== 0) transform += `translateX(${x}px)`; + if (hasMountX) transform += `translateX(${-props.mountX! * 100}%)`; if (y !== 0) transform += `translateY(${y}px)`; + if (hasMountY) transform += `translateY(${-props.mountY! * 100}%)`; if (props.rotation !== 0) transform += `rotate(${props.rotation}rad)`; @@ -829,7 +825,7 @@ function getElSize(node: DOMNode): Size { need to have their height or width calculated. And then cause the flex layout to be recalculated. */ -function updateDOMTextSize(node: DOMText): void { +function updateDOMTextSize(node: DOMText, emitLoaded = true): void { let size: Size; let dimensionsChanged = false; switch (node.contain) { @@ -857,7 +853,7 @@ function updateDOMTextSize(node: DOMText): void { break; } - if (!node.loaded || dimensionsChanged) { + if (emitLoaded && (!node.loaded || dimensionsChanged)) { const payload: lng.NodeTextLoadedPayload = { type: 'text', dimensions: { @@ -871,7 +867,7 @@ function updateDOMTextSize(node: DOMText): void { } function updateDOMTextMeasurements() { - textNodesToMeasure.forEach(updateDOMTextSize); + textNodesToMeasure.forEach((node) => updateDOMTextSize(node)); textNodesToMeasure.clear(); } @@ -1532,6 +1528,8 @@ class DOMText extends DOMNode { ) { super(stage, props); this.div.innerText = props.text; + updateNodeStyles(this); + updateDOMTextSize(this, false); syncContainTextNodeTracking(this); scheduleUpdateDOMTextMeasurement(this); }