From 6b332e35cdb05e642af32c9d6151e1488d1da476 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Sat, 19 Jun 2021 10:11:05 -0400 Subject: [PATCH] Bug 574271: Draw characters in the correct color on macos There is a bug in SWT on macos - Bug 568777 - with the cache of single character drawStrings with transparent backgrounds as a performance boost. This causes the terminal to draw some characters in the wrong color. The workaround is to not draw with transparency, which should be fine because we just filled the background with the same color that the 1 character string will draw with. The performance, measured with TerminalTextUITest in Fast mode with no throttling, does not seem affected and in my testing there does not seem to be any graphic side effects. Change-Id: I1b0aadae100d81a8f4533ba73273ccc8202e068f --- .../org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF | 2 +- .../tm/internal/terminal/textcanvas/TextLineRenderer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF b/terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF index 6689e2ee7a5..94dfcbf3f7a 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF +++ b/terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.tm.terminal.control; singleton:=true -Bundle-Version: 5.2.0.qualifier +Bundle-Version: 5.2.1.qualifier Bundle-Activator: org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java b/terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java index ab3d08080e3..845ee499581 100644 --- a/terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java +++ b/terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java @@ -176,7 +176,7 @@ public class TextLineRenderer implements ILinelRenderer { // TODO why do I have to draw the background character by character?????? gc.fillRectangle(xx, y, fStyleMap.getFontWidth(), fStyleMap.getFontHeight()); if (c != ' ' && c != '\000') { - gc.drawString(String.valueOf(c), fStyleMap.getCharOffset(c) + xx, y, true); + gc.drawString(String.valueOf(c), fStyleMap.getCharOffset(c) + xx, y, false); } } } else {