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 <noreply@anthropic.com>
This commit is contained in:
Gregor Lohaus
2026-05-31 21:25:13 +02:00
parent e99a6ee33e
commit 5ca192b7be

View File

@@ -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);