fix(app): settings live-apply — font on open terminals, daemon uptime
- Font change now applies to already-open terminals: the WebGL renderer caches glyphs in a texture atlas keyed by the old font/size, so the live re-apply effect now calls webglAddon.clearTextureAtlas() (via a new ref) after updating fontFamily/fontSize, before refitting. - Daemon uptime now reflects a restart: the Settings daemon section ticks every second for live uptime, and Stop/Restart trigger an onReload callback that re-fetches health/status in App so a restarted daemon's new started_at_ms is shown instead of the stale value. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,7 @@ export function TerminalView({ surfaceId, font, palette }: { surfaceId: string;
|
||||
const ref = useRef<HTMLDivElement>(null);
|
||||
const termRef = useRef<Terminal | null>(null);
|
||||
const fitRef = useRef<FitAddon | null>(null);
|
||||
const webglRef = useRef<WebglAddon | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (!ref.current) return;
|
||||
@@ -39,7 +40,9 @@ export function TerminalView({ surfaceId, font, palette }: { surfaceId: string;
|
||||
termRef.current = term;
|
||||
|
||||
try {
|
||||
term.loadAddon(new WebglAddon());
|
||||
const webgl = new WebglAddon();
|
||||
term.loadAddon(webgl);
|
||||
webglRef.current = webgl;
|
||||
} catch {
|
||||
// webgl unavailable → fall back to canvas/dom renderer silently
|
||||
}
|
||||
@@ -99,6 +102,7 @@ export function TerminalView({ surfaceId, font, palette }: { surfaceId: string;
|
||||
term.dispose();
|
||||
termRef.current = null;
|
||||
fitRef.current = null;
|
||||
webglRef.current = null;
|
||||
};
|
||||
}, [surfaceId]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
@@ -110,6 +114,10 @@ export function TerminalView({ surfaceId, font, palette }: { surfaceId: string;
|
||||
if (font) {
|
||||
t.options.fontFamily = `'${font.family}', monospace`;
|
||||
t.options.fontSize = font.size;
|
||||
// The WebGL renderer caches rasterized glyphs in a texture atlas keyed by
|
||||
// the old font/size; without clearing it the grid keeps rendering stale
|
||||
// glyphs after a font change.
|
||||
webglRef.current?.clearTextureAtlas();
|
||||
}
|
||||
if (palette) t.options.theme = xtermTheme(palette);
|
||||
requestAnimationFrame(() => { try { fitRef.current?.fit(); } catch { /* ignore */ } });
|
||||
|
||||
Reference in New Issue
Block a user