From 4d8f5bafccb2b8bb3896627d714914cf0111e069 Mon Sep 17 00:00:00 2001 From: Mikhail Korolev Date: Sun, 14 Jun 2026 09:30:58 +0400 Subject: [PATCH 1/4] build: add FlexRender.Xml to NuGet release pack list --- .github/workflows/release.yml | 1 + AGENTS.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7af2332..ff9e75a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,6 +54,7 @@ jobs: for project in \ src/FlexRender.Core/FlexRender.Core.csproj \ src/FlexRender.Yaml/FlexRender.Yaml.csproj \ + src/FlexRender.Xml/FlexRender.Xml.csproj \ src/FlexRender.Http/FlexRender.Http.csproj \ src/FlexRender.Skia.Render/FlexRender.Skia.Render.csproj \ src/FlexRender.ImageSharp.Render/FlexRender.ImageSharp.Render.csproj \ diff --git a/AGENTS.md b/AGENTS.md index 9be33f2..3a9dbfb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -320,7 +320,7 @@ The release workflow (`.github/workflows/release.yml`) publishes all packages to | Category | Packages | |----------|----------| -| Core | `FlexRender.Core`, `FlexRender.Yaml`, `FlexRender.Http` | +| Core | `FlexRender.Core`, `FlexRender.Yaml`, `FlexRender.Xml`, `FlexRender.Http` | | Renderers | `FlexRender.Skia.Render`, `FlexRender.ImageSharp.Render`, `FlexRender.Svg.Render` | | QR providers | `FlexRender.QrCode.Skia.Render`, `FlexRender.QrCode.ImageSharp.Render`, `FlexRender.QrCode.Svg.Render` | | Barcode providers | `FlexRender.Barcode.Skia.Render`, `FlexRender.Barcode.ImageSharp.Render`, `FlexRender.Barcode.Svg.Render` | From 65dfa8b069d2587493145fc13aa17d5ada18966e Mon Sep 17 00:00:00 2001 From: Mikhail Korolev Date: Sun, 14 Jun 2026 09:53:31 +0400 Subject: [PATCH 2/4] fix(layout): inset leaf content by padding+border and include trailing margin in auto-size (#10) Two box-model bugs are fixed: - Leaf padding now insets content on all sides. Layout already sized the box as content + padding + border, but both renderers drew leaf content into the full box, leaving padding only on the right/bottom. LayoutNode now carries a ContentInset (padding + border per side) populated at each leaf layout site; the Skia and ImageSharp renderers keep background and border on the full box but draw content into the inset rect. - A trailing child's bottom/right margin is now included in canvas/container auto-size. The flex strategies store each child's resolved outer Right and Bottom margins on LayoutNode, and CalculateTotalHeight/Width add them so the last child's trailing margin is no longer clipped. Adds a layout regression test for the trailing-margin auto-height and Skia and ImageSharp snapshot tests proving leaf padding insets content on all four sides. Regenerated flex_with_margin and ndc_receipt_composite goldens (now taller by the previously dropped trailing margin). --- .../Layout/ColumnFlexLayoutStrategy.cs | 11 ++++- src/FlexRender.Core/Layout/LayoutEngine.cs | 27 +++++++++--- src/FlexRender.Core/Layout/LayoutHelpers.cs | 7 +-- src/FlexRender.Core/Layout/LayoutNode.cs | 24 +++++++++++ .../Layout/RowFlexLayoutStrategy.cs | 11 ++++- .../Rendering/ImageSharpRenderingEngine.cs | 10 ++++- .../Rendering/RenderingEngine.cs | 40 +++++++++++------- .../ImageSharpVisualSnapshotTests.cs | 23 ++++++++++ .../golden/is_leaf-padding-insets-content.png | Bin 0 -> 8274 bytes .../Layout/LayoutEnginePaddingMarginTests.cs | 34 +++++++++++++++ .../Snapshots/VisualSnapshotTests.cs | 22 ++++++++++ .../Snapshots/golden/flex_with_margin.png | Bin 2769 -> 2796 bytes .../golden/leaf-padding-insets-content.png | Bin 0 -> 5023 bytes .../golden/ndc_receipt_composite.png | Bin 127296 -> 127296 bytes 14 files changed, 180 insertions(+), 29 deletions(-) create mode 100644 tests/FlexRender.ImageSharp.Tests/Snapshots/golden/is_leaf-padding-insets-content.png create mode 100644 tests/FlexRender.Tests/Snapshots/golden/leaf-padding-insets-content.png diff --git a/src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs b/src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs index b5fe38f..2a137da 100644 --- a/src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs +++ b/src/FlexRender.Core/Layout/ColumnFlexLayoutStrategy.cs @@ -215,7 +215,12 @@ internal static void LayoutColumnFlex(LayoutNode node, FlexElement flex, LayoutC pos += m.Top.IsAuto ? spacePerAuto : m.Top.ResolvedPixels; child.Y = pos; pos += child.Height; - pos += m.Bottom.IsAuto ? spacePerAuto : m.Bottom.ResolvedPixels; + var autoBottom = m.Bottom.IsAuto ? spacePerAuto : m.Bottom.ResolvedPixels; + pos += autoBottom; + + // Store resolved outer right/bottom margins for trailing-margin auto-size. + child.MarginBottom = Math.Max(0f, autoBottom); + child.MarginRight = Math.Max(0f, m.Right.IsAuto ? 0f : m.Right.ResolvedPixels); // Cross axis auto margins override align-items (horizontal for column) ApplyColumnCrossAxisMargins(child, m, flex, padding, crossAxisSize); @@ -280,6 +285,10 @@ internal static void LayoutColumnFlex(LayoutNode node, FlexElement flex, LayoutC var mLeft = Math.Max(0f, m.Left.ResolvedPixels); var mRight = Math.Max(0f, m.Right.ResolvedPixels); + // Store resolved outer right/bottom margins for trailing-margin auto-size. + child.MarginBottom = mBottom; + child.MarginRight = mRight; + // Check for cross axis auto margins even when main axis has no auto margins if (m.CrossAxisAutoCount(isColumn: true) > 0) { diff --git a/src/FlexRender.Core/Layout/LayoutEngine.cs b/src/FlexRender.Core/Layout/LayoutEngine.cs index 73b6047..8fe196f 100644 --- a/src/FlexRender.Core/Layout/LayoutEngine.cs +++ b/src/FlexRender.Core/Layout/LayoutEngine.cs @@ -594,6 +594,7 @@ private LayoutNode LayoutTextElement(TextElement text, LayoutContext context) var totalHeight = contentHeight + padding.Vertical + border.Vertical; var node = new LayoutNode(text, 0, 0, totalWidth, totalHeight); + node.ContentInset = CombineInset(padding, border); node.TextLines = textLines; node.ComputedLineHeight = computedLineHeight; node.Baseline = padding.Top + border.Top.Width + textBaseline; @@ -663,7 +664,7 @@ private static LayoutNode LayoutQrElement(QrElement qr, LayoutContext context) var totalWidth = contentWidth + padding.Horizontal + border.Horizontal; var totalHeight = contentHeight + padding.Vertical + border.Vertical; - return new LayoutNode(qr, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize }; + return new LayoutNode(qr, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize, ContentInset = CombineInset(padding, border) }; } /// @@ -683,7 +684,7 @@ private static LayoutNode LayoutBarcodeElement(BarcodeElement barcode, LayoutCon var totalWidth = contentWidth + padding.Horizontal + border.Horizontal; var totalHeight = contentHeight + padding.Vertical + border.Vertical; - return new LayoutNode(barcode, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize }; + return new LayoutNode(barcode, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize, ContentInset = CombineInset(padding, border) }; } /// @@ -702,7 +703,7 @@ private static LayoutNode LayoutImageElement(ImageElement image, LayoutContext c var totalWidth = contentWidth + padding.Horizontal + border.Horizontal; var totalHeight = contentHeight + padding.Vertical + border.Vertical; - return new LayoutNode(image, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize }; + return new LayoutNode(image, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize, ContentInset = CombineInset(padding, border) }; } /// @@ -720,7 +721,7 @@ private static LayoutNode LayoutSvgElement(SvgElement svg, LayoutContext context var totalWidth = contentWidth + padding.Horizontal + border.Horizontal; var totalHeight = contentHeight + padding.Vertical + border.Vertical; - return new LayoutNode(svg, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize }; + return new LayoutNode(svg, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize, ContentInset = CombineInset(padding, border) }; } /// @@ -750,7 +751,7 @@ private static LayoutNode LayoutSeparatorElement(SeparatorElement separator, Lay var totalWidth = contentWidth + padding.Horizontal + border.Horizontal; var totalHeight = contentHeight + padding.Vertical + border.Vertical; - return new LayoutNode(separator, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize }; + return new LayoutNode(separator, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize, ContentInset = CombineInset(padding, border) }; } /// @@ -773,9 +774,23 @@ private static LayoutNode LayoutShapeElement(TemplateElement shape, LayoutContex var totalWidth = contentWidth + padding.Horizontal + border.Horizontal; var totalHeight = contentHeight + padding.Vertical + border.Vertical; - return new LayoutNode(shape, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize }; + return new LayoutNode(shape, 0, 0, totalWidth, totalHeight) { ComputedFontSize = context.FontSize, ContentInset = CombineInset(padding, border) }; } + /// + /// Combines padding and border widths into a single content inset (per side). + /// This is the distance from a leaf element's box edge to its content area, used by + /// renderers to inset content while keeping the background and border on the full box. + /// + /// The resolved padding values (already clamped to non-negative). + /// The resolved border values for all four sides. + /// The combined content inset per side. + private static PaddingValues CombineInset(PaddingValues padding, BorderValues border) => new( + padding.Top + border.Top.Width, + padding.Right + border.Right.Width, + padding.Bottom + border.Bottom.Width, + padding.Left + border.Left.Width); + /// /// Checks whether any flow (non-absolute) child in the node has a non-default /// value. diff --git a/src/FlexRender.Core/Layout/LayoutHelpers.cs b/src/FlexRender.Core/Layout/LayoutHelpers.cs index 5db6536..bbd5f4e 100644 --- a/src/FlexRender.Core/Layout/LayoutHelpers.cs +++ b/src/FlexRender.Core/Layout/LayoutHelpers.cs @@ -229,8 +229,9 @@ internal static float CalculateTotalHeight(LayoutNode node) foreach (var child in node.Children) { if (child.Element.Position.Value == Position.Absolute) continue; - if (child.Bottom > maxBottom) - maxBottom = child.Bottom; + var bottom = child.Bottom + child.MarginBottom; + if (bottom > maxBottom) + maxBottom = bottom; } return maxBottom; } @@ -249,7 +250,7 @@ internal static float CalculateTotalWidth(LayoutNode node) foreach (var child in node.Children) { if (child.Element.Position.Value == Position.Absolute) continue; - var right = child.X + child.Width; + var right = child.X + child.Width + child.MarginRight; if (right > maxRight) maxRight = right; } diff --git a/src/FlexRender.Core/Layout/LayoutNode.cs b/src/FlexRender.Core/Layout/LayoutNode.cs index 705eab2..eff8892 100644 --- a/src/FlexRender.Core/Layout/LayoutNode.cs +++ b/src/FlexRender.Core/Layout/LayoutNode.cs @@ -1,3 +1,4 @@ +using FlexRender.Layout.Units; using FlexRender.Parsing.Ast; namespace FlexRender.Layout; @@ -67,6 +68,29 @@ public sealed class LayoutNode /// public LayoutDiagnostics? Diagnostics { get; set; } + /// + /// The content inset (padding + border) for each side, in pixels. This is the distance + /// from the element's box edge to its content area. Renderers subtract this inset when + /// drawing leaf content so that padding insets content on all sides, while the background + /// and border keep using the full box. Defaults to ; + /// container (flex) nodes leave it zero because their children are already offset by padding. + /// + public PaddingValues ContentInset { get; set; } = PaddingValues.Zero; + + /// + /// The resolved right (outer) margin in pixels. Used by auto-size calculations to include + /// a trailing child's right margin in the parent's content extent. The left/top margins are + /// already baked into / by the flex strategies. Defaults to 0. + /// + public float MarginRight { get; set; } + + /// + /// The resolved bottom (outer) margin in pixels. Used by auto-size calculations to include + /// a trailing child's bottom margin in the parent's content extent. The left/top margins are + /// already baked into / by the flex strategies. Defaults to 0. + /// + public float MarginBottom { get; set; } + /// Right edge (X + Width). public float Right => X + Width; diff --git a/src/FlexRender.Core/Layout/RowFlexLayoutStrategy.cs b/src/FlexRender.Core/Layout/RowFlexLayoutStrategy.cs index 85d9192..140182b 100644 --- a/src/FlexRender.Core/Layout/RowFlexLayoutStrategy.cs +++ b/src/FlexRender.Core/Layout/RowFlexLayoutStrategy.cs @@ -222,7 +222,12 @@ internal static void LayoutRowFlex(LayoutNode node, FlexElement flex, LayoutCont pos += m.Left.IsAuto ? spacePerAuto : m.Left.ResolvedPixels; child.X = pos; pos += child.Width; - pos += m.Right.IsAuto ? spacePerAuto : m.Right.ResolvedPixels; + var autoRight = m.Right.IsAuto ? spacePerAuto : m.Right.ResolvedPixels; + pos += autoRight; + + // Store resolved outer right/bottom margins for trailing-margin auto-size. + child.MarginRight = Math.Max(0f, autoRight); + child.MarginBottom = Math.Max(0f, m.Bottom.IsAuto ? 0f : m.Bottom.ResolvedPixels); // Cross axis auto margins override align-items (vertical for row) ApplyRowCrossAxisMargins(child, m, flex, padding, crossAxisSize, hasExplicitHeight); @@ -302,6 +307,10 @@ internal static void LayoutRowFlex(LayoutNode node, FlexElement flex, LayoutCont var mTop = Math.Max(0f, m.Top.ResolvedPixels); var mBottom = Math.Max(0f, m.Bottom.ResolvedPixels); + // Store resolved outer right/bottom margins for trailing-margin auto-size. + child.MarginRight = mRight; + child.MarginBottom = mBottom; + // Add child margin to X position child.X = x + mLeft; diff --git a/src/FlexRender.ImageSharp.Render/Rendering/ImageSharpRenderingEngine.cs b/src/FlexRender.ImageSharp.Render/Rendering/ImageSharpRenderingEngine.cs index ea1180c..294e575 100644 --- a/src/FlexRender.ImageSharp.Render/Rendering/ImageSharpRenderingEngine.cs +++ b/src/FlexRender.ImageSharp.Render/Rendering/ImageSharpRenderingEngine.cs @@ -202,16 +202,22 @@ private void DrawElement( var effectiveFontSize = node.ComputedFontSize > 0 ? node.ComputedFontSize : _baseFontSize; var rotation = RotationHelper.ParseRotation(element.Rotate.Value); + // Content is inset by padding + border so it sits inside the box on all sides. + // The background (drawn by the caller) keeps using the full box. + var inset = node.ContentInset; + var cw = Math.Max(0f, width - inset.Horizontal); + var ch = Math.Max(0f, height - inset.Vertical); + if (RotationHelper.HasRotation(rotation)) { DrawWithRotation(ctx, x, y, width, height, rotation, bufferCtx => { - DrawElementContent(bufferCtx, element, 0, 0, width, height, effectiveFontSize, imageCache); + DrawElementContent(bufferCtx, element, inset.Left, inset.Top, cw, ch, effectiveFontSize, imageCache); }); } else { - DrawElementContent(ctx, element, x, y, width, height, effectiveFontSize, imageCache); + DrawElementContent(ctx, element, x + inset.Left, y + inset.Top, cw, ch, effectiveFontSize, imageCache); } } diff --git a/src/FlexRender.Skia.Render/Rendering/RenderingEngine.cs b/src/FlexRender.Skia.Render/Rendering/RenderingEngine.cs index 73fc002..3ec4999 100644 --- a/src/FlexRender.Skia.Render/Rendering/RenderingEngine.cs +++ b/src/FlexRender.Skia.Render/Rendering/RenderingEngine.cs @@ -292,31 +292,39 @@ private void DrawElement( // Draw borders between background and content DrawBorders(canvas, element, x, y, width, height, borderRadius, effectiveFontSize); + // Content (text, bitmaps, shapes) is inset by padding + border so it sits inside the + // box on all sides. Background and border above keep using the full box (x, y, w, h). + var inset = node.ContentInset; + var cx = x + inset.Left; + var cy = y + inset.Top; + var cw = Math.Max(0f, width - inset.Horizontal); + var ch = Math.Max(0f, height - inset.Vertical); + switch (element) { case TextElement text: - var bounds = new SKRect(x, y, x + width, y + height); + var bounds = new SKRect(cx, cy, cx + cw, cy + ch); _textRenderer.DrawText(canvas, text, bounds, effectiveFontSize, renderOptions, direction, node.TextLines, node.ComputedLineHeight); break; case QrElement qr when _qrProvider is not null: - using (var bitmap = GetSkiaBitmap(_qrProvider, qr, (int)width, (int)height)) + using (var bitmap = GetSkiaBitmap(_qrProvider, qr, (int)cw, (int)ch)) { - DrawBitmapWithRotation(canvas, bitmap, element, x, y, width, height); + DrawBitmapWithRotation(canvas, bitmap, element, cx, cy, cw, ch); } break; case BarcodeElement barcode when _barcodeProvider is not null: - using (var bitmap = GetSkiaBitmap(_barcodeProvider, barcode, (int)width, (int)height)) + using (var bitmap = GetSkiaBitmap(_barcodeProvider, barcode, (int)cw, (int)ch)) { - DrawBitmapWithRotation(canvas, bitmap, element, x, y, width, height); + DrawBitmapWithRotation(canvas, bitmap, element, cx, cy, cw, ch); } break; case SvgElement svg when _svgProvider is not null: - using (var bitmap = GetSkiaBitmap(_svgProvider, svg, (int)width, (int)height)) + using (var bitmap = GetSkiaBitmap(_svgProvider, svg, (int)cw, (int)ch)) { - DrawBitmapWithRotation(canvas, bitmap, element, x, y, width, height); + DrawBitmapWithRotation(canvas, bitmap, element, cx, cy, cw, ch); } break; @@ -325,38 +333,38 @@ private void DrawElement( image, imageCache, renderOptions.Antialiasing, - layoutWidth: (int)width, - layoutHeight: (int)height)) + layoutWidth: (int)cw, + layoutHeight: (int)ch)) { - DrawBitmapWithRotation(canvas, bitmap, element, x, y, width, height); + DrawBitmapWithRotation(canvas, bitmap, element, cx, cy, cw, ch); } break; case RectElement rect: - ShapeRenderer.DrawRect(canvas, rect, x, y, width, height, effectiveFontSize, renderOptions.Antialiasing); + ShapeRenderer.DrawRect(canvas, rect, cx, cy, cw, ch, effectiveFontSize, renderOptions.Antialiasing); break; case CircleElement circle: - ShapeRenderer.DrawCircle(canvas, circle, x, y, width, height, renderOptions.Antialiasing); + ShapeRenderer.DrawCircle(canvas, circle, cx, cy, cw, ch, renderOptions.Antialiasing); break; case EllipseElement ellipse: - ShapeRenderer.DrawEllipse(canvas, ellipse, x, y, width, height, renderOptions.Antialiasing); + ShapeRenderer.DrawEllipse(canvas, ellipse, cx, cy, cw, ch, renderOptions.Antialiasing); break; case DrawElement drawEl: - ShapeRenderer.DrawShapes(canvas, drawEl, x, y, width, height, renderOptions.Antialiasing); + ShapeRenderer.DrawShapes(canvas, drawEl, cx, cy, cw, ch, renderOptions.Antialiasing); break; case ChartElement chart: ChartRenderer.Draw( - canvas, chart, x, y, width, height, + canvas, chart, cx, cy, cw, ch, _fontManager?.GetTypeface("main"), renderOptions.Antialiasing); break; case SeparatorElement separator: - DrawSeparator(canvas, separator, x, y, width, height, renderOptions.Antialiasing); + DrawSeparator(canvas, separator, cx, cy, cw, ch, renderOptions.Antialiasing); break; case FlexElement: diff --git a/tests/FlexRender.ImageSharp.Tests/Snapshots/ImageSharpVisualSnapshotTests.cs b/tests/FlexRender.ImageSharp.Tests/Snapshots/ImageSharpVisualSnapshotTests.cs index a59a113..293cecc 100644 --- a/tests/FlexRender.ImageSharp.Tests/Snapshots/ImageSharpVisualSnapshotTests.cs +++ b/tests/FlexRender.ImageSharp.Tests/Snapshots/ImageSharpVisualSnapshotTests.cs @@ -96,6 +96,29 @@ public void TextMultiline() AssertSnapshot("is_text_multiline", template, new ObjectValue()); } + /// + /// Tests that a top-level leaf text element with padding insets its content on all + /// four sides (not just right/bottom). Regression test for issue #10. + /// + [Fact] + public void LeafPaddingInsetsContent() + { + if (!OperatingSystem.IsMacOS()) return; + + var template = CreateTemplate(300, 200); + template.Canvas.Fixed = FixedDimension.Width; + template.AddElement(new TextElement + { + Content = "Line one of padded text\nLine two of padded text\nLine three", + Size = "16", + Color = "#003366", + Background = "#cce5ff", + Padding = "40" + }); + + AssertSnapshot("is_leaf-padding-insets-content", template, new ObjectValue()); + } + /// /// Tests template variable substitution in text content. /// diff --git a/tests/FlexRender.ImageSharp.Tests/Snapshots/golden/is_leaf-padding-insets-content.png b/tests/FlexRender.ImageSharp.Tests/Snapshots/golden/is_leaf-padding-insets-content.png new file mode 100644 index 0000000000000000000000000000000000000000..b35e56fb2f4169ec6575cba0ca7dbeca15bcaad6 GIT binary patch literal 8274 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 + /// Verifies that a top-level leaf element's trailing (bottom) margin is included in + /// the auto-computed canvas height. Regression test for the box-model bug where the + /// canvas auto-height excluded the last child's bottom margin (issue #10). + /// + [Fact] + public void TextElement_WithMargin_TrailingBottomMarginIncludedInCanvasHeight() + { + var template = new Template + { + Canvas = new CanvasSettings { Width = 200, Fixed = FixedDimension.Width }, + Elements = new List + { + new TextElement + { + Content = "Test", + Size = "16", + Margin = "80" + } + } + }; + + var root = _engine.ComputeLayout(template); + var textNode = root.Children[0]; + + // The canvas auto-height must include the child's bottom margin, not just its + // box bottom edge. child.Y already includes the top margin (80), so the canvas + // height must reach at least child.Y + child.Height + bottomMargin(80). + var expectedMinHeight = textNode.Y + textNode.Height + 80f; + Assert.True( + root.Height >= expectedMinHeight, + $"Canvas height {root.Height} should include trailing bottom margin (>= {expectedMinHeight})."); + } } diff --git a/tests/FlexRender.Tests/Snapshots/VisualSnapshotTests.cs b/tests/FlexRender.Tests/Snapshots/VisualSnapshotTests.cs index 7705318..4936c96 100644 --- a/tests/FlexRender.Tests/Snapshots/VisualSnapshotTests.cs +++ b/tests/FlexRender.Tests/Snapshots/VisualSnapshotTests.cs @@ -1329,6 +1329,28 @@ public async Task BackgroundWithPadding() await AssertSnapshot("background_with_padding", template, new ObjectValue()); } + /// + /// Tests that a top-level leaf text element with padding insets its content on all + /// four sides (not just right/bottom). Regression test for issue #10 where leaf padding + /// only inflated the box and the content stayed at the box's top-left corner. + /// + [Fact] + public async Task LeafPaddingInsetsContent() + { + var template = CreateTemplate(300, 200); + + template.AddElement(new TextElement + { + Content = "Line one of padded text\nLine two of padded text\nLine three", + Size = "16", + Color = "#003366", + Background = "#cce5ff", + Padding = "40" + }); + + await AssertSnapshot("leaf-padding-insets-content", template, new ObjectValue()); + } + /// /// Tests element with both margin and background to verify that /// margin creates space outside the background area. diff --git a/tests/FlexRender.Tests/Snapshots/golden/flex_with_margin.png b/tests/FlexRender.Tests/Snapshots/golden/flex_with_margin.png index 1dd73ddbcfc8466f2245366faddaf40c501df450..02eb349316bbac47d1534a3a3642b0e206653230 100644 GIT binary patch literal 2796 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 literal 2769 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 Z8)eHMc>67nJe0+JlqZUnC$N?X{~ILBhvxtQ delta 57001 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 Date: Sun, 14 Jun 2026 10:02:57 +0400 Subject: [PATCH 3/4] fix(svg): inset leaf content by padding+border in SvgRenderingEngine The SVG rendering backend (WithSvg) was missed in the box-model fix that corrected the Skia and ImageSharp renderers. Leaf content was drawn into the full box, so padding/border was only applied on the right/bottom edges for SVG/PNG output via the SVG backend. Compute the content inset from node.ContentInset (padding+border per side) and pass the inset cx/cy/cw/ch to every content draw call (text, separator, image, svg, qr, barcode), keeping background and borders on the full box. Add svg_leaf_padding_insets_content snapshot test verifying the background rect stays on the full box while text is inset on all sides. --- .../Rendering/SvgRenderingEngine.cs | 32 ++++++++++++------- .../Snapshots/SvgSnapshotTests.cs | 23 +++++++++++++ .../svg_leaf_padding_insets_content.svg | 1 + 3 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 tests/FlexRender.Tests/Snapshots/golden/svg_leaf_padding_insets_content.svg diff --git a/src/FlexRender.Svg.Render/Rendering/SvgRenderingEngine.cs b/src/FlexRender.Svg.Render/Rendering/SvgRenderingEngine.cs index a550d43..13d2c1c 100644 --- a/src/FlexRender.Svg.Render/Rendering/SvgRenderingEngine.cs +++ b/src/FlexRender.Svg.Render/Rendering/SvgRenderingEngine.cs @@ -307,52 +307,60 @@ private void DrawElement( // Draw borders DrawBorders(sb, element, x, y, width, height, borderRadius); + // Content is inset by padding + border so it sits inside the box on all sides. + // Background and border above keep using the full box (x, y, width, height). + var inset = node.ContentInset; + var cx = x + inset.Left; + var cy = y + inset.Top; + var cw = Math.Max(0f, width - inset.Horizontal); + var ch = Math.Max(0f, height - inset.Vertical); + // Draw element-specific content switch (element) { case TextElement text: - DrawText(sb, text, fontFamilyMap, x, y, width, height, direction, node.TextLines, node.ComputedLineHeight); + DrawText(sb, text, fontFamilyMap, cx, cy, cw, ch, direction, node.TextLines, node.ComputedLineHeight); break; case SeparatorElement separator: - DrawSeparator(sb, separator, x, y, width, height); + DrawSeparator(sb, separator, cx, cy, cw, ch); break; case ImageElement image: - DrawImage(sb, image, x, y, width, height); + DrawImage(sb, image, cx, cy, cw, ch); break; case SvgElement svg when _svgElementSvgProvider is not null: - DrawSvgContentProvider(sb, _svgElementSvgProvider, svg, x, y, width, height); + DrawSvgContentProvider(sb, _svgElementSvgProvider, svg, cx, cy, cw, ch); break; case SvgElement svg: - DrawSvgElement(sb, svg, x, y, width, height); + DrawSvgElement(sb, svg, cx, cy, cw, ch); break; case QrElement qr when _qrSvgProvider is not null: - DrawSvgContentProvider(sb, _qrSvgProvider, qr, x, y, width, height); + DrawSvgContentProvider(sb, _qrSvgProvider, qr, cx, cy, cw, ch); break; case QrElement qr when _qrProvider is ISvgContentProvider svgQrProvider: - DrawSvgContentProvider(sb, svgQrProvider, qr, x, y, width, height); + DrawSvgContentProvider(sb, svgQrProvider, qr, cx, cy, cw, ch); break; case QrElement qr when _qrProvider is not null: { - var result = _qrProvider.Generate(qr, (int)width, (int)height); - DrawBitmapElement(sb, result, x, y, width, height); + var result = _qrProvider.Generate(qr, (int)cw, (int)ch); + DrawBitmapElement(sb, result, cx, cy, cw, ch); break; } case BarcodeElement barcode when _barcodeSvgProvider is not null: - DrawSvgContentProvider(sb, _barcodeSvgProvider, barcode, x, y, width, height); + DrawSvgContentProvider(sb, _barcodeSvgProvider, barcode, cx, cy, cw, ch); break; case BarcodeElement barcode when _barcodeProvider is not null: { - var result = _barcodeProvider.Generate(barcode, (int)width, (int)height); - DrawBitmapElement(sb, result, x, y, width, height); + var result = _barcodeProvider.Generate(barcode, (int)cw, (int)ch); + DrawBitmapElement(sb, result, cx, cy, cw, ch); break; } diff --git a/tests/FlexRender.Tests/Snapshots/SvgSnapshotTests.cs b/tests/FlexRender.Tests/Snapshots/SvgSnapshotTests.cs index f4e4c40..b8998d2 100644 --- a/tests/FlexRender.Tests/Snapshots/SvgSnapshotTests.cs +++ b/tests/FlexRender.Tests/Snapshots/SvgSnapshotTests.cs @@ -251,4 +251,27 @@ public async Task SvgBarcodeBasic() await AssertSvgSnapshot("svg_barcode_basic", template, new ObjectValue()); } + + /// + /// Tests that a leaf element's padding insets its content on all sides. + /// A top-level text element with uniform padding and a visible background + /// must keep its background on the full box while the text lines are + /// inset by the padding on the top and left (not only bottom and right). + /// + [Fact] + public async Task SvgLeafPaddingInsetsContent() + { + var template = CreateTemplate(300, 200); + + template.AddElement(new TextElement + { + Content = "Line one of padded text\nLine two of padded text\nLine three", + Size = "16", + Color = "#003366", + Background = "#cce5ff", + Padding = "40" + }); + + await AssertSvgSnapshot("svg_leaf_padding_insets_content", template, new ObjectValue()); + } } diff --git a/tests/FlexRender.Tests/Snapshots/golden/svg_leaf_padding_insets_content.svg b/tests/FlexRender.Tests/Snapshots/golden/svg_leaf_padding_insets_content.svg new file mode 100644 index 0000000..e0444ab --- /dev/null +++ b/tests/FlexRender.Tests/Snapshots/golden/svg_leaf_padding_insets_content.svg @@ -0,0 +1 @@ +Line one of padded textLine two of padded textLine three \ No newline at end of file From e8102bfc455d9e8970758d131d8a124fe40021b5 Mon Sep 17 00:00:00 2001 From: Mikhail Korolev Date: Sun, 14 Jun 2026 19:29:04 +0400 Subject: [PATCH 4/4] fix: column-wrap flex container collapses to zero height without explicit height A flex container with direction: column + wrap: wrap and no explicit height collapsed to ~0 height, clipping all content. The wrapped strategy only set the cross-axis auto dimension (width for column-wrap), never the main-axis (height), and the engine skipped fallback height calculation for all wrap containers. - WrappedFlexLayoutStrategy now records resolved trailing margins (MarginRight/MarginBottom) on wrap children so CalculateTotalHeight/ Width account for them, matching the non-wrap strategies. - LayoutEngine computes auto height whenever the strategy left node.Height unset (node.Height == 0f), covering no-wrap and column-wrap; row-wrap already sets height and is skipped. --- src/FlexRender.Core/Layout/LayoutEngine.cs | 6 ++- .../Layout/WrappedFlexLayoutStrategy.cs | 5 +++ .../Layout/LayoutEngineWrapTests.cs | 37 +++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/FlexRender.Core/Layout/LayoutEngine.cs b/src/FlexRender.Core/Layout/LayoutEngine.cs index 8fe196f..d2371b9 100644 --- a/src/FlexRender.Core/Layout/LayoutEngine.cs +++ b/src/FlexRender.Core/Layout/LayoutEngine.cs @@ -401,8 +401,10 @@ private LayoutNode LayoutFlexElement(FlexElement flex, LayoutContext context) MirrorRowXPositions(node, effectivePadding); } - // Calculate height if not specified (skip for wrapped containers — they set height in LayoutWrappedFlex) - if (height == 0f && node.Children.Count > 0 && flex.Wrap.Value == FlexWrap.NoWrap) + // Compute auto height when the strategy did not set it — covers no-wrap and + // column-wrap. Row-wrap already sets height (its cross axis), so node.Height is + // non-zero there and this is skipped. + if (height == 0f && node.Children.Count > 0 && node.Height == 0f) { node.Height = LayoutHelpers.CalculateTotalHeight(node) + effectivePadding.Bottom; } diff --git a/src/FlexRender.Core/Layout/WrappedFlexLayoutStrategy.cs b/src/FlexRender.Core/Layout/WrappedFlexLayoutStrategy.cs index a32b7a9..62c059d 100644 --- a/src/FlexRender.Core/Layout/WrappedFlexLayoutStrategy.cs +++ b/src/FlexRender.Core/Layout/WrappedFlexLayoutStrategy.cs @@ -511,6 +511,11 @@ private static void ResolveFlexForLine(LayoutNode node, FlexElement flex, Layout var child = lineChildren[i]; var childMargin = PaddingParser.Parse(child.Element.Margin.Value, context.ContainerWidth, context.FontSize).ClampNegatives(); + // Record resolved trailing margins so CalculateTotalHeight/Width (used for + // auto-sizing the container) accounts for them, matching the non-wrap strategies. + child.MarginRight = childMargin.Right; + child.MarginBottom = childMargin.Bottom; + if (isColumn) { child.Y = pos + childMargin.Top; diff --git a/tests/FlexRender.Tests/Layout/LayoutEngineWrapTests.cs b/tests/FlexRender.Tests/Layout/LayoutEngineWrapTests.cs index cd1b013..b06d2a4 100644 --- a/tests/FlexRender.Tests/Layout/LayoutEngineWrapTests.cs +++ b/tests/FlexRender.Tests/Layout/LayoutEngineWrapTests.cs @@ -418,4 +418,41 @@ public void ComputeLayout_RowWrap_EmptyChildren_NoWrap() Assert.Equal(100f, flexNode.Height, 0.1f); Assert.Empty(flexNode.Children); } + + [Fact] + public void ComputeLayout_ColumnWrap_NoExplicitHeight_SizesToContentIncludingBottomMargin() + { + // Arrange: Column wrap, no explicit height, two children W=120 H=40 margin=20. + // Single column (no main-axis constraint): both stack on the main axis (Y). + // Item A: Y=20 (top margin), H=40 -> bottom edge 60, +bottom margin 20 -> 80. + // Item B: Y=100 (60 + bottom margin 20 + top margin 20), H=40 -> bottom edge 140, +bottom margin 20 -> 160. + // Container auto-height must size to content = 160 (previously collapsed to ~0). + var flex = new FlexElement + { + Direction = FlexDirection.Column, + Wrap = FlexWrap.Wrap + }; + flex.AddChild(new TextElement { Content = "AAAA", Width = "120", Height = "40", Margin = "20" }); + flex.AddChild(new TextElement { Content = "BBBB", Width = "120", Height = "40", Margin = "20" }); + + var template = new Template + { + Canvas = new CanvasSettings { Width = 300 }, + Elements = new List { flex } + }; + + // Act + var root = _engine.ComputeLayout(template); + + // Assert + var flexNode = root.Children[0]; + + Assert.Equal(20f, flexNode.Children[0].Y, 0.1f); + Assert.Equal(40f, flexNode.Children[0].Height, 0.1f); + Assert.Equal(100f, flexNode.Children[1].Y, 0.1f); + Assert.Equal(40f, flexNode.Children[1].Height, 0.1f); + + // Container auto-height includes the trailing bottom margin of the last child. + Assert.Equal(160f, flexNode.Height, 0.1f); + } }