Text-Bold/Italic-Toggle: face-Suffix-Stripping + FromQuartet zuerst

User: Bold/Kursiv liessen sich nicht zurueck auf normal stellen.

Diagnose: te.Font.QuartetName kann je nach RhinoCommon-Version den Bold/
Italic-Suffix im Namen mitfuehren (z.B. "Helvetica-Bold"). Dann liest
read_selection_settings face="Helvetica-Bold" → wird in updateTs ans
Backend zurueckgeschickt → _apply_font ruft FindOrCreate("Helvetica-Bold",
False, False) → das matcht intern wieder die Bold-Variante = bleibt fett.

Fix in _apply_font:
- Suffix-Stripping: -Bold, -Italic, -Oblique, -BoldItalic etc. werden vom
  face-String entfernt damit nur die Base-Family ("Helvetica") bleibt
- FromQuartetProperties zuerst (konstruiert Font direkt, unabhaengig vom
  FontTable-Cache). FindOrCreate als Fallback.
- Diagnostic print: "[TEXT] _apply_font face=... bold=... italic=..."
  damit sich nachvollziehen laesst was tatsaechlich angewendet wird

Plus textSettings/textStyles im State-Sig hinzugefuegt damit Idle-Pushes
Aenderungen nicht dedupelt verschlucken.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-21 00:51:13 +02:00
parent 38041ab6a0
commit 9f257b83e6
2 changed files with 36 additions and 16 deletions
+5 -1
View File
@@ -1264,8 +1264,12 @@ class OberleisteBridge(panel_base.BaseBridge):
_names_tuple, _active_comb,
info.get("masseActiveId"),
tuple((p.get("id"), p.get("name")) for p in (info.get("massePresets") or [])),
# textSelectionSettings: dict → tuple fuer sig-Vergleich
# textSettings + textSelectionSettings + textStyleActive im sig
# damit Aenderungen ueber Idle-Pushes nicht dedupelt werden
tuple(sorted((info.get("textSettings") or {}).items())) if info.get("textSettings") else None,
tuple(sorted((info.get("textSelectionSettings") or {}).items())) if info.get("textSelectionSettings") else None,
info.get("textStyleActiveId"),
len(info.get("textStyles") or []),
info.get("lastSetView"),
prompt,
)