From 839242194e515b5aef8431da9203f7ca13c4372f Mon Sep 17 00:00:00 2001 From: Sebastian Hedtrich Date: Thu, 17 Sep 2026 15:59:57 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Kalender-Titel/Name=20unauff=C3=A4llig?= =?UTF-8?q?=20verkleinern,=20Y-Abst=C3=A4nde=20weiter=20straffen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Titel ("Anwesenheit") und Schülername dienen nur der Kontrolle, dass der Kalender zum richtigen Kind gehört - nicht als gestalterischer Blickfang. Beide jetzt klein und hellgrau statt groß/fett/dunkel, dazu ein eigener (kleinerer) Y-Abstand vor der Legende statt der bisherigen Wiederverwendung von monthGapX. Der dadurch eingesparte Höhen-Overhead im Referenzentwurf (61mm -> 45mm vor den Wochenzeilen) erhöht direkt den gemeinsamen Skalierungsfaktor k, wenn die Boxhöhe der begrenzende Faktor ist - die Tageskacheln werden dadurch bei gleicher Vorlagenbox spürbar größer. Co-Authored-By: Claude Sonnet 5 --- ...StudentAttendanceCalendarDrawingBuilder.cs | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs b/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs index a6077d5..72d59fc 100644 --- a/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs +++ b/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs @@ -46,6 +46,9 @@ public static class StudentAttendanceCalendarDrawingBuilder // nachdem, ob Breite oder Höhe der realen Box stärker vom Referenzentwurf abweicht. var designWidth = 170f; var designMonthGapX = 6f; + // Eigener (kleinerer) Y-Abstand vor der Legende, getrennt von designMonthGapX (das misst den + // horizontalen Abstand zwischen den Monatsblöcken und soll davon unberührt bleiben). + var designTrailingGapY = 4f; var first = options.NormalizedStartMonth; var monthCount = options.NormalizedMonthCount; @@ -60,10 +63,14 @@ public static class StudentAttendanceCalendarDrawingBuilder var offset = ((int)current.DayOfWeek + 6) % 7; maxWeeks = Math.Max(maxWeeks, (int)Math.Ceiling((offset + days.Count) / 7d)); } - // Höhe des Referenzentwurfs bei k=1 (mm): Titel+Name+Abstand (26) + Monats-/Wochentagskopf - // (20) + maxWeeks Wochenzeilen (10 je Woche) + monthGapX (6) + Legende/Nachlauf (9). Muss mit - // der Höhenberechnung am Ende dieser Methode ("y") übereinstimmen. - var designHeight = 26f + 20f + 10f * maxWeeks + designMonthGapX + 9f; + // Höhe des Referenzentwurfs bei k=1 (mm): Titel+Name+Abstand (12, siehe unten - beide bewusst + // klein/grau gehalten, sie dienen nur der Kontrolle "sind das die richtigen Daten", nicht als + // gestalterischer Blickfang) + Monats-/Wochentagskopf (20) + maxWeeks Wochenzeilen (10 je + // Woche) + Trailing-Gap (4) + Legende/Nachlauf (9). Muss mit der Höhenberechnung am Ende + // dieser Methode ("y") übereinstimmen. Je kleiner dieser "Overhead" ausfällt, desto größer + // kann k (und damit das ganze Raster inkl. der Tageskacheln) werden, wenn contentHeight der + // begrenzende Faktor ist. + var designHeight = 12f + 20f + 10f * maxWeeks + designTrailingGapY + 9f; // a_x/a_y: wie viel größer/kleiner als der Referenzentwurf die reale Box in jeweils einer // Richtung ist. Eine DRAWBOX bricht anders als FLOWDRAWBOX nicht automatisch auf Folgeseiten @@ -93,12 +100,15 @@ public static class StudentAttendanceCalendarDrawingBuilder var commands = new List(); var contentWidthDesign = designWidth * k; var y = 0f; - commands.Add(new DrawStringEx(0, y, 14 * k, contentWidthDesign, "Anwesenheit", - DrawingTextAlignment.AlignLeft, 11 * finalScale, Color: "#1F2937", Bold: true)); - y += 14 * k; - commands.Add(new DrawStringEx(0, y, 10 * k, contentWidthDesign, studentName, - DrawingTextAlignment.AlignLeft, 8 * finalScale, Color: "#6B7280")); - y += 10 * k + 2 * k; + // Titel/Name bewusst klein und in hellem Grau: sie dienen nur der Kontrolle, dass der + // Kalender zum richtigen Kind/Zeitraum gehört, nicht als gestalterischer Blickfang - der + // eingesparte Platz kommt stattdessen den Tageskacheln zugute (siehe designHeight oben). + commands.Add(new DrawStringEx(0, y, 6 * k, contentWidthDesign, "Anwesenheit", + DrawingTextAlignment.AlignLeft, 7 * finalScale, Color: "#9CA3AF")); + y += 6 * k; + commands.Add(new DrawStringEx(0, y, 5 * k, contentWidthDesign, studentName, + DrawingTextAlignment.AlignLeft, 6.5f * finalScale, Color: "#9CA3AF")); + y += 5 * k + 1 * k; var weekdays = new[] { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; var gridStartY = y; for (var monthIndex = 0; monthIndex < monthCount; monthIndex++) @@ -134,7 +144,7 @@ public static class StudentAttendanceCalendarDrawingBuilder Color: day.HasSignal ? "#FFFFFF" : "#374151", Bold: day.HasSignal)); } } - y = gridStartY + 11 * k + 9 * k + maxWeeks * cellHeight + monthGapX; + y = gridStartY + 11 * k + 9 * k + maxWeeks * cellHeight + designTrailingGapY * k; commands.Add(new DrawStringEx(0, y, 8 * k, contentWidthDesign, "U unentschuldigt · A abwesend · V verspätet · E entschuldigt · ! Klassenbuch",