Bernds Feedback 2026-10-07: - Schrift-Standard Handy 110 % (statt 115 %). - PyrIconBtn: im Handy-Layout Symbol 22 px (vorher fest 16), Flaeche 40, Tippflaeche 44; Farben aus dem Farbmodus statt fest verdrahtet. - Eingabeleiste: Anhaengen/GIF/Emoji/Senden auf dem Handy 22-23 px statt 12-13 px. - Chat-Kopf (Handy): Anrufen + Videoanruf sichtbar, Suchen + Mitglieder im Drei-Punkte-Menue. - Aufklappbarer DM-Kopf als Ebenen: Zurueck + Symbole bleiben oben, Profilbereich gleitet darunter und nutzt die volle Breite (vorher Name zu "p..." gekuerzt, Symbole rutschten in die Mitte); Kuerzel im Avatar mittig, skaliert mit. - SpringPress (widgets/spring_press.dart): federnde Druck-Rueckmeldung, aus bei "Animationen 0 %". Co-Authored-By: Claude Opus 5.5 <[email protected]>
75 lines
2.6 KiB
Dart
75 lines
2.6 KiB
Dart
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);
|
|
}
|