Text-Styling-Leiste wirkt auf selektierten Freitext/Textspalte

Die Text-Formatier-Gruppe der Oberleiste formatierte bisher nur den
Raum-Stempel. Jetzt ist auch ein selektierter Freitext/Textspalten-Element
(Drawing2D shape "text") ein Formatier-Ziel:
- Neues optionales Feld Drawing2D-Text.marks (Marks) für einheitliche
  Formatierung (Schriftfamilie, fett/kursiv/unterstrichen, Farbe).
- App.textTarget adaptiert den Text über docFromText/plainText an die
  Rich-Text-Leiste; die GRÖSSE bleibt bewusst über die Modell-Höhe (Meter),
  nicht über pt (massstabslos wäre falsch) — sizePt wird verworfen.
- generatePlan/PlanView rendern die Marks (fontFamily/-weight/-style/
  textDecoration); marks.color hat Vorrang vor der Kategorie-Farbe.
+3 Tests. tsc + vitest grün.
This commit is contained in:
2026-07-09 01:28:37 +02:00
parent 938d6421f9
commit d0b9d22141
5 changed files with 141 additions and 16 deletions
+6 -2
View File
@@ -44,7 +44,7 @@ import {
import { columnFootprint } from "../geometry/column";
import { effectiveOverrides, hasOverrides } from "../overrides/engine";
import { evaluateRoom, siaLabel } from "../geometry/roomArea";
import type { RichTextDoc } from "../text/richText";
import type { Marks, RichTextDoc } from "../text/richText";
import { docFromText } from "../text/richText";
import { roomStampToDoc, roomStampExtraLines } from "../model/roomStamp";
import type { RoomStampLine } from "../model/roomStamp";
@@ -335,6 +335,8 @@ export type Primitive =
/** Drehung in RADIANT (CCW im Modell). */
angle: number;
color: string;
/** Optionale einheitliche Formatierung (Schriftfamilie/fett/kursiv/…). */
marks?: Marks;
/**
* Optionale Spaltenbreite in Modell-Metern (Textspalte): ist sie gesetzt,
* bricht der Renderer den Text wortweise auf diese Breite um. Fehlt sie,
@@ -1289,8 +1291,10 @@ function addDrawing2D(
text: g.text,
heightM: g.height,
angle: g.angle,
color,
// marks.color (falls gesetzt) übersteuert die Kategorie-/Elementfarbe.
color: g.marks?.color ?? color,
...(g.width && g.width > 0 ? { wrapWidth: g.width } : {}),
...(g.marks ? { marks: g.marks } : {}),
greyed,
drawingId: d.id,
});