From 66391cbb7539460bbd738e1ede9558545f8a9a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Fri, 8 May 2026 12:46:17 +0200 Subject: [PATCH] fix(text tag convertor): fix text position (#2383) Fixes #2383 --- .../tags/converters/TextTypeConverter.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/converters/TextTypeConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/converters/TextTypeConverter.java index 22ae82c06..da6cc3052 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/converters/TextTypeConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/converters/TextTypeConverter.java @@ -100,6 +100,12 @@ public class TextTypeConverter { throw new IllegalArgumentException("defineTextVersion should be either 1 or 2"); } List records = tag.getTextRecords(tag.getSwf(), new HashMap<>()); + + int borderPadding = 40; + int moveX = tag.bounds.Xmin + borderPadding; + int moveY = tag.bounds.Ymin + borderPadding; + + boolean first = true; for (TEXTRECORD rec : records) { if (defineTextVersion == 1 && rec.textColorA != null) { rec.textColor = new RGB(rec.textColorA); @@ -108,8 +114,24 @@ public class TextTypeConverter { if (defineTextVersion == 2 && rec.textColor != null) { rec.textColorA = new RGBA(rec.textColor); rec.textColor = null; - } + } + + if (first) { + rec.styleFlagsHasXOffset = true; + rec.xOffset += moveX; + rec.styleFlagsHasYOffset = true; + rec.yOffset += moveY; + first = false; + } else { + if (rec.styleFlagsHasXOffset) { + rec.xOffset += moveX; + } + if (rec.styleFlagsHasYOffset) { + rec.yOffset += moveY; + } + } } + ret.textRecords = records; ret.textMatrix = new MATRIX(); ExportRectangle bounds = ret.calculateTextBounds(); @@ -134,6 +156,8 @@ public class TextTypeConverter { @SuppressWarnings("unchecked") List letterSpacings = (List) attrs.get("allLetterSpacings"); + int leftMargin = leftMargins.isEmpty() ? 0 : leftMargins.get(0); + det.bounds = new RECT(tag.getBounds()); det.wasStatic = true; det.noSelect = true; @@ -143,7 +167,7 @@ public class TextTypeConverter { det.hasLayout = true; det.align = DefineEditTextTag.ALIGN_LEFT; det.indent = (int) attrs.get("indent"); - det.leftMargin = leftMargins.isEmpty() ? 0 : leftMargins.get(0); + det.leftMargin = 0; det.leading = (int) attrs.get("lineSpacing"); det.rightMargin = (int) attrs.get("rightMargin"); @@ -251,7 +275,7 @@ public class TextTypeConverter { } ExportRectangle bounds = det.calculateTextBounds(); - det.bounds = new RECT((int) Math.round(bounds.xMin), (int) Math.round(bounds.xMax), (int) Math.round(bounds.yMin), (int) Math.round(bounds.yMax)); + det.bounds = new RECT((int) Math.round(bounds.xMin + leftMargin), (int) Math.round(bounds.xMax + leftMargin), (int) Math.round(bounds.yMin), (int) Math.round(bounds.yMax)); return det; }