diff --git a/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs b/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs index 72d59fc..14ebd5c 100644 --- a/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs +++ b/LehrerApp.Desktop/Services/StudentAttendanceCalendarDrawingBuilder.cs @@ -48,7 +48,7 @@ public static class StudentAttendanceCalendarDrawingBuilder 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 designTrailingGapY = 2f; var first = options.NormalizedStartMonth; var monthCount = options.NormalizedMonthCount; @@ -63,14 +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 (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; + // Höhe des Referenzentwurfs bei k=1 (mm): Name+Abstand (5.5, siehe unten - keine eigene + // "Anwesenheit"-Überschrift mehr, die Monatsnamen darunter machen bereits klar, worum es + // geht; der Name bleibt klein/grau nur zur Kontrolle "ist das das richtige Kind") + Monats-/ + // Wochentagskopf (20) + maxWeeks Wochenzeilen (10 je Woche) + Trailing-Gap (2) + 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 = 5.5f + 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 @@ -100,15 +100,13 @@ public static class StudentAttendanceCalendarDrawingBuilder var commands = new List(); var contentWidthDesign = designWidth * k; var y = 0f; - // 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 + // Keine eigene "Anwesenheit"-Überschrift mehr - die Monatsnamen im Raster machen bereits + // klar, worum es geht. Der Name bleibt klein und in hellem Grau: er dient nur der Kontrolle, + // dass der Kalender zum richtigen Kind 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; + y += 5 * k + .5f * k; var weekdays = new[] { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; var gridStartY = y; for (var monthIndex = 0; monthIndex < monthCount; monthIndex++)