From 5ca192b7be614e7742a70a09b04cb870f97cb30a Mon Sep 17 00:00:00 2001 From: Gregor Lohaus Date: Sun, 31 May 2026 21:25:13 +0200 Subject: [PATCH] add full-row-repaint debug toggle -Djprototerm.fullRowRepaint=true (or JPROTOTERM_FULL_ROW_REPAINT=1) bypasses the per-column repaint in renderChanged and repaints the whole row, to bisect the stale black-bar artifact that appears near the cursor and survives until a full rerender. Co-Authored-By: Claude Opus 4.8 --- .../java/com/gregor/jprototerm/TerminalPaneNode.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/gregor/jprototerm/TerminalPaneNode.java b/src/main/java/com/gregor/jprototerm/TerminalPaneNode.java index 3e3316a..c6a2688 100644 --- a/src/main/java/com/gregor/jprototerm/TerminalPaneNode.java +++ b/src/main/java/com/gregor/jprototerm/TerminalPaneNode.java @@ -44,6 +44,12 @@ final class TerminalPaneNode extends Region { private static final int DIRTY_PARTIAL = 1; private static final int DIRTY_FULL = 2; + // Debug toggle: when set, skip the per-column repaint and always repaint the whole row. + // Used to bisect partial-repaint artifacts (stale black bars near the cursor). + private static final boolean FULL_ROW_REPAINT = + Boolean.getBoolean("jprototerm.fullRowRepaint") + || "1".equals(System.getenv("JPROTOTERM_FULL_ROW_REPAINT")); + private static final Color DEFAULT_FOREGROUND = Color.rgb(225, 229, 235); private static final Color SELECTED_BACKGROUND = Color.rgb(52, 92, 140); private static final Color PANE_BACKGROUND = Color.rgb(9, 10, 12); @@ -734,6 +740,10 @@ final class TerminalPaneNode extends Region { } private void renderChanged(RenderRow row) { + if (FULL_ROW_REPAINT) { + render(row); + return; + } double oldWidth = canvas.getWidth(); double oldHeight = canvas.getHeight(); prepareCanvas(row);