From 7c88b0395627e62c1c4e0d4c21fd30190897c80d Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 28 Mar 2026 17:36:01 +0100 Subject: [PATCH] fix: left-align DO_TRY sections and shrink container to fit content - Left-align all sections (try_body, doFinally, doCatch) within DO_TRY - Shrink DO_TRY height to match actual content, removing bottom padding Co-Authored-By: Claude Opus 4.6 (1M context) --- .../server/app/diagram/ElkDiagramRenderer.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java index 4ad8fbdc..b995bd4e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java @@ -326,6 +326,7 @@ public class ElkDiagramRenderer implements DiagramRenderer { */ private void postProcessDoTrySections(LayoutContext ctx) { for (Map.Entry> entry : ctx.doTrySectionOrder.entrySet()) { + String doTryId = entry.getKey(); List orderedIds = entry.getValue(); List sections = new ArrayList<>(); for (String id : orderedIds) { @@ -334,18 +335,29 @@ public class ElkDiagramRenderer implements DiagramRenderer { } if (sections.size() < 2) continue; + // Left-align all sections and stack vertically double startY = sections.stream().mapToDouble(ElkNode::getY).min().orElse(0); double spacing = 20; double currentY = startY; for (ElkNode section : sections) { + section.setX(COMPOUND_SIDE_PADDING); section.setY(currentY); currentY += section.getHeight() + spacing; } + // Uniform width double maxWidth = sections.stream().mapToDouble(ElkNode::getWidth).max().orElse(0); for (ElkNode section : sections) { section.setWidth(maxWidth); } + + // Shrink DO_TRY parent height to fit its content + ElkNode doTryNode = ctx.elkNodeMap.get(doTryId); + if (doTryNode != null) { + double contentBottom = currentY - spacing + COMPOUND_SIDE_PADDING; + doTryNode.setHeight(contentBottom); + doTryNode.setWidth(maxWidth + 2 * COMPOUND_SIDE_PADDING); + } } }