Skip to content

Commit 6e26c24

Browse files
committed
Make Terminal operate on and cache colors instead of RGB values
1 parent 3750de9 commit 6e26c24

5 files changed

Lines changed: 26 additions & 28 deletions

File tree

terminal/bundles/org.eclipse.terminal.control/src/org/eclipse/terminal/internal/emulator/VT100TerminalControl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import org.eclipse.swt.events.KeyListener;
8585
import org.eclipse.swt.events.MouseAdapter;
8686
import org.eclipse.swt.events.MouseEvent;
87+
import org.eclipse.swt.graphics.Color;
8788
import org.eclipse.swt.graphics.Font;
8889
import org.eclipse.swt.graphics.RGB;
8990
import org.eclipse.swt.layout.GridData;
@@ -678,7 +679,7 @@ private void updatePreferences(PropertyChangeEvent unused) {
678679
}
679680

680681
private void onTerminalColorsChanged() {
681-
Map<TerminalColor, RGB> map = new EnumMap<>(TerminalColor.class);
682+
Map<TerminalColor, Color> map = new EnumMap<>(TerminalColor.class);
682683
TerminalColor[] values = TerminalColor.values();
683684
for (TerminalColor terminalColor : values) {
684685
RGB rgb = null;
@@ -694,7 +695,7 @@ private void onTerminalColorsChanged() {
694695
if (rgb == null) {
695696
rgb = TerminalColorPresets.INSTANCE.getDefaultPreset().getRGB(terminalColor);
696697
}
697-
map.put(terminalColor, rgb);
698+
map.put(terminalColor, new Color(rgb));
698699
}
699700
fCtlText.updateColors(map);
700701
}

terminal/bundles/org.eclipse.terminal.control/src/org/eclipse/terminal/internal/textcanvas/ILinelRenderer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import org.eclipse.swt.graphics.Color;
2020
import org.eclipse.swt.graphics.GC;
21-
import org.eclipse.swt.graphics.RGB;
2221
import org.eclipse.terminal.model.TerminalColor;
2322

2423
/**
@@ -38,7 +37,7 @@ public interface ILinelRenderer {
3837
*/
3938
void updateFont(String fontName);
4039

41-
void updateColors(Map<TerminalColor, RGB> map);
40+
void updateColors(Map<TerminalColor, Color> map);
4241

4342
void setInvertedColors(boolean invert);
4443

terminal/bundles/org.eclipse.terminal.control/src/org/eclipse/terminal/internal/textcanvas/StyleMap.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Map;
2424

2525
import org.eclipse.jface.resource.JFaceResources;
26+
import org.eclipse.swt.graphics.Color;
2627
import org.eclipse.swt.graphics.Font;
2728
import org.eclipse.swt.graphics.GC;
2829
import org.eclipse.swt.graphics.Point;
@@ -46,7 +47,7 @@ public class StyleMap {
4647
private boolean fInvertColors;
4748
private boolean fProportional;
4849
private final int[] fOffsets = new int[256];
49-
private final Map<TerminalColor, RGB> fColorMap = new EnumMap<>(TerminalColor.class);
50+
private final Map<TerminalColor, Color> fColorMap = new EnumMap<>(TerminalColor.class);
5051

5152
public StyleMap() {
5253
fDefaultStyle = TerminalStyle.getDefaultStyle();
@@ -55,11 +56,11 @@ public StyleMap() {
5556
}
5657

5758
private void initColors() {
58-
Map<TerminalColor, RGB> map = new EnumMap<>(TerminalColor.class);
59+
Map<TerminalColor, Color> map = new EnumMap<>(TerminalColor.class);
5960
TerminalColor[] values = TerminalColor.values();
6061
for (TerminalColor terminalColor : values) {
61-
RGB rgb = TerminalColorPresets.INSTANCE.getDefaultPreset().getRGB(terminalColor);
62-
map.put(terminalColor, rgb);
62+
Color color = new Color(TerminalColorPresets.INSTANCE.getDefaultPreset().getRGB(terminalColor));
63+
map.put(terminalColor, color);
6364
}
6465
updateColors(map);
6566
}
@@ -68,11 +69,11 @@ private void initFont() {
6869
updateFont(ITerminalConstants.FONT_DEFINITION);
6970
}
7071

71-
private RGB getRGB(TerminalColor color) {
72+
private Color getColor(TerminalColor color) {
7273
return fColorMap.get(color);
7374
}
7475

75-
public RGB getForegrondRGB(TerminalStyle style) {
76+
public Color getForegroundColor(TerminalStyle style) {
7677
style = defaultIfNull(style);
7778
RGB foregroundRGB;
7879
if (style.isReverse()) {
@@ -81,7 +82,7 @@ public RGB getForegrondRGB(TerminalStyle style) {
8182
foregroundRGB = style.getForegroundRGB();
8283
}
8384
if (foregroundRGB != null) {
84-
return foregroundRGB;
85+
return new Color(foregroundRGB);
8586
}
8687

8788
TerminalColor color;
@@ -96,10 +97,10 @@ public RGB getForegrondRGB(TerminalStyle style) {
9697
}
9798

9899
color = color.convertColor(fInvertColors, style.isBold());
99-
return getRGB(color);
100+
return getColor(color);
100101
}
101102

102-
public RGB getBackgroundRGB(TerminalStyle style) {
103+
public Color getBackgroundColor(TerminalStyle style) {
103104
style = defaultIfNull(style);
104105
RGB backgroundRGB;
105106
if (style.isReverse()) {
@@ -108,7 +109,7 @@ public RGB getBackgroundRGB(TerminalStyle style) {
108109
backgroundRGB = style.getBackgroundRGB();
109110
}
110111
if (backgroundRGB != null) {
111-
return backgroundRGB;
112+
return new Color(backgroundRGB);
112113
}
113114

114115
TerminalColor color;
@@ -123,7 +124,7 @@ public RGB getBackgroundRGB(TerminalStyle style) {
123124
}
124125

125126
color = color.convertColor(fInvertColors, style.isBold());
126-
return getRGB(color);
127+
return getColor(color);
127128
}
128129

129130
private TerminalStyle defaultIfNull(TerminalStyle style) {
@@ -267,7 +268,7 @@ public int getCharOffset(char c) {
267268
return fOffsets[c];
268269
}
269270

270-
public void updateColors(Map<TerminalColor, RGB> colorMap) {
271+
public void updateColors(Map<TerminalColor, Color> colorMap) {
271272
fColorMap.putAll(colorMap);
272273
}
273274
}

terminal/bundles/org.eclipse.terminal.control/src/org/eclipse/terminal/internal/textcanvas/TextCanvas.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.eclipse.swt.graphics.Device;
4141
import org.eclipse.swt.graphics.GC;
4242
import org.eclipse.swt.graphics.Point;
43-
import org.eclipse.swt.graphics.RGB;
4443
import org.eclipse.swt.graphics.Rectangle;
4544
import org.eclipse.swt.widgets.Composite;
4645
import org.eclipse.terminal.control.ITerminalMouseListener;
@@ -650,7 +649,7 @@ public void updateFont(String fontName) {
650649
calculateGrid();
651650
}
652651

653-
public void updateColors(Map<TerminalColor, RGB> map) {
652+
public void updateColors(Map<TerminalColor, Color> map) {
654653
fCellRenderer.updateColors(map);
655654
redraw();
656655
}

terminal/bundles/org.eclipse.terminal.control/src/org/eclipse/terminal/internal/textcanvas/TextLineRenderer.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.eclipse.swt.graphics.GC;
2424
import org.eclipse.swt.graphics.Image;
2525
import org.eclipse.swt.graphics.Point;
26-
import org.eclipse.swt.graphics.RGB;
2726
import org.eclipse.terminal.connector.Logger;
2827
import org.eclipse.terminal.internal.control.impl.TerminalPlugin;
2928
import org.eclipse.terminal.model.ITerminalTextDataReadOnly;
@@ -86,8 +85,8 @@ public void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int
8685
int colStart = line == hsStart.y ? hsStart.x : 0;
8786
int colEnd = line == hsEnd.y ? hsEnd.x : getTerminalText().getWidth();
8887
if (colStart < colEnd) {
89-
RGB defaultFg = fStyleMap.getForegrondRGB(null);
90-
doubleBufferGC.setForeground(new Color(doubleBufferGC.getDevice(), defaultFg));
88+
Color defaultFg = fStyleMap.getForegroundColor(null);
89+
doubleBufferGC.setForeground(defaultFg);
9190
drawUnderline(doubleBufferGC, colStart, colEnd);
9291
}
9392
}
@@ -133,8 +132,7 @@ private void fillBackground(GC gc, int x, int y, int width, int height) {
133132

134133
@Override
135134
public Color getDefaultBackgroundColor() {
136-
RGB backgroundRGB = fStyleMap.getBackgroundRGB(null);
137-
return new Color(backgroundRGB);
135+
return fStyleMap.getBackgroundColor(null);
138136
}
139137

140138
private void drawCursor(ITextCanvasModel model, GC gc, int row, int x, int y, int colFirst) {
@@ -196,10 +194,10 @@ private void drawUnderline(GC gc, int colStart, int colEnd) {
196194
}
197195

198196
private void setupGC(GC gc, TerminalStyle style) {
199-
RGB foregrondColor = fStyleMap.getForegrondRGB(style);
200-
gc.setForeground(new Color(gc.getDevice(), foregrondColor));
201-
RGB backgroundColor = fStyleMap.getBackgroundRGB(style);
202-
gc.setBackground(new Color(gc.getDevice(), backgroundColor));
197+
Color foregroundColor = fStyleMap.getForegroundColor(style);
198+
gc.setForeground(foregroundColor);
199+
Color backgroundColor = fStyleMap.getBackgroundColor(style);
200+
gc.setBackground(backgroundColor);
203201

204202
Font f = fStyleMap.getFont(style);
205203
if (f != gc.getFont()) {
@@ -217,7 +215,7 @@ public void updateFont(String fontName) {
217215
}
218216

219217
@Override
220-
public void updateColors(Map<TerminalColor, RGB> map) {
218+
public void updateColors(Map<TerminalColor, Color> map) {
221219
fStyleMap.updateColors(map);
222220
}
223221

0 commit comments

Comments
 (0)