import 'package:flutter/widgets.dart'; /// Darstellungs-Einstellungen, die nicht reine Farben sind (die stehen in /// theme.dart): Handy-Layout-Erkennung, Schriftgröße, Nachrichten-Darstellung. /// Unterhalb dieser Breite (oder sehr flach, z. B. Handy quer) zeigt Pyramid /// das Handy-Layout (eine Spalte, Chat als eigene Seite). bool isMobileLayout(Size size) => size.width < 900 || size.height < 500; // ── Schriftgröße ─────────────────────────────────────────────────────────── /// Standard-Schriftfaktor, solange der Nutzer nichts eingestellt hat: auf dem /// Handy größer (Bernd 2026-10-07: 115 % ausprobiert, 110 % als Standard /// gewünscht), am PC wie bisher. double defaultTextScale({required bool mobile}) => mobile ? 1.10 : 1.0; const minTextScale = 0.85; const maxTextScale = 1.5; /// Kombiniert die Schriftgröße des Systems (Handy-Einstellung) mit dem /// Pyramid-eigenen Regler: erst Pyramid-Faktor, dann die (ggf. nichtlineare) /// Systemskalierung. class PyramidTextScaler extends TextScaler { const PyramidTextScaler(this.system, this.factor); final TextScaler system; final double factor; @override double scale(double fontSize) => system.scale(fontSize * factor); @override // ignore: deprecated_member_use double get textScaleFactor => system.textScaleFactor * factor; @override bool operator ==(Object other) => other is PyramidTextScaler && other.system == system && other.factor == factor; @override int get hashCode => Object.hash(system, factor); } // ── Nachrichten-Darstellung ──────────────────────────────────────────────── /// Wie Nachrichten im Chat aussehen (Einstellungen → Erscheinungsbild). enum MessageStyle { /// Handy: Sprechblasen, PC: Liste. auto, /// Sprechblasen wie WhatsApp/Signal (eigene rechts, andere links). bubbles, /// Liste wie Discord/Element (Name + Text untereinander). list; String get label => switch (this) { MessageStyle.auto => 'Automatisch', MessageStyle.bubbles => 'Sprechblasen', MessageStyle.list => 'Liste', }; /// Tatsächlich anzuwendende Darstellung. bool useBubbles({required bool mobile}) => switch (this) { MessageStyle.auto => mobile, MessageStyle.bubbles => true, MessageStyle.list => false, }; static MessageStyle fromName(String? name) => MessageStyle.values .firstWhere((v) => v.name == name, orElse: () => MessageStyle.auto); }