Compare commits

...
2 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 2293ddb84d Klausur-Deckblatt: Bonusaufgabe in der Punktetabelle mit „Bonus“ beschriften
CI / build-and-test (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:25:25 +02:00
adminandClaude Opus 5.5 702694d4f4 Templating: align=center/right in fest positionierter TEXTBOX/FLOWBOX
Der Container wurde horizontal auf die Textbreite geschrumpft, sodass die
Ausrichtung wirkungslos blieb. Der Auswahlrahmen für TEXT im Designer folgt
jetzt w= bzw. der Zeilenbreite bei align=center/right.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:15:02 +02:00
4 changed files with 17 additions and 5 deletions

No files matched your search

@@ -70,7 +70,7 @@ public sealed class ExamCoverSheetTests : IDisposable
]);
var texts = drawing.Commands.OfType<DrawStringEx>().Select(x => x.Text).ToList();
Assert.Equal(["Aufgabe", "Max. Punktzahl", "Punktzahl", "Nr. 1", "5", "4,5", "+3", "1"], texts);
Assert.Equal(["Aufgabe", "Max. Punktzahl", "Punktzahl", "Nr. 1", "5", "4,5", "Bonus", "+3", "1"], texts);
}
[Fact]
@@ -209,7 +209,7 @@ public sealed class LayoutOverlayEditor : Control
TableElement => "TABLE", ChartElement => "CHART", _ => "?" };
var (width, height, resizable) = element switch
{
TextElement text => (Math.Min(70d, Math.Max(5, PageWidth - text.X)),
TextElement text => (TextLineWidth(text),
Math.Max(3, PointsToUnit(ParseSize(text.Attributes) * 1.8)), false),
ImageElement image => (image.Width * ImageScale(image), image.Height * ImageScale(image), true),
_ => ((double)element.Width, element.Height, true),
@@ -254,6 +254,18 @@ public sealed class LayoutOverlayEditor : Control
private static float ParseSize(IReadOnlyDictionary<string, string> attributes) =>
attributes.TryGetValue("size", out var raw) && float.TryParse(raw,
System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var size) ? size : 11;
// Mit w= oder align=center/right entspricht der Rahmen der Zeilenbreite, in der der Renderer ausrichtet.
private double TextLineWidth(TextElement text)
{
var remaining = Math.Max(5, PageWidth - text.X);
if (text.Attributes.TryGetValue("w", out var raw) && float.TryParse(raw,
System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var width)
&& width > 0)
return width;
return text.Attributes.TryGetValue("align", out var align)
&& (align.Equals("center", StringComparison.OrdinalIgnoreCase) || align.Equals("right", StringComparison.OrdinalIgnoreCase))
? remaining : Math.Min(70d, remaining);
}
private static float ImageScale(ImageElement image) => image.Attributes.TryGetValue("scale", out var raw)
? LayoutParser.Percentage(raw) : 1;
private double PointsToUnit(double points) => PageUnit.ToLowerInvariant() switch
+1 -1
View File
@@ -52,7 +52,7 @@ public static class ExamPointsTableDrawing
var column = block[index];
var x = origin + (LabelWidth + index * ColumnWidth) * k;
Cell(commands, x, y, ColumnWidth * k, HeaderHeight * k,
column.IsBonus ? "" : $"Nr. {column.Number}", DrawingTextAlignment.AlignCenter, false, k);
column.IsBonus ? "Bonus" : $"Nr. {column.Number}", DrawingTextAlignment.AlignCenter, false, k);
Cell(commands, x, maximumY, ColumnWidth * k, MaximumHeight * k,
(column.IsBonus ? "+" : "") + Format(column.MaxPoints), DrawingTextAlignment.AlignCenter, false, k);
Cell(commands, x, pointsY, ColumnWidth * k, PointsHeight * k,
@@ -333,11 +333,11 @@ public sealed class QuestTemplateRenderer : ITemplateRenderer, ITemplatePreviewR
values, template.Manifest, text.Attributes);
break;
case TextBoxElement box:
RenderResolvedText(Position(root, box, unit).Shrink(), box.Content, box.Placeholder, box.Format,
RenderResolvedText(Position(root, box, unit).ShrinkVertical(), box.Content, box.Placeholder, box.Format,
values, template.Manifest, box.Attributes);
break;
case FlowBoxElement box:
RenderResolvedText(Position(root, box, unit).Shrink(), box.Content, box.Placeholder, box.Format,
RenderResolvedText(Position(root, box, unit).ShrinkVertical(), box.Content, box.Placeholder, box.Format,
values, template.Manifest, box.Attributes);
break;
case DrawBoxElement drawing: