mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 549697: Define standard terminal colors with Eclipse preferences
New types TerminalColor and TerminalStyle replace StyleColor and Style to separate the meta information about styles and colors from the user currently selected colors. The StyleMap maps the TerminalColor/Style to the concrete fonts and colors used in the display. Colors are now configurable via the terminal preference page using the new TerminalColorsFieldEditor. All preferences are now passed in to the VT100 control so that different terminal consumers can have different preferences and styles. Remove dark theme contribution. The colors of the terminal are now inherited from the editor settings (using SystemDefaultColors) which come from the theme. If we were to invert colors too when in Dark theme then the colors actually end up light background. Change-Id: I2cf5427ac0be9a189a7f0d3565cfc97ceedb8749
This commit is contained in:
parent
c6f2eb5588
commit
d6818fbb03
56 changed files with 1496 additions and 729 deletions
|
@ -43,6 +43,7 @@
|
|||
<li><a href="#dsf">DSF and DSF-GDB API Changes.</a></li>
|
||||
<li><a href="#oldStyleProjects">Partial removal of CDT 3.X project support.</a></li>
|
||||
<li><a href="#optionsAPI">Removal of CDT Core Options API.</a></li>
|
||||
<li><a href="#terminal">TM Terminal has major changes to support new color and preference functionality.</a></li>
|
||||
</ol>
|
||||
<p>
|
||||
Planned Removals after June 2022
|
||||
|
@ -228,6 +229,34 @@
|
|||
See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=565154" target="_blank">Bug 565154</a>.
|
||||
</p>
|
||||
|
||||
<h3>12. <a name="terminal">TM Terminal has major changes to support new color and preference functionality.</a></h3>
|
||||
<p>
|
||||
The TM Terminal's control (org.eclipse.tm.terminal.control) bundle has a major new version to support numerous API
|
||||
changes to support features such as new colors, preference sharing and some other code clean-up.
|
||||
</p>
|
||||
<ul>
|
||||
<li>org.eclipse.tm.terminal.model.Style removed and is mostly replaced by
|
||||
org.eclipse.tm.terminal.model.TerminalStyle. To handle
|
||||
new API and color handling, the entire Style class was replaced with TerminalStyle that operates in a similar way.
|
||||
Because some methods in TerminalStyle have similar signatures to those in removed Style class a new class was
|
||||
introduced to prevent accidental use of incorrect API. See <a
|
||||
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.</li>
|
||||
<li>org.eclipse.tm.terminal.model.StyleColor removed. Replaced by a new way of representing standard color in the
|
||||
terminal using the new enum org.eclipse.tm.terminal.model.TerminalColor.. See <a
|
||||
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
|
||||
</li>
|
||||
<li>org.eclipse.tm.terminal.model.ITerminalTextData method taking or returning Style now use TerminalStyle. See <a
|
||||
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
|
||||
</li>
|
||||
<li>org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly method taking or returning Style now use TerminalStyle.
|
||||
See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
|
||||
</li>
|
||||
<li>org.eclipse.tm.terminal.model.LineSegment method taking or returning Style now use TerminalStyle. See <a
|
||||
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Future Deletions</h2>
|
||||
|
|
|
@ -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: 4.6.100.qualifier
|
||||
Bundle-Version: 5.0.0.qualifier
|
||||
Bundle-Activator: org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin
|
||||
Bundle-Vendor: %providerName
|
||||
Bundle-Localization: plugin
|
||||
|
|
|
@ -28,7 +28,6 @@ bin.includes = .,\
|
|||
about.properties,\
|
||||
icons/,\
|
||||
HelpContexts.xml,\
|
||||
css/,\
|
||||
about.mappings,\
|
||||
cdt_logo_icon32.png
|
||||
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014, 2015 vogella GmbH and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* Contributors:
|
||||
* Lars Vogel <Lars.Vogel@gmail.com> - initial API and implementation
|
||||
******************************************************************************/
|
||||
|
||||
IEclipsePreferences#org-eclipse-tm-terminal-control {
|
||||
preferences:
|
||||
"TerminalPrefInvertColors=true"
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
###############################################################################
|
||||
# Copyright (c) 2003 - 2018 Wind River Systems, Inc. and others.
|
||||
# Copyright (c) 2003, 2020 Wind River Systems, Inc. and others.
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are made available under the terms of the Eclipse Public License 2.0
|
||||
# which accompanies this distribution, and is available at
|
||||
|
@ -40,7 +40,10 @@ terminal.command.maximize.name=Maximize Active View or Editor
|
|||
terminal.command.quickaccess.name=Quick Access
|
||||
|
||||
terminal.preferences.name = Terminal
|
||||
terminal.font.description = The font for the terminal console.
|
||||
terminal.font.description = The font for the terminal console. Please also see the Terminal Preference pages for changing colors.
|
||||
terminal.font.label = Terminal Console Font
|
||||
|
||||
terminal.views.theme.category.label = Terminal
|
||||
terminal.views.theme.category.description = Fonts used in the Terminal View. Please also see the Terminal Preference pages for changing colors.
|
||||
|
||||
terminal.connectors.name = Terminal Connector Extensions
|
||||
|
|
|
@ -257,6 +257,7 @@
|
|||
|
||||
<extension point="org.eclipse.ui.themes" id="terminal.font">
|
||||
<fontDefinition
|
||||
categoryId="terminal.views.theme.category"
|
||||
defaultsTo="org.eclipse.jface.textfont"
|
||||
id="terminal.views.view.font.definition"
|
||||
label="%terminal.font.label">
|
||||
|
@ -264,14 +265,14 @@
|
|||
%terminal.font.description
|
||||
</description>
|
||||
</fontDefinition>
|
||||
</extension>
|
||||
<themeElementCategory
|
||||
id="terminal.views.theme.category"
|
||||
label="%terminal.views.theme.category.label">
|
||||
<description>
|
||||
%terminal.views.theme.category.description
|
||||
</description>
|
||||
</themeElementCategory>
|
||||
|
||||
<!-- Theme contributions -->
|
||||
<extension point="org.eclipse.e4.ui.css.swt.theme">
|
||||
<stylesheet
|
||||
uri="css/org.eclipse.tm.terminal.stylesheet.dark.css">
|
||||
<themeid refid="org.eclipse.e4.ui.css.theme.e4_dark"/>
|
||||
</stylesheet>
|
||||
</extension>
|
||||
|
||||
</extension>
|
||||
</plugin>
|
||||
|
|
|
@ -19,6 +19,33 @@ public class TerminalMessages extends NLS {
|
|||
NLS.initializeMessages(TerminalMessages.class.getName(), TerminalMessages.class);
|
||||
}
|
||||
|
||||
public static String TerminalColorPresets_EclipseDark;
|
||||
public static String TerminalColorPresets_EclipseLight;
|
||||
public static String TerminalColorPresets_TerminalDefaults;
|
||||
public static String TerminalColorsFieldEditor_Background;
|
||||
public static String TerminalColorsFieldEditor_Black;
|
||||
public static String TerminalColorsFieldEditor_Blue;
|
||||
public static String TerminalColorsFieldEditor_BrightBlack;
|
||||
public static String TerminalColorsFieldEditor_BrightBlue;
|
||||
public static String TerminalColorsFieldEditor_BrightCyan;
|
||||
public static String TerminalColorsFieldEditor_BrightGreen;
|
||||
public static String TerminalColorsFieldEditor_BrightMagenta;
|
||||
public static String TerminalColorsFieldEditor_BrightRed;
|
||||
public static String TerminalColorsFieldEditor_BrightWhite;
|
||||
public static String TerminalColorsFieldEditor_BrightYellow;
|
||||
public static String TerminalColorsFieldEditor_Cyan;
|
||||
public static String TerminalColorsFieldEditor_GeneralColors;
|
||||
public static String TerminalColorsFieldEditor_Green;
|
||||
public static String TerminalColorsFieldEditor_LoadPresets;
|
||||
public static String TerminalColorsFieldEditor_Magenta;
|
||||
public static String TerminalColorsFieldEditor_PaletteColors;
|
||||
public static String TerminalColorsFieldEditor_Presets;
|
||||
public static String TerminalColorsFieldEditor_Red;
|
||||
public static String TerminalColorsFieldEditor_SelectedText;
|
||||
public static String TerminalColorsFieldEditor_Selection;
|
||||
public static String TerminalColorsFieldEditor_TextColor;
|
||||
public static String TerminalColorsFieldEditor_White;
|
||||
public static String TerminalColorsFieldEditor_Yellow;
|
||||
public static String TerminalError;
|
||||
public static String SocketError;
|
||||
public static String IOError;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
###############################################################################
|
||||
# Copyright (c) 2003, 2018 Wind River Systems, Inc. and others.
|
||||
# Copyright (c) 2003, 2020 Wind River Systems, Inc. and others.
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are made available under the terms of the Eclipse Public License 2.0
|
||||
# which accompanies this distribution, and is available at
|
||||
|
@ -19,7 +19,33 @@
|
|||
###############################################################################
|
||||
|
||||
# NLS_MESSAGEFORMAT_VAR
|
||||
|
||||
TerminalColorPresets_EclipseLight=Eclipse Light
|
||||
TerminalColorPresets_TerminalDefaults=Terminal Defaults
|
||||
TerminalColorPresets_EclipseDark=Eclipse Dark
|
||||
TerminalColorsFieldEditor_Background=Background
|
||||
TerminalColorsFieldEditor_Black=Black
|
||||
TerminalColorsFieldEditor_Blue=Blue
|
||||
TerminalColorsFieldEditor_BrightBlack=Bright Black
|
||||
TerminalColorsFieldEditor_BrightBlue=Bright Blue
|
||||
TerminalColorsFieldEditor_BrightCyan=Bright Cyan
|
||||
TerminalColorsFieldEditor_BrightGreen=Bright Green
|
||||
TerminalColorsFieldEditor_BrightMagenta=Bright Magenta
|
||||
TerminalColorsFieldEditor_BrightRed=Bright Red
|
||||
TerminalColorsFieldEditor_BrightWhite=Bright White
|
||||
TerminalColorsFieldEditor_BrightYellow=Bright Yellow
|
||||
TerminalColorsFieldEditor_Cyan=Cyan
|
||||
TerminalColorsFieldEditor_GeneralColors=General colors
|
||||
TerminalColorsFieldEditor_Green=Green
|
||||
TerminalColorsFieldEditor_LoadPresets=Load Presets...
|
||||
TerminalColorsFieldEditor_Magenta=Magenta
|
||||
TerminalColorsFieldEditor_PaletteColors=Palette colors
|
||||
TerminalColorsFieldEditor_Presets=Presets
|
||||
TerminalColorsFieldEditor_Red=Red
|
||||
TerminalColorsFieldEditor_SelectedText=Selected text
|
||||
TerminalColorsFieldEditor_Selection=Selection
|
||||
TerminalColorsFieldEditor_TextColor=Text color
|
||||
TerminalColorsFieldEditor_White=White
|
||||
TerminalColorsFieldEditor_Yellow=Yellow
|
||||
TerminalError = Terminal Error
|
||||
SocketError = Socket Error
|
||||
IOError = IO Error
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.emulator;
|
||||
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -100,17 +100,17 @@ public interface IVT100EmulatorBackend {
|
|||
*/
|
||||
void deleteLines(int n);
|
||||
|
||||
Style getDefaultStyle();
|
||||
TerminalStyle getDefaultStyle();
|
||||
|
||||
void setDefaultStyle(Style defaultStyle);
|
||||
void setDefaultStyle(TerminalStyle defaultStyle);
|
||||
|
||||
Style getStyle();
|
||||
TerminalStyle getStyle();
|
||||
|
||||
/**
|
||||
* Sets the style to be used from now on
|
||||
* @param style
|
||||
*/
|
||||
void setStyle(Style style);
|
||||
void setStyle(TerminalStyle style);
|
||||
|
||||
/**
|
||||
* This method displays a subset of the newly-received text in the Terminal
|
||||
|
|
|
@ -15,7 +15,7 @@ package org.eclipse.tm.internal.terminal.emulator;
|
|||
|
||||
import java.io.PrintStream;
|
||||
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
|
||||
final IVT100EmulatorBackend fBackend;
|
||||
|
@ -102,7 +102,7 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getDefaultStyle() {
|
||||
public TerminalStyle getDefaultStyle() {
|
||||
return fBackend.getDefaultStyle();
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,7 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle() {
|
||||
public TerminalStyle getStyle() {
|
||||
return fBackend.getStyle();
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultStyle(Style defaultStyle) {
|
||||
public void setDefaultStyle(TerminalStyle defaultStyle) {
|
||||
fWriter.println("setDefaultStyle(" + defaultStyle + ")"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
fBackend.setDefaultStyle(defaultStyle);
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setStyle(Style style) {
|
||||
public void setStyle(TerminalStyle style) {
|
||||
fWriter.println("setStyle(" + style + ")"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
fBackend.setStyle(style);
|
||||
}
|
||||
|
|
|
@ -29,15 +29,14 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.emulator;
|
||||
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.BLACK;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.BLUE;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.CYAN;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.GREEN;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.MAGENTA;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.RED;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.WHITE;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.WHITE_FOREGROUND;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.YELLOW;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.CYAN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.MAGENTA;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.WHITE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.YELLOW;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
@ -49,7 +48,7 @@ import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
|
|||
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
|
||||
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* This class processes character data received from the remote host and
|
||||
|
@ -170,7 +169,7 @@ public class VT100Emulator implements ControlListener {
|
|||
text = new VT100EmulatorBackend(data);
|
||||
|
||||
// text.setDimensions(24, 80);
|
||||
Style style = Style.getStyle("BLACK", "WHITE"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
text.setDefaultStyle(style);
|
||||
text.setStyle(style);
|
||||
}
|
||||
|
@ -851,7 +850,7 @@ public class VT100Emulator implements ControlListener {
|
|||
|
||||
ansiParameters[0].append('0');
|
||||
}
|
||||
Style style = text.getStyle();
|
||||
TerminalStyle style = text.getStyle();
|
||||
// There are a non-zero number of ANSI parameters. Process each one in
|
||||
// order.
|
||||
|
||||
|
@ -904,39 +903,39 @@ public class VT100Emulator implements ControlListener {
|
|||
break;
|
||||
|
||||
case 30:
|
||||
style = style.setForground(BLACK);
|
||||
style = style.setForeground(BLACK);
|
||||
break;
|
||||
|
||||
case 31:
|
||||
style = style.setForground(RED);
|
||||
style = style.setForeground(RED);
|
||||
break;
|
||||
|
||||
case 32:
|
||||
style = style.setForground(GREEN);
|
||||
style = style.setForeground(GREEN);
|
||||
break;
|
||||
|
||||
case 33:
|
||||
style = style.setForground(YELLOW);
|
||||
style = style.setForeground(YELLOW);
|
||||
break;
|
||||
|
||||
case 34:
|
||||
style = style.setForground(BLUE);
|
||||
style = style.setForeground(BLUE);
|
||||
break;
|
||||
|
||||
case 35:
|
||||
style = style.setForground(MAGENTA);
|
||||
style = style.setForeground(MAGENTA);
|
||||
break;
|
||||
|
||||
case 36:
|
||||
style = style.setForground(CYAN);
|
||||
style = style.setForeground(CYAN);
|
||||
break;
|
||||
|
||||
case 37:
|
||||
style = style.setForground(WHITE_FOREGROUND);
|
||||
style = style.setForeground(WHITE);
|
||||
break;
|
||||
|
||||
case 39: //Foreground: Default
|
||||
style = style.setForground(text.getDefaultStyle().getForground());
|
||||
style = style.setForeground(text.getDefaultStyle());
|
||||
break;
|
||||
|
||||
case 40:
|
||||
|
@ -972,7 +971,7 @@ public class VT100Emulator implements ControlListener {
|
|||
break;
|
||||
|
||||
case 49: //Background: Default
|
||||
style = style.setBackground(text.getDefaultStyle().getBackground());
|
||||
style = style.setBackground(text.getDefaultStyle());
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
package org.eclipse.tm.internal.terminal.emulator;
|
||||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* @noextend This class is not intended to be subclassed by clients.
|
||||
|
@ -87,8 +87,8 @@ public class VT100EmulatorBackend implements IVT100EmulatorBackend {
|
|||
* and next output requires line wrap */
|
||||
private boolean fWrapPending;
|
||||
private boolean fInsertMode;
|
||||
private Style fDefaultStyle;
|
||||
private Style fStyle;
|
||||
private TerminalStyle fDefaultStyle;
|
||||
private TerminalStyle fStyle;
|
||||
int fLines;
|
||||
int fColumns;
|
||||
final private ITerminalTextData fTerminal;
|
||||
|
@ -161,7 +161,7 @@ public class VT100EmulatorBackend implements IVT100EmulatorBackend {
|
|||
int n = charactersToInsert;
|
||||
for (int col = fColumns - 1; col >= fCursorColumn + n; col--) {
|
||||
char c = fTerminal.getChar(line, col - n);
|
||||
Style style = fTerminal.getStyle(line, col - n);
|
||||
TerminalStyle style = fTerminal.getStyle(line, col - n);
|
||||
fTerminal.setChar(line, col, c, style);
|
||||
}
|
||||
int last = Math.min(fCursorColumn + n, fColumns);
|
||||
|
@ -246,7 +246,7 @@ public class VT100EmulatorBackend implements IVT100EmulatorBackend {
|
|||
int line = toAbsoluteLine(fCursorLine);
|
||||
for (int col = fCursorColumn + n; col < fColumns; col++) {
|
||||
char c = fTerminal.getChar(line, col);
|
||||
Style style = fTerminal.getStyle(line, col);
|
||||
TerminalStyle style = fTerminal.getStyle(line, col);
|
||||
fTerminal.setChar(line, col - n, c, style);
|
||||
}
|
||||
int first = Math.max(fCursorColumn, fColumns - n);
|
||||
|
@ -273,21 +273,21 @@ public class VT100EmulatorBackend implements IVT100EmulatorBackend {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getDefaultStyle() {
|
||||
public TerminalStyle getDefaultStyle() {
|
||||
synchronized (fTerminal) {
|
||||
return fDefaultStyle;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultStyle(Style defaultStyle) {
|
||||
public void setDefaultStyle(TerminalStyle defaultStyle) {
|
||||
synchronized (fTerminal) {
|
||||
fDefaultStyle = defaultStyle;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle() {
|
||||
public TerminalStyle getStyle() {
|
||||
synchronized (fTerminal) {
|
||||
if (fStyle == null)
|
||||
return fDefaultStyle;
|
||||
|
@ -296,7 +296,7 @@ public class VT100EmulatorBackend implements IVT100EmulatorBackend {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setStyle(Style style) {
|
||||
public void setStyle(TerminalStyle style) {
|
||||
synchronized (fTerminal) {
|
||||
fStyle = style;
|
||||
}
|
||||
|
|
|
@ -52,21 +52,26 @@ import java.io.UnsupportedEncodingException;
|
|||
import java.lang.reflect.Field;
|
||||
import java.net.SocketException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.EnumMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.core.commands.ParameterizedCommand;
|
||||
import org.eclipse.core.runtime.Assert;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.jface.bindings.Binding;
|
||||
import org.eclipse.jface.bindings.keys.KeySequence;
|
||||
import org.eclipse.jface.bindings.keys.KeyStroke;
|
||||
import org.eclipse.jface.bindings.keys.SWTKeySupport;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.resource.DataFormatException;
|
||||
import org.eclipse.jface.resource.JFaceResources;
|
||||
import org.eclipse.jface.resource.StringConverter;
|
||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||
import org.eclipse.osgi.util.NLS;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.dnd.Clipboard;
|
||||
|
@ -81,6 +86,7 @@ import org.eclipse.swt.events.KeyListener;
|
|||
import org.eclipse.swt.events.MouseAdapter;
|
||||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
|
@ -98,6 +104,7 @@ import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
|
|||
import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
|
||||
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
|
||||
import org.eclipse.tm.internal.terminal.preferences.ITerminalConstants;
|
||||
import org.eclipse.tm.internal.terminal.preferences.TerminalColorPresets;
|
||||
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
|
||||
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
|
||||
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
|
||||
|
@ -108,6 +115,7 @@ import org.eclipse.tm.internal.terminal.textcanvas.TextCanvas;
|
|||
import org.eclipse.tm.internal.terminal.textcanvas.TextLineRenderer;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalTextDataFactory;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.contexts.IContextActivation;
|
||||
|
@ -144,7 +152,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
private TerminalFocusListener fFocusListener;
|
||||
private ITerminalConnector fConnector;
|
||||
private final ITerminalConnector[] fConnectors;
|
||||
private final boolean fUseCommonPrefs;
|
||||
private final IPreferenceStore fPreferenceStore;
|
||||
private boolean connectOnEnterIfClosed = true;
|
||||
|
||||
PipedInputStream fInputStream;
|
||||
|
@ -165,17 +173,8 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
/**
|
||||
* Listens to changes in the preferences
|
||||
*/
|
||||
private final IPropertyChangeListener fPreferenceListener = event -> {
|
||||
if (event.getProperty().equals(ITerminalConstants.PREF_BUFFERLINES)
|
||||
|| event.getProperty().equals(ITerminalConstants.PREF_INVERT_COLORS)) {
|
||||
updatePreferences();
|
||||
}
|
||||
};
|
||||
private final IPropertyChangeListener fFontListener = event -> {
|
||||
if (event.getProperty().equals(ITerminalConstants.FONT_DEFINITION)) {
|
||||
onTerminalFontChanged();
|
||||
}
|
||||
};
|
||||
private final IPropertyChangeListener fPreferenceListener = this::updatePreferences;
|
||||
private final IPropertyChangeListener fFontListener = this::updateFont;
|
||||
|
||||
/**
|
||||
* Is protected by synchronize on this
|
||||
|
@ -184,12 +183,22 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
|
||||
private PollingTextCanvasModel fPollingTextCanvasModel;
|
||||
|
||||
/**
|
||||
* Instantiate a Terminal widget.
|
||||
* @param target Callback for notifying the owner of Terminal state changes.
|
||||
* @param wndParent The Window parent to embed the Terminal in.
|
||||
* @param connectors Provided connectors.
|
||||
* @param preferenceStore If non-<code>null</code>, the Terminal widget will pick up settings
|
||||
* from the given store.
|
||||
* @since 3.2
|
||||
*/
|
||||
public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
|
||||
this(target, wndParent, connectors, false);
|
||||
this(target, wndParent, connectors, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiate a Terminal widget.
|
||||
* Instantiate a Terminal widget using the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page's
|
||||
* default preference store.
|
||||
* @param target Callback for notifying the owner of Terminal state changes.
|
||||
* @param wndParent The Window parent to embed the Terminal in.
|
||||
* @param connectors Provided connectors.
|
||||
|
@ -200,8 +209,22 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
*/
|
||||
public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors,
|
||||
boolean useCommonPrefs) {
|
||||
this(target, wndParent, connectors, useCommonPrefs ? TerminalPlugin.getDefault().getPreferenceStore() : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiate a Terminal widget.
|
||||
* @param target Callback for notifying the owner of Terminal state changes.
|
||||
* @param wndParent The Window parent to embed the Terminal in.
|
||||
* @param connectors Provided connectors.
|
||||
* @param preferenceStore If non-<code>null</code>, the Terminal widget will pick up settings
|
||||
* from the given store.
|
||||
* @since 5.0
|
||||
*/
|
||||
public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors,
|
||||
IPreferenceStore preferenceStore) {
|
||||
fConnectors = connectors;
|
||||
fUseCommonPrefs = useCommonPrefs;
|
||||
fPreferenceStore = preferenceStore;
|
||||
fTerminalListener = target;
|
||||
fTerminalModel = TerminalTextDataFactory.makeTerminalTextData();
|
||||
fTerminalModel.setMaxHeight(1000);
|
||||
|
@ -373,10 +396,10 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
@Override
|
||||
public void disposeTerminal() {
|
||||
Logger.log("entered."); //$NON-NLS-1$
|
||||
if (fUseCommonPrefs) {
|
||||
TerminalPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPreferenceListener);
|
||||
JFaceResources.getFontRegistry().removeListener(fFontListener);
|
||||
if (fPreferenceStore != null) {
|
||||
fPreferenceStore.removePropertyChangeListener(fPreferenceListener);
|
||||
}
|
||||
JFaceResources.getFontRegistry().removeListener(fFontListener);
|
||||
disconnectTerminal();
|
||||
fClipboard.dispose();
|
||||
getTerminalText().dispose();
|
||||
|
@ -642,12 +665,11 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
setupControls(parent);
|
||||
setCommandInputField(fCommandInputField);
|
||||
setupListeners();
|
||||
if (fUseCommonPrefs && wasDisposed) {
|
||||
updatePreferences();
|
||||
onTerminalFontChanged();
|
||||
TerminalPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPreferenceListener);
|
||||
JFaceResources.getFontRegistry().addListener(fFontListener);
|
||||
if (fPreferenceStore != null && wasDisposed) {
|
||||
updatePreferences(null);
|
||||
fPreferenceStore.addPropertyChangeListener(fPreferenceListener);
|
||||
}
|
||||
JFaceResources.getFontRegistry().addListener(fFontListener);
|
||||
setupHelp(fWndParent, TerminalPlugin.HELP_VIEW);
|
||||
|
||||
if (!wasDisposed) {
|
||||
|
@ -655,18 +677,58 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC
|
|||
}
|
||||
}
|
||||
|
||||
private void updatePreferences() {
|
||||
int bufferLineLimit = Platform.getPreferencesService().getInt(TerminalPlugin.PLUGIN_ID,
|
||||
ITerminalConstants.PREF_BUFFERLINES, 0, null);
|
||||
boolean invert = Platform.getPreferencesService().getBoolean(TerminalPlugin.PLUGIN_ID,
|
||||
ITerminalConstants.PREF_INVERT_COLORS, false, null);
|
||||
private void updatePreferences(PropertyChangeEvent unused) {
|
||||
int bufferLineLimit = fPreferenceStore.getInt(ITerminalConstants.PREF_BUFFERLINES);
|
||||
boolean invert = fPreferenceStore.getBoolean(ITerminalConstants.PREF_INVERT_COLORS);
|
||||
setBufferLineLimit(bufferLineLimit);
|
||||
setInvertedColors(invert);
|
||||
onTerminalColorsChanged();
|
||||
onTerminalFontChanged();
|
||||
}
|
||||
|
||||
private void onTerminalColorsChanged() {
|
||||
Map<TerminalColor, RGB> map = new EnumMap<>(TerminalColor.class);
|
||||
TerminalColor[] values = TerminalColor.values();
|
||||
for (TerminalColor terminalColor : values) {
|
||||
RGB rgb = null;
|
||||
if (fPreferenceStore != null) {
|
||||
try {
|
||||
rgb = StringConverter.asRGB(
|
||||
fPreferenceStore.getString(ITerminalConstants.getPrefForTerminalColor(terminalColor)));
|
||||
} catch (DataFormatException dfe) {
|
||||
// bad color, use default preset value instead
|
||||
}
|
||||
}
|
||||
|
||||
if (rgb == null) {
|
||||
rgb = TerminalColorPresets.INSTANCE.getDefaultPreset().getRGB(terminalColor);
|
||||
}
|
||||
map.put(terminalColor, rgb);
|
||||
}
|
||||
fCtlText.updateColors(map);
|
||||
}
|
||||
|
||||
private String getFontDefinition() {
|
||||
String definition;
|
||||
if (fPreferenceStore != null) {
|
||||
definition = fPreferenceStore.getString(ITerminalConstants.PREF_FONT_DEFINITION);
|
||||
} else {
|
||||
definition = ITerminalConstants.DEFAULT_FONT_DEFINITION;
|
||||
}
|
||||
if (definition == null || definition.isEmpty()) {
|
||||
definition = "org.eclipse.jface.textfont"; //$NON-NLS-1$
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
private void onTerminalFontChanged() {
|
||||
// set the font for all
|
||||
setFont(ITerminalConstants.FONT_DEFINITION);
|
||||
setFont(getFontDefinition());
|
||||
}
|
||||
|
||||
private void updateFont(PropertyChangeEvent event) {
|
||||
if (event.getProperty().equals(getFontDefinition())) {
|
||||
onTerminalFontChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -14,7 +14,7 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* This is a decorator to make all access to
|
||||
|
@ -89,12 +89,12 @@ public class SynchronizedTerminalTextData implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
synchronized public Style getStyle(int line, int column) {
|
||||
synchronized public TerminalStyle getStyle(int line, int column) {
|
||||
return fData.getStyle(line, column);
|
||||
}
|
||||
|
||||
@Override
|
||||
synchronized public Style[] getStyles(int line) {
|
||||
synchronized public TerminalStyle[] getStyles(int line) {
|
||||
return fData.getStyles(line);
|
||||
}
|
||||
|
||||
|
@ -114,17 +114,17 @@ public class SynchronizedTerminalTextData implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
synchronized public void setChar(int line, int column, char c, Style style) {
|
||||
synchronized public void setChar(int line, int column, char c, TerminalStyle style) {
|
||||
fData.setChar(line, column, c, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
synchronized public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
|
||||
synchronized public void setChars(int line, int column, char[] chars, int start, int len, TerminalStyle style) {
|
||||
fData.setChars(line, column, chars, start, len, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
synchronized public void setChars(int line, int column, char[] chars, Style style) {
|
||||
synchronized public void setChars(int line, int column, char[] chars, TerminalStyle style) {
|
||||
fData.setChars(line, column, chars, style);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2020 Kichwa Coders Canada Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.model;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.preferences.InstanceScope;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.preference.PreferenceConverter;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.ui.preferences.ScopedPreferenceStore;
|
||||
import org.eclipse.ui.themes.ColorUtil;
|
||||
|
||||
/**
|
||||
* Wrapper class to get standard colors from Eclipse trying to match existing theme where possible
|
||||
* by using standard editor colors.
|
||||
*
|
||||
* This class has an implied and optional dependency on org.eclipse.ui.editors bundle by reading
|
||||
* that bundles preferences.
|
||||
*/
|
||||
public enum SystemDefaultColors implements Supplier<RGB> {
|
||||
|
||||
/**
|
||||
* Standard text foreground. Typically black in Light theme.
|
||||
*/
|
||||
FOREGROUND("Foreground", "COLOR_LIST_FOREGROUND", new RGB(0, 0, 0)), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
/**
|
||||
* Standard text background. Typically white in Light theme.
|
||||
*/
|
||||
BACKGROUND("Background", "COLOR_LIST_BACKGROUND", new RGB(255, 255, 255)), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
/**
|
||||
* Selection foreground. Typically white in Light theme.
|
||||
*/
|
||||
SELECTION_FOREGROUND("SelectionForeground", "COLOR_LIST_SELECTION_TEXT", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new RGB(255, 255, 255)),
|
||||
|
||||
/**
|
||||
* Selection background. Typically blue in Light theme.
|
||||
*/
|
||||
SELECTION_BACKGROUND("SelectionBackground", "COLOR_LIST_SELECTION", new RGB(74, 144, 9)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
private static final String EDITOR_SCOPE = "org.eclipse.ui.editors"; //$NON-NLS-1$
|
||||
private static final String PREF_PREFIX = "AbstractTextEditor.Color."; //$NON-NLS-1$
|
||||
private static final String PREF_SYSTEM_DEFAULT_SUFFIX = ".SystemDefault"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* SWT Name of Color
|
||||
*
|
||||
* Values from SWT
|
||||
*/
|
||||
private String swtColor;
|
||||
|
||||
/**
|
||||
* Preference name for color.
|
||||
*
|
||||
* Values from org.eclipse.ui.texteditor.AbstractTextEditor....
|
||||
*/
|
||||
private String editorColor;
|
||||
|
||||
/** If all else fails, use this standard color */
|
||||
private RGB fallbackColor;
|
||||
|
||||
SystemDefaultColors(String editorColor, String swtColor, RGB rgb) {
|
||||
this.editorColor = editorColor;
|
||||
this.swtColor = swtColor;
|
||||
this.fallbackColor = rgb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the color for this enum value.
|
||||
*
|
||||
* @return the RGB color or a non-<code>null</code> color as a fallback.
|
||||
*/
|
||||
@Override
|
||||
public RGB get() {
|
||||
IPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, EDITOR_SCOPE);
|
||||
|
||||
RGB rgb = null;
|
||||
String pref = PREF_PREFIX + editorColor;
|
||||
String prefSystemDefault = pref + PREF_SYSTEM_DEFAULT_SUFFIX;
|
||||
if (Platform.getPreferencesService() != null) {
|
||||
if (!store.getBoolean(prefSystemDefault)) {
|
||||
if (store.contains(pref)) {
|
||||
if (store.isDefault(pref))
|
||||
rgb = PreferenceConverter.getDefaultColor(store, pref);
|
||||
else {
|
||||
rgb = PreferenceConverter.getColor(store, pref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rgb == null) {
|
||||
rgb = ColorUtil.getColorValue(swtColor);
|
||||
}
|
||||
|
||||
if (rgb == null) {
|
||||
rgb = fallbackColor;
|
||||
}
|
||||
|
||||
return rgb;
|
||||
}
|
||||
}
|
|
@ -22,7 +22,7 @@ import org.eclipse.tm.terminal.model.ITerminalTextData;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* This class is thread safe.
|
||||
|
@ -136,24 +136,24 @@ public class TerminalTextData implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle(int line, int column) {
|
||||
public TerminalStyle getStyle(int line, int column) {
|
||||
return fData.getStyle(line, column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChar(int line, int column, char c, Style style) {
|
||||
public void setChar(int line, int column, char c, TerminalStyle style) {
|
||||
fData.setChar(line, column, c, style);
|
||||
sendLineChangedToSnapshots(line);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, TerminalStyle style) {
|
||||
fData.setChars(line, column, chars, style);
|
||||
sendLineChangedToSnapshots(line);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, TerminalStyle style) {
|
||||
fData.setChars(line, column, chars, start, len, style);
|
||||
sendLineChangedToSnapshots(line);
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ public class TerminalTextData implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style[] getStyles(int line) {
|
||||
public TerminalStyle[] getStyles(int line) {
|
||||
return fData.getStyles(line);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* This class is optimized for scrolling the entire {@link #getHeight()}.
|
||||
|
@ -151,13 +151,13 @@ public class TerminalTextDataFastScroll implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle(int line, int column) {
|
||||
public TerminalStyle getStyle(int line, int column) {
|
||||
assert (line >= 0 && line < fHeight) || throwRuntimeException();
|
||||
return fData.getStyle(getPositionOfLine(line), column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Style[] getStyles(int line) {
|
||||
public TerminalStyle[] getStyles(int line) {
|
||||
assert (line >= 0 && line < fHeight) || throwRuntimeException();
|
||||
return fData.getStyles(getPositionOfLine(line));
|
||||
}
|
||||
|
@ -214,19 +214,19 @@ public class TerminalTextDataFastScroll implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setChar(int line, int column, char c, Style style) {
|
||||
public void setChar(int line, int column, char c, TerminalStyle style) {
|
||||
assert (line >= 0 && line < fHeight) || throwRuntimeException();
|
||||
fData.setChar(getPositionOfLine(line), column, c, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, TerminalStyle style) {
|
||||
assert (line >= 0 && line < fHeight) || throwRuntimeException();
|
||||
fData.setChars(getPositionOfLine(line), column, chars, start, len, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, TerminalStyle style) {
|
||||
assert (line >= 0 && line < fHeight) || throwRuntimeException();
|
||||
fData.setChars(getPositionOfLine(line), column, chars, style);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ import java.util.List;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* The public methods of this class have to be called from one thread!
|
||||
|
@ -137,7 +137,7 @@ class TerminalTextDataSnapshot implements ITerminalTextDataSnapshot {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle(int line, int column) {
|
||||
public TerminalStyle getStyle(int line, int column) {
|
||||
return fSnapshot.getStyle(line, column);
|
||||
}
|
||||
|
||||
|
@ -299,7 +299,7 @@ class TerminalTextDataSnapshot implements ITerminalTextDataSnapshot {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style[] getStyles(int line) {
|
||||
public TerminalStyle[] getStyles(int line) {
|
||||
return fSnapshot.getStyles(line);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ import java.util.List;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* This class is thread safe.
|
||||
|
@ -27,7 +27,7 @@ import org.eclipse.tm.terminal.model.Style;
|
|||
*/
|
||||
public class TerminalTextDataStore implements ITerminalTextData {
|
||||
private char[][] fChars;
|
||||
private Style[][] fStyle;
|
||||
private TerminalStyle[][] fStyle;
|
||||
private int fWidth;
|
||||
private int fHeight;
|
||||
private int fMaxHeight;
|
||||
|
@ -37,7 +37,7 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
|
||||
public TerminalTextDataStore() {
|
||||
fChars = new char[0][];
|
||||
fStyle = new Style[0][];
|
||||
fStyle = new TerminalStyle[0][];
|
||||
fWidth = 0;
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
int h = 4 * height / 3;
|
||||
if (fMaxHeight > 0 && h > fMaxHeight)
|
||||
h = fMaxHeight;
|
||||
fStyle = (Style[][]) resizeArray(fStyle, height);
|
||||
fStyle = (TerminalStyle[][]) resizeArray(fStyle, height);
|
||||
fChars = (char[][]) resizeArray(fChars, height);
|
||||
}
|
||||
// clean the new lines
|
||||
|
@ -106,16 +106,16 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
@Override
|
||||
public LineSegment[] getLineSegments(int line, int column, int len) {
|
||||
// get the styles and chars for this line
|
||||
Style[] styles = fStyle[line];
|
||||
TerminalStyle[] styles = fStyle[line];
|
||||
char[] chars = fChars[line];
|
||||
int col = column;
|
||||
int n = column + len;
|
||||
|
||||
// expand the line if needed....
|
||||
if (styles == null)
|
||||
styles = new Style[n];
|
||||
styles = new TerminalStyle[n];
|
||||
else if (styles.length < n)
|
||||
styles = (Style[]) resizeArray(styles, n);
|
||||
styles = (TerminalStyle[]) resizeArray(styles, n);
|
||||
|
||||
if (chars == null)
|
||||
chars = new char[n];
|
||||
|
@ -123,7 +123,7 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
chars = (char[]) resizeArray(chars, n);
|
||||
|
||||
// and create the line segments
|
||||
Style style = styles[column];
|
||||
TerminalStyle style = styles[column];
|
||||
List<LineSegment> segments = new ArrayList<>();
|
||||
for (int i = column; i < n; i++) {
|
||||
if (styles[i] != style) {
|
||||
|
@ -147,7 +147,7 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle(int line, int column) {
|
||||
public TerminalStyle getStyle(int line, int column) {
|
||||
assert column < fWidth || throwRuntimeException();
|
||||
if (fStyle[line] == null || column >= fStyle[line].length)
|
||||
return null;
|
||||
|
@ -163,26 +163,26 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
fChars[iLine] = (char[]) resizeArray(fChars[iLine], length);
|
||||
}
|
||||
if (fStyle[iLine] == null) {
|
||||
fStyle[iLine] = new Style[length];
|
||||
fStyle[iLine] = new TerminalStyle[length];
|
||||
} else if (fStyle[iLine].length < length) {
|
||||
fStyle[iLine] = (Style[]) resizeArray(fStyle[iLine], length);
|
||||
fStyle[iLine] = (TerminalStyle[]) resizeArray(fStyle[iLine], length);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChar(int line, int column, char c, Style style) {
|
||||
public void setChar(int line, int column, char c, TerminalStyle style) {
|
||||
ensureLineLength(line, column + 1);
|
||||
fChars[line][column] = c;
|
||||
fStyle[line][column] = style;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, TerminalStyle style) {
|
||||
setChars(line, column, chars, 0, chars.length, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, TerminalStyle style) {
|
||||
ensureLineLength(line, column + len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
fChars[line][column + i] = chars[i + start];
|
||||
|
@ -262,7 +262,7 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
int n = source.getHeight();
|
||||
if (getHeight() != n) {
|
||||
fChars = new char[n][];
|
||||
fStyle = new Style[n][];
|
||||
fStyle = new TerminalStyle[n][];
|
||||
}
|
||||
for (int i = 0; i < n; i++) {
|
||||
copyLine(source, i, i);
|
||||
|
@ -294,13 +294,13 @@ public class TerminalTextDataStore implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style[] getStyles(int line) {
|
||||
public TerminalStyle[] getStyles(int line) {
|
||||
if (fStyle[line] == null)
|
||||
return null;
|
||||
return fStyle[line].clone();
|
||||
}
|
||||
|
||||
public void setLine(int line, char[] chars, Style[] styles) {
|
||||
public void setLine(int line, char[] chars, TerminalStyle[] styles) {
|
||||
fChars[line] = chars.clone();
|
||||
fStyle[line] = styles.clone();
|
||||
fWrappedLines.clear(line);
|
||||
|
|
|
@ -14,7 +14,7 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* This class stores the data only within a window {@link #setWindow(int, int)} and
|
||||
|
@ -86,14 +86,14 @@ public class TerminalTextDataWindow implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle(int line, int column) {
|
||||
public TerminalStyle getStyle(int line, int column) {
|
||||
if (!isInWindow(line))
|
||||
return null;
|
||||
return fData.getStyle(line - fWindowStartLine, column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Style[] getStyles(int line) {
|
||||
public TerminalStyle[] getStyles(int line) {
|
||||
if (!isInWindow(line))
|
||||
return null;
|
||||
return fData.getStyles(line - fWindowStartLine);
|
||||
|
@ -168,21 +168,21 @@ public class TerminalTextDataWindow implements ITerminalTextData {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setChar(int line, int column, char c, Style style) {
|
||||
public void setChar(int line, int column, char c, TerminalStyle style) {
|
||||
if (!isInWindow(line))
|
||||
return;
|
||||
fData.setChar(line - fWindowStartLine, column, c, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, int start, int len, TerminalStyle style) {
|
||||
if (!isInWindow(line))
|
||||
return;
|
||||
fData.setChars(line - fWindowStartLine, column, chars, start, len, style);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChars(int line, int column, char[] chars, Style style) {
|
||||
public void setChars(int line, int column, char[] chars, TerminalStyle style) {
|
||||
if (!isInWindow(line))
|
||||
return;
|
||||
fData.setChars(line - fWindowStartLine, column, chars, style);
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.preferences;
|
||||
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
|
||||
/**
|
||||
* Constants for Terminal Preferences.
|
||||
*
|
||||
|
@ -22,13 +24,27 @@ package org.eclipse.tm.internal.terminal.preferences;
|
|||
*/
|
||||
public interface ITerminalConstants {
|
||||
|
||||
public static final String FONT_DEFINITION = "terminal.views.view.font.definition"; //$NON-NLS-1$
|
||||
public static final String PREF_HAS_MIGRATED = "TerminalPref.migrated"; //$NON-NLS-1$
|
||||
|
||||
public static final String PREF_BUFFERLINES = "TerminalPrefBufferLines"; //$NON-NLS-1$
|
||||
public static final String PREF_INVERT_COLORS = "TerminalPrefInvertColors"; //$NON-NLS-1$
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
public static final String PREF_FONT_DEFINITION = "TerminalFontDefinition"; //$NON-NLS-1$
|
||||
public static final int DEFAULT_BUFFERLINES = 1000;
|
||||
public static final boolean DEFAULT_INVERT_COLORS = false;
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
public static final String DEFAULT_FONT_DEFINITION = FONT_DEFINITION;
|
||||
|
||||
public static final String FONT_DEFINITION = "terminal.views.view.font.definition"; //$NON-NLS-1$
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
public static String getPrefForTerminalColor(TerminalColor tc) {
|
||||
return tc.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2020 Kichwa Coders Canada Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.preferences;
|
||||
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BACKGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_CYAN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_MAGENTA;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_WHITE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_YELLOW;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.CYAN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.FOREGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.MAGENTA;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.SELECTION_BACKGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.SELECTION_FOREGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.WHITE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.YELLOW;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
|
||||
import org.eclipse.tm.internal.terminal.model.SystemDefaultColors;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
public enum TerminalColorPresets {
|
||||
|
||||
INSTANCE;
|
||||
|
||||
private final List<Preset> presets = new ArrayList<>();
|
||||
|
||||
public List<String> getPresets() {
|
||||
return presets.stream().map(Preset::getName).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public Preset getPreset(int index) {
|
||||
return presets.get(index);
|
||||
}
|
||||
|
||||
public static class Preset {
|
||||
private String name;
|
||||
private Map<TerminalColor, Supplier<RGB>> map = new EnumMap<>(TerminalColor.class);
|
||||
|
||||
Preset(String name) {
|
||||
this.name = name;
|
||||
set(BLACK, 0, 0, 0);
|
||||
set(RED, 205, 0, 0);
|
||||
set(GREEN, 0, 205, 0);
|
||||
set(YELLOW, 205, 205, 0);
|
||||
set(BLUE, 0, 0, 238);
|
||||
set(MAGENTA, 205, 0, 205);
|
||||
set(CYAN, 0, 205, 205);
|
||||
set(WHITE, 229, 229, 229);
|
||||
|
||||
set(BRIGHT_BLACK, 0, 0, 0);
|
||||
set(BRIGHT_RED, 255, 0, 0);
|
||||
set(BRIGHT_GREEN, 0, 255, 0);
|
||||
set(BRIGHT_YELLOW, 255, 255, 0);
|
||||
set(BRIGHT_BLUE, 92, 92, 255);
|
||||
set(BRIGHT_MAGENTA, 255, 0, 255);
|
||||
set(BRIGHT_CYAN, 0, 255, 255);
|
||||
set(BRIGHT_WHITE, 255, 255, 255);
|
||||
|
||||
set(FOREGROUND, SystemDefaultColors.FOREGROUND);
|
||||
set(BACKGROUND, SystemDefaultColors.BACKGROUND);
|
||||
set(SELECTION_FOREGROUND, SystemDefaultColors.SELECTION_FOREGROUND);
|
||||
set(SELECTION_BACKGROUND, SystemDefaultColors.SELECTION_BACKGROUND);
|
||||
}
|
||||
|
||||
Preset set(TerminalColor color, RGB rgb) {
|
||||
return set(color, () -> rgb);
|
||||
}
|
||||
|
||||
Preset set(TerminalColor color, int r, int g, int b) {
|
||||
return set(color, new RGB(r, g, b));
|
||||
}
|
||||
|
||||
Preset set(TerminalColor color, Supplier<RGB> rgbSupplier) {
|
||||
map.put(color, rgbSupplier);
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the preset value for the given color. Will never return null
|
||||
* because each color must be defined in the map.
|
||||
*
|
||||
* @param terminalColor to get RGB value for
|
||||
* @return non-<code>null</code> color
|
||||
*/
|
||||
public RGB getRGB(TerminalColor terminalColor) {
|
||||
return map.getOrDefault(terminalColor, () -> new RGB(0, 0, 0)).get();
|
||||
}
|
||||
}
|
||||
|
||||
TerminalColorPresets() {
|
||||
presets.add(new Preset(TerminalMessages.TerminalColorPresets_TerminalDefaults));
|
||||
presets.add(new Preset(TerminalMessages.TerminalColorPresets_EclipseLight) //
|
||||
.set(FOREGROUND, getDefaultPreset().getRGB(BLACK)) //
|
||||
.set(BACKGROUND, getDefaultPreset().getRGB(WHITE)));
|
||||
presets.add(new Preset(TerminalMessages.TerminalColorPresets_EclipseDark) //
|
||||
.set(FOREGROUND, getDefaultPreset().getRGB(WHITE)) //
|
||||
.set(BACKGROUND, getDefaultPreset().getRGB(BLACK)));
|
||||
}
|
||||
|
||||
public Preset getDefaultPreset() {
|
||||
return presets.get(0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,227 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2020 Kichwa Coders Canada Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.preferences;
|
||||
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BACKGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_CYAN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_MAGENTA;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_WHITE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BRIGHT_YELLOW;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.CYAN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.FOREGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.MAGENTA;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.SELECTION_BACKGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.SELECTION_FOREGROUND;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.WHITE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.YELLOW;
|
||||
|
||||
import java.util.EnumMap;
|
||||
|
||||
import org.eclipse.jface.layout.GridDataFactory;
|
||||
import org.eclipse.jface.layout.GridLayoutFactory;
|
||||
import org.eclipse.jface.preference.ColorSelector;
|
||||
import org.eclipse.jface.preference.FieldEditor;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.preference.PreferenceConverter;
|
||||
import org.eclipse.jface.resource.FontDescriptor;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
|
||||
/**
|
||||
* A field editor that can be used for editing terminal colors.
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
public class TerminalColorsFieldEditor extends FieldEditor {
|
||||
|
||||
private EnumMap<TerminalColor, ColorSelector> colorSelectors;
|
||||
private Composite controls;
|
||||
private Font boldFont;
|
||||
|
||||
/**
|
||||
* Creates a field editor for editing colors of {@link TerminalColor}.
|
||||
* The preference names used are as they are returned from {@link TerminalColor#getPreferenceName()}
|
||||
* @param labelText
|
||||
* @param parent
|
||||
*/
|
||||
public TerminalColorsFieldEditor(Composite parent) {
|
||||
super("", "", parent); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void adjustForNumColumns(int numColumns) {
|
||||
GridData gd = (GridData) controls.getLayoutData();
|
||||
gd.horizontalSpan = numColumns;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNumberOfControls() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doFillIntoGrid(Composite parent, int numColumns) {
|
||||
colorSelectors = new EnumMap<>(TerminalColor.class);
|
||||
controls = new Composite(parent, SWT.NONE);
|
||||
GridDataFactory.fillDefaults().applyTo(controls);
|
||||
GridLayoutFactory.fillDefaults().applyTo(controls);
|
||||
|
||||
FontDescriptor boldDescriptor = FontDescriptor.createFrom(parent.getFont()).setStyle(SWT.BOLD);
|
||||
boldFont = boldDescriptor.createFont(parent.getDisplay());
|
||||
|
||||
Group general = new Group(controls, SWT.SHADOW_NONE);
|
||||
general.setText(TerminalMessages.TerminalColorsFieldEditor_GeneralColors);
|
||||
general.setFont(boldFont);
|
||||
GridDataFactory.fillDefaults().applyTo(general);
|
||||
GridLayoutFactory.swtDefaults().numColumns(4).applyTo(general);
|
||||
|
||||
createLabelledSelector(general, FOREGROUND, TerminalMessages.TerminalColorsFieldEditor_TextColor);
|
||||
createLabelledSelector(general, BACKGROUND, TerminalMessages.TerminalColorsFieldEditor_Background);
|
||||
createLabelledSelector(general, SELECTION_BACKGROUND, TerminalMessages.TerminalColorsFieldEditor_Selection);
|
||||
createLabelledSelector(general, SELECTION_FOREGROUND, TerminalMessages.TerminalColorsFieldEditor_SelectedText);
|
||||
|
||||
Group palette = new Group(controls, SWT.SHADOW_NONE);
|
||||
palette.setText(TerminalMessages.TerminalColorsFieldEditor_PaletteColors);
|
||||
palette.setFont(boldFont);
|
||||
GridDataFactory.fillDefaults().applyTo(palette);
|
||||
GridLayoutFactory.swtDefaults().numColumns(8).applyTo(palette);
|
||||
|
||||
createSelector(palette, BLACK, TerminalMessages.TerminalColorsFieldEditor_Black);
|
||||
createSelector(palette, RED, TerminalMessages.TerminalColorsFieldEditor_Red);
|
||||
createSelector(palette, GREEN, TerminalMessages.TerminalColorsFieldEditor_Green);
|
||||
createSelector(palette, YELLOW, TerminalMessages.TerminalColorsFieldEditor_Yellow);
|
||||
createSelector(palette, BLUE, TerminalMessages.TerminalColorsFieldEditor_Blue);
|
||||
createSelector(palette, MAGENTA, TerminalMessages.TerminalColorsFieldEditor_Magenta);
|
||||
createSelector(palette, CYAN, TerminalMessages.TerminalColorsFieldEditor_Cyan);
|
||||
createSelector(palette, WHITE, TerminalMessages.TerminalColorsFieldEditor_White);
|
||||
|
||||
createSelector(palette, BRIGHT_BLACK, TerminalMessages.TerminalColorsFieldEditor_BrightBlack);
|
||||
createSelector(palette, BRIGHT_RED, TerminalMessages.TerminalColorsFieldEditor_BrightRed);
|
||||
createSelector(palette, BRIGHT_GREEN, TerminalMessages.TerminalColorsFieldEditor_BrightGreen);
|
||||
createSelector(palette, BRIGHT_YELLOW, TerminalMessages.TerminalColorsFieldEditor_BrightYellow);
|
||||
createSelector(palette, BRIGHT_BLUE, TerminalMessages.TerminalColorsFieldEditor_BrightBlue);
|
||||
createSelector(palette, BRIGHT_MAGENTA, TerminalMessages.TerminalColorsFieldEditor_BrightMagenta);
|
||||
createSelector(palette, BRIGHT_CYAN, TerminalMessages.TerminalColorsFieldEditor_BrightCyan);
|
||||
createSelector(palette, BRIGHT_WHITE, TerminalMessages.TerminalColorsFieldEditor_BrightWhite);
|
||||
|
||||
Group presets = new Group(controls, SWT.SHADOW_NONE);
|
||||
presets.setText(TerminalMessages.TerminalColorsFieldEditor_Presets);
|
||||
presets.setFont(boldFont);
|
||||
GridDataFactory.fillDefaults().applyTo(presets);
|
||||
GridLayoutFactory.swtDefaults().numColumns(2).applyTo(presets);
|
||||
Combo presetsCombo = new Combo(presets, SWT.DROP_DOWN | SWT.READ_ONLY);
|
||||
presetsCombo.add(TerminalMessages.TerminalColorsFieldEditor_LoadPresets);
|
||||
TerminalColorPresets colorPresets = TerminalColorPresets.INSTANCE;
|
||||
colorPresets.getPresets().forEach(presetsCombo::add);
|
||||
presetsCombo.addListener(SWT.Selection, e -> {
|
||||
int selectionIndex = presetsCombo.getSelectionIndex();
|
||||
if (selectionIndex > 0) {
|
||||
int selectedPresetIndex = selectionIndex - 1; // account for "Load Presets..." entry
|
||||
colorSelectors.forEach((terminalColor, colorSelector) -> colorSelector
|
||||
.setColorValue(colorPresets.getPreset(selectedPresetIndex).getRGB(terminalColor)));
|
||||
|
||||
}
|
||||
});
|
||||
presetsCombo.select(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (boldFont != null) {
|
||||
boldFont.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void createLabelledSelector(Composite parent, TerminalColor color, String label) {
|
||||
Label labelControl = new Label(parent, SWT.LEFT);
|
||||
labelControl.setText(label);
|
||||
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(labelControl);
|
||||
createSelector(parent, color, label);
|
||||
}
|
||||
|
||||
private void createSelector(Composite parent, TerminalColor color, String label) {
|
||||
ColorSelector colorSelector = new ColorSelector(parent);
|
||||
colorSelector.getButton().setToolTipText(label);
|
||||
GridDataFactory.fillDefaults().applyTo(colorSelector.getButton());
|
||||
colorSelectors.put(color, colorSelector);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLoad() {
|
||||
IPreferenceStore store = getPreferenceStore();
|
||||
colorSelectors.forEach((terminalColor, colorSelector) -> colorSelector.setColorValue(
|
||||
PreferenceConverter.getColor(store, ITerminalConstants.getPrefForTerminalColor(terminalColor))));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLoadDefault() {
|
||||
IPreferenceStore store = getPreferenceStore();
|
||||
colorSelectors.forEach((terminalColor, colorSelector) -> colorSelector.setColorValue(
|
||||
PreferenceConverter.getDefaultColor(store, ITerminalConstants.getPrefForTerminalColor(terminalColor))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store() {
|
||||
IPreferenceStore store = getPreferenceStore();
|
||||
if (store == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (presentsDefaultValue()) {
|
||||
doStoreDefault(store);
|
||||
} else {
|
||||
doStore();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores the default preference value from this field editor into
|
||||
* the preference store.
|
||||
*/
|
||||
protected void doStoreDefault(IPreferenceStore store) {
|
||||
colorSelectors.forEach((terminalColor, colorSelector) -> store
|
||||
.setToDefault(ITerminalConstants.getPrefForTerminalColor(terminalColor)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doStore() {
|
||||
IPreferenceStore store = getPreferenceStore();
|
||||
colorSelectors.forEach((terminalColor, colorSelector) -> PreferenceConverter.setValue(store,
|
||||
ITerminalConstants.getPrefForTerminalColor(terminalColor), colorSelector.getColorValue()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceName() {
|
||||
throw new IllegalArgumentException(
|
||||
"preference name should not be accessed as this class represent multiple preferences"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLabelText() {
|
||||
throw new IllegalArgumentException(
|
||||
"label text should not be accessed as this class represent multiple preferences"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
}
|
|
@ -18,7 +18,10 @@ package org.eclipse.tm.internal.terminal.preferences;
|
|||
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
|
||||
import org.eclipse.core.runtime.preferences.DefaultScope;
|
||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
||||
import org.eclipse.jface.resource.StringConverter;
|
||||
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
|
||||
import org.eclipse.tm.internal.terminal.preferences.TerminalColorPresets.Preset;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
|
||||
/**
|
||||
* Terminal Preference Initializer.
|
||||
|
@ -38,5 +41,13 @@ public class TerminalPreferenceInitializer extends AbstractPreferenceInitializer
|
|||
IEclipsePreferences defaultPrefs = DefaultScope.INSTANCE.getNode(TerminalPlugin.PLUGIN_ID);
|
||||
defaultPrefs.putBoolean(ITerminalConstants.PREF_INVERT_COLORS, ITerminalConstants.DEFAULT_INVERT_COLORS);
|
||||
defaultPrefs.putInt(ITerminalConstants.PREF_BUFFERLINES, ITerminalConstants.DEFAULT_BUFFERLINES);
|
||||
defaultPrefs.put(ITerminalConstants.PREF_FONT_DEFINITION, ITerminalConstants.DEFAULT_FONT_DEFINITION);
|
||||
|
||||
Preset defaultPresets = TerminalColorPresets.INSTANCE.getDefaultPreset();
|
||||
TerminalColor[] colors = TerminalColor.values();
|
||||
for (TerminalColor color : colors) {
|
||||
defaultPrefs.put(ITerminalConstants.getPrefForTerminalColor(color),
|
||||
StringConverter.asString(defaultPresets.getRGB(color)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,9 +36,6 @@ import org.eclipse.ui.IWorkbenchPreferencePage;
|
|||
* @noreference This class is not intended to be referenced by clients.
|
||||
*/
|
||||
public class TerminalPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
|
||||
protected BooleanFieldEditor fInvertColors;
|
||||
|
||||
protected IntegerFieldEditor fEditorBufferSize;
|
||||
|
||||
public TerminalPreferencePage() {
|
||||
super(GRID);
|
||||
|
@ -69,14 +66,12 @@ public class TerminalPreferencePage extends FieldEditorPreferencePage implements
|
|||
}
|
||||
|
||||
protected void setupEditors() {
|
||||
fInvertColors = new BooleanFieldEditor(ITerminalConstants.PREF_INVERT_COLORS, TerminalMessages.INVERT_COLORS,
|
||||
getFieldEditorParent());
|
||||
fEditorBufferSize = new IntegerFieldEditor(ITerminalConstants.PREF_BUFFERLINES, TerminalMessages.BUFFERLINES,
|
||||
getFieldEditorParent());
|
||||
addField(new BooleanFieldEditor(ITerminalConstants.PREF_INVERT_COLORS, TerminalMessages.INVERT_COLORS,
|
||||
getFieldEditorParent()));
|
||||
|
||||
fEditorBufferSize.setValidRange(0, Integer.MAX_VALUE);
|
||||
addField(new IntegerFieldEditor(ITerminalConstants.PREF_BUFFERLINES, TerminalMessages.BUFFERLINES,
|
||||
getFieldEditorParent()));
|
||||
|
||||
addField(fInvertColors);
|
||||
addField(fEditorBufferSize);
|
||||
addField(new TerminalColorsFieldEditor(getFieldEditorParent()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2020 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*
|
||||
* Contributors:
|
||||
* Jonah Graham - extracted colour names from StyleMap to be reused and cross referenced in VT100Emulator
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.textcanvas;
|
||||
|
||||
public class AnsiColorNames {
|
||||
public static final String BLACK = "black"; //$NON-NLS-1$
|
||||
public static final String WHITE = "white"; //$NON-NLS-1$
|
||||
public static final String WHITE_FOREGROUND = "white_foreground"; //$NON-NLS-1$
|
||||
public static final String GRAY = "gray"; //$NON-NLS-1$
|
||||
public static final String MAGENTA = "magenta"; //$NON-NLS-1$
|
||||
public static final String CYAN = "cyan"; //$NON-NLS-1$
|
||||
public static final String YELLOW = "yellow"; //$NON-NLS-1$
|
||||
public static final String BLUE = "blue"; //$NON-NLS-1$
|
||||
public static final String GREEN = "green"; //$NON-NLS-1$
|
||||
public static final String RED = "red"; //$NON-NLS-1$
|
||||
}
|
|
@ -14,8 +14,13 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.textcanvas;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.Device;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -41,7 +46,16 @@ public interface ILinelRenderer {
|
|||
*/
|
||||
void updateFont(String fontName);
|
||||
|
||||
void updateColors(Map<TerminalColor, RGB> map);
|
||||
|
||||
void setInvertedColors(boolean invert);
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getDefaultBackgroundColor(Device)}
|
||||
*/
|
||||
@Deprecated
|
||||
Color getDefaultBackgroundColor();
|
||||
|
||||
Color getDefaultBackgroundColor(Device device);
|
||||
|
||||
}
|
||||
|
|
|
@ -19,170 +19,104 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.textcanvas;
|
||||
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.BLACK;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.BLUE;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.CYAN;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.GRAY;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.GREEN;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.MAGENTA;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.RED;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.WHITE;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.WHITE_FOREGROUND;
|
||||
import static org.eclipse.tm.internal.terminal.textcanvas.AnsiColorNames.YELLOW;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.EnumMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.jface.resource.JFaceResources;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.tm.internal.terminal.preferences.ITerminalConstants;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.internal.terminal.preferences.TerminalColorPresets;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* The split between responsibilities of StyleMap and TerminalStyle are not always clear. Generally
|
||||
* the style parts that are global for a terminal are here, where as in TerminalStyle is about
|
||||
* a specific range.
|
||||
*/
|
||||
public class StyleMap {
|
||||
|
||||
private static final String PREFIX = "org.eclipse.tm.internal."; //$NON-NLS-1$
|
||||
String fFontName = ITerminalConstants.FONT_DEFINITION;
|
||||
Map<StyleColor, Color> fColorMapForeground = new HashMap<>();
|
||||
Map<StyleColor, Color> fColorMapBackground = new HashMap<>();
|
||||
Map<StyleColor, Color> fColorMapIntense = new HashMap<>();
|
||||
private Point fCharSize;
|
||||
private final Style fDefaultStyle;
|
||||
private final TerminalStyle fDefaultStyle;
|
||||
private boolean fInvertColors;
|
||||
private boolean fProportional;
|
||||
private final int[] fOffsets = new int[256];
|
||||
private final Map<TerminalColor, RGB> fColorMap = new EnumMap<>(TerminalColor.class);
|
||||
|
||||
StyleMap() {
|
||||
public StyleMap() {
|
||||
fDefaultStyle = TerminalStyle.getDefaultStyle();
|
||||
initFont();
|
||||
initColors();
|
||||
fDefaultStyle = Style.getStyle(StyleColor.getStyleColor(BLACK), StyleColor.getStyleColor(WHITE));
|
||||
updateFont();
|
||||
}
|
||||
|
||||
private void initColors() {
|
||||
initForegroundColors();
|
||||
initBackgroundColors();
|
||||
initIntenseColors();
|
||||
Map<TerminalColor, RGB> map = new EnumMap<>(TerminalColor.class);
|
||||
TerminalColor[] values = TerminalColor.values();
|
||||
for (TerminalColor terminalColor : values) {
|
||||
RGB rgb = TerminalColorPresets.INSTANCE.getDefaultPreset().getRGB(terminalColor);
|
||||
map.put(terminalColor, rgb);
|
||||
}
|
||||
updateColors(map);
|
||||
}
|
||||
|
||||
private void initForegroundColors() {
|
||||
if (fInvertColors) {
|
||||
setColor(fColorMapForeground, WHITE, 0, 0, 0);
|
||||
setColor(fColorMapForeground, WHITE_FOREGROUND, 50, 50, 50);
|
||||
setColor(fColorMapForeground, BLACK, 229, 229, 229);
|
||||
private void initFont() {
|
||||
updateFont(ITerminalConstants.FONT_DEFINITION);
|
||||
}
|
||||
|
||||
private RGB getRGB(TerminalColor color) {
|
||||
return fColorMap.get(color);
|
||||
}
|
||||
|
||||
public RGB getForegrondRGB(TerminalStyle style) {
|
||||
style = defaultIfNull(style);
|
||||
TerminalColor color;
|
||||
if (style.isReverse()) {
|
||||
color = style.getBackgroundTerminalColor();
|
||||
} else {
|
||||
setColor(fColorMapForeground, WHITE, 255, 255, 255);
|
||||
setColor(fColorMapForeground, WHITE_FOREGROUND, 229, 229, 229);
|
||||
setColor(fColorMapForeground, BLACK, 50, 50, 50);
|
||||
}
|
||||
setColor(fColorMapForeground, RED, 205, 0, 0);
|
||||
setColor(fColorMapForeground, GREEN, 0, 205, 0);
|
||||
setColor(fColorMapForeground, BLUE, 0, 0, 238);
|
||||
setColor(fColorMapForeground, YELLOW, 205, 205, 0);
|
||||
setColor(fColorMapForeground, CYAN, 0, 205, 205);
|
||||
setColor(fColorMapForeground, MAGENTA, 205, 0, 205);
|
||||
setColor(fColorMapForeground, GRAY, 229, 229, 229);
|
||||
color = style.getForegroundTerminalColor();
|
||||
}
|
||||
|
||||
private void initBackgroundColors() {
|
||||
if (fInvertColors) {
|
||||
setColor(fColorMapBackground, WHITE, 0, 0, 0);
|
||||
setColor(fColorMapBackground, WHITE_FOREGROUND, 50, 50, 50); // only used when colors are inverse
|
||||
setColor(fColorMapBackground, BLACK, 255, 255, 255);
|
||||
} else {
|
||||
setColor(fColorMapBackground, WHITE, 255, 255, 255);
|
||||
setColor(fColorMapBackground, WHITE_FOREGROUND, 229, 229, 229);
|
||||
setColor(fColorMapBackground, BLACK, 0, 0, 0);
|
||||
}
|
||||
setColor(fColorMapBackground, RED, 205, 0, 0);
|
||||
setColor(fColorMapBackground, GREEN, 0, 205, 0);
|
||||
setColor(fColorMapBackground, BLUE, 0, 0, 238);
|
||||
setColor(fColorMapBackground, YELLOW, 205, 205, 0);
|
||||
setColor(fColorMapBackground, CYAN, 0, 205, 205);
|
||||
setColor(fColorMapBackground, MAGENTA, 205, 0, 205);
|
||||
setColor(fColorMapBackground, GRAY, 229, 229, 229);
|
||||
}
|
||||
|
||||
private void initIntenseColors() {
|
||||
if (fInvertColors) {
|
||||
setColor(fColorMapIntense, WHITE, 127, 127, 127);
|
||||
setColor(fColorMapIntense, WHITE_FOREGROUND, 0, 0, 0); // only used when colors are inverse
|
||||
setColor(fColorMapIntense, BLACK, 255, 255, 255);
|
||||
} else {
|
||||
setColor(fColorMapIntense, WHITE, 255, 255, 255);
|
||||
setColor(fColorMapIntense, WHITE_FOREGROUND, 255, 255, 255);
|
||||
setColor(fColorMapIntense, BLACK, 0, 0, 0);
|
||||
}
|
||||
setColor(fColorMapIntense, RED, 255, 0, 0);
|
||||
setColor(fColorMapIntense, GREEN, 0, 255, 0);
|
||||
setColor(fColorMapIntense, BLUE, 92, 92, 255);
|
||||
setColor(fColorMapIntense, YELLOW, 255, 255, 0);
|
||||
setColor(fColorMapIntense, CYAN, 0, 255, 255);
|
||||
setColor(fColorMapIntense, MAGENTA, 255, 0, 255);
|
||||
setColor(fColorMapIntense, GRAY, 255, 255, 255);
|
||||
}
|
||||
|
||||
private void setColor(Map<StyleColor, Color> colorMap, String name, int r, int g, int b) {
|
||||
String colorName = PREFIX + r + "-" + g + "-" + b; //$NON-NLS-1$//$NON-NLS-2$
|
||||
Color color = JFaceResources.getColorRegistry().get(colorName);
|
||||
if (color == null) {
|
||||
JFaceResources.getColorRegistry().put(colorName, new RGB(r, g, b));
|
||||
color = JFaceResources.getColorRegistry().get(colorName);
|
||||
}
|
||||
colorMap.put(StyleColor.getStyleColor(name), color);
|
||||
colorMap.put(StyleColor.getStyleColor(name.toUpperCase()), color);
|
||||
color = TerminalColor.FOREGROUND;
|
||||
}
|
||||
|
||||
public Color getForegrondColor(Style style) {
|
||||
color = color.convertColor(fInvertColors, style.isBold());
|
||||
return getRGB(color);
|
||||
}
|
||||
|
||||
public RGB getBackgroundRGB(TerminalStyle style) {
|
||||
style = defaultIfNull(style);
|
||||
Map<StyleColor, Color> map = style.isBold() ? fColorMapIntense : fColorMapForeground;
|
||||
//Map map = fColorMapForeground;
|
||||
if (style.isReverse())
|
||||
return getColor(map, style.getBackground());
|
||||
else
|
||||
return getColor(map, style.getForground());
|
||||
TerminalColor color;
|
||||
if (style.isReverse()) {
|
||||
color = style.getForegroundTerminalColor();
|
||||
} else {
|
||||
color = style.getBackgroundTerminalColor();
|
||||
}
|
||||
|
||||
public Color getBackgroundColor(Style style) {
|
||||
style = defaultIfNull(style);
|
||||
if (style.isReverse())
|
||||
return getColor(fColorMapBackground, style.getForground());
|
||||
else
|
||||
return getColor(fColorMapBackground, style.getBackground());
|
||||
if (color == null) {
|
||||
color = TerminalColor.BACKGROUND;
|
||||
}
|
||||
|
||||
Color getColor(Map<StyleColor, Color> map, StyleColor color) {
|
||||
Color c = map.get(color);
|
||||
if (c == null) {
|
||||
c = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
|
||||
}
|
||||
return c;
|
||||
color = color.convertColor(fInvertColors, style.isBold());
|
||||
return getRGB(color);
|
||||
}
|
||||
|
||||
private Style defaultIfNull(Style style) {
|
||||
private TerminalStyle defaultIfNull(TerminalStyle style) {
|
||||
if (style == null)
|
||||
style = fDefaultStyle;
|
||||
return style;
|
||||
}
|
||||
|
||||
public void setInvertedColors(boolean invert) {
|
||||
if (invert == fInvertColors)
|
||||
return;
|
||||
fInvertColors = invert;
|
||||
initColors();
|
||||
}
|
||||
// static Font getBoldFont(Font font) {
|
||||
// FontData fontDatas[] = font.getFontData();
|
||||
// FontData data = fontDatas[0];
|
||||
// return new Font(Display.getCurrent(), data.getName(), data.getHeight(), data.getStyle()|SWT.BOLD);
|
||||
// }
|
||||
|
||||
public Font getFont(Style style) {
|
||||
public Font getFont(TerminalStyle style) {
|
||||
style = defaultIfNull(style);
|
||||
if (style.isBold()) {
|
||||
return JFaceResources.getFontRegistry().getBold(fFontName);
|
||||
|
@ -195,7 +129,6 @@ public class StyleMap {
|
|||
|
||||
public Font getFont() {
|
||||
return JFaceResources.getFontRegistry().get(fFontName);
|
||||
|
||||
}
|
||||
|
||||
public int getFontWidth() {
|
||||
|
@ -314,4 +247,8 @@ public class StyleMap {
|
|||
return 0;
|
||||
return fOffsets[c];
|
||||
}
|
||||
|
||||
public void updateColors(Map<TerminalColor, RGB> colorMap) {
|
||||
fColorMap.putAll(colorMap);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ package org.eclipse.tm.internal.terminal.textcanvas;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.dnd.Clipboard;
|
||||
|
@ -35,11 +36,14 @@ import org.eclipse.swt.events.FocusListener;
|
|||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.events.MouseListener;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.Device;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.tm.internal.terminal.control.ITerminalMouseListener;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
|
||||
/**
|
||||
* A cell oriented Canvas. Maintains a list of "cells".
|
||||
|
@ -369,6 +373,12 @@ public class TextCanvas extends GridCanvas {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Color getTerminalBackgroundColor(Device device) {
|
||||
return fCellRenderer.getDefaultBackgroundColor(device);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
protected Color getTerminalBackgroundColor() {
|
||||
return fCellRenderer.getDefaultBackgroundColor();
|
||||
}
|
||||
|
@ -490,6 +500,11 @@ public class TextCanvas extends GridCanvas {
|
|||
calculateGrid();
|
||||
}
|
||||
|
||||
public void updateColors(Map<TerminalColor, RGB> map) {
|
||||
fCellRenderer.updateColors(map);
|
||||
redraw();
|
||||
}
|
||||
|
||||
public void setInvertedColors(boolean invert) {
|
||||
fCellRenderer.setInvertedColors(invert);
|
||||
redraw();
|
||||
|
@ -520,4 +535,5 @@ public class TextCanvas extends GridCanvas {
|
|||
public void removeTerminalMouseListener(ITerminalMouseListener listener) {
|
||||
fMouseListeners.remove(listener);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,26 +16,32 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.textcanvas;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.Device;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class TextLineRenderer implements ILinelRenderer {
|
||||
private final ITextCanvasModel fModel;
|
||||
StyleMap fStyleMap = new StyleMap();
|
||||
private final StyleMap fStyleMap;
|
||||
|
||||
public TextLineRenderer(TextCanvas c, ITextCanvasModel model) {
|
||||
fModel = model;
|
||||
fStyleMap = new StyleMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -65,7 +71,7 @@ public class TextLineRenderer implements ILinelRenderer {
|
|||
LineSegment[] segments = getTerminalText().getLineSegments(line, colFirst, colLast - colFirst);
|
||||
for (int i = 0; i < segments.length; i++) {
|
||||
LineSegment segment = segments[i];
|
||||
Style style = segment.getStyle();
|
||||
TerminalStyle style = segment.getStyle();
|
||||
setupGC(doubleBufferGC, style);
|
||||
String text = segment.getText();
|
||||
drawText(doubleBufferGC, 0, 0, colFirst, segment.getColumn(), text);
|
||||
|
@ -102,7 +108,7 @@ public class TextLineRenderer implements ILinelRenderer {
|
|||
|
||||
private void fillBackground(GC gc, int x, int y, int width, int height) {
|
||||
Color bg = gc.getBackground();
|
||||
gc.setBackground(getDefaultBackgroundColor());
|
||||
gc.setBackground(getDefaultBackgroundColor(gc.getDevice()));
|
||||
gc.fillRectangle(x, y, width, height);
|
||||
gc.setBackground(bg);
|
||||
|
||||
|
@ -110,8 +116,14 @@ public class TextLineRenderer implements ILinelRenderer {
|
|||
|
||||
@Override
|
||||
public Color getDefaultBackgroundColor() {
|
||||
return getDefaultBackgroundColor(Display.getDefault());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getDefaultBackgroundColor(Device device) {
|
||||
// null == default style
|
||||
return fStyleMap.getBackgroundColor(null);
|
||||
RGB backgroundRGB = fStyleMap.getBackgroundRGB(null);
|
||||
return new Color(device, backgroundRGB);
|
||||
}
|
||||
|
||||
private void drawCursor(ITextCanvasModel model, GC gc, int row, int x, int y, int colFirst) {
|
||||
|
@ -122,10 +134,10 @@ public class TextLineRenderer implements ILinelRenderer {
|
|||
if (row == cursorLine) {
|
||||
int cursorColumn = model.getCursorColumn();
|
||||
if (cursorColumn < getTerminalText().getWidth()) {
|
||||
Style style = getTerminalText().getStyle(row, cursorColumn);
|
||||
TerminalStyle style = getTerminalText().getStyle(row, cursorColumn);
|
||||
if (style == null) {
|
||||
// TODO make the cursor color customizable
|
||||
style = Style.getStyle("BLACK", "WHITE"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
style = TerminalStyle.getStyle(TerminalColor.FOREGROUND, TerminalColor.BACKGROUND);
|
||||
}
|
||||
style = style.setReverse(!style.isReverse());
|
||||
setupGC(gc, style);
|
||||
|
@ -156,9 +168,12 @@ public class TextLineRenderer implements ILinelRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
private void setupGC(GC gc, Style style) {
|
||||
gc.setForeground(fStyleMap.getForegrondColor(style));
|
||||
gc.setBackground(fStyleMap.getBackgroundColor(style));
|
||||
private void setupGC(GC gc, TerminalStyle style) {
|
||||
RGB foregrondColor = fStyleMap.getForegrondRGB(style);
|
||||
gc.setForeground(new Color(gc.getDevice(), foregrondColor));
|
||||
RGB backgroundColor = fStyleMap.getBackgroundRGB(style);
|
||||
gc.setBackground(new Color(gc.getDevice(), backgroundColor));
|
||||
|
||||
Font f = fStyleMap.getFont(style);
|
||||
if (f != gc.getFont()) {
|
||||
gc.setFont(f);
|
||||
|
@ -183,6 +198,11 @@ public class TextLineRenderer implements ILinelRenderer {
|
|||
fStyleMap.updateFont(fontName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateColors(Map<TerminalColor, RGB> map) {
|
||||
fStyleMap.updateColors(map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInvertedColors(boolean invert) {
|
||||
fStyleMap.setInvertedColors(invert);
|
||||
|
|
|
@ -15,6 +15,7 @@ import org.eclipse.core.runtime.IStatus;
|
|||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.Device;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Canvas;
|
||||
|
@ -136,6 +137,12 @@ public abstract class VirtualCanvas extends Canvas {
|
|||
*/
|
||||
abstract protected void paint(GC gc);
|
||||
|
||||
abstract protected Color getTerminalBackgroundColor(Device device);
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #getTerminalBackgroundColor(Device)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected Color getTerminalBackgroundColor() {
|
||||
// return getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
|
||||
return getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
/**
|
||||
* A writable matrix of characters and {@link Style}. This is intended to be the
|
||||
* A writable matrix of characters and {@link TerminalStyle}. This is intended to be the
|
||||
* low level representation of the text of a Terminal. Higher layers are
|
||||
* responsible to fill the text and styles into this representation.
|
||||
* <p>
|
||||
|
@ -41,33 +41,36 @@ public interface ITerminalTextData extends ITerminalTextDataReadOnly {
|
|||
int getMaxHeight();
|
||||
|
||||
/**
|
||||
* Set a single character and the associated {@link Style}.
|
||||
* Set a single character and the associated {@link TerminalStyle}.
|
||||
* @param line line must be >=0 and < height
|
||||
* @param column column must be >=0 and < width
|
||||
* @param c the new character at this position
|
||||
* @param style the style or null
|
||||
* @since 5.0
|
||||
*/
|
||||
void setChar(int line, int column, char c, Style style);
|
||||
void setChar(int line, int column, char c, TerminalStyle style);
|
||||
|
||||
/**
|
||||
* Set an array of characters showing in the same {@link Style}.
|
||||
* Set an array of characters showing in the same {@link TerminalStyle}.
|
||||
* @param line line must be >=0 and < height
|
||||
* @param column column must be >=0 and < width
|
||||
* @param chars the new characters at this position
|
||||
* @param style the style or null
|
||||
* @since 5.0
|
||||
*/
|
||||
void setChars(int line, int column, char[] chars, Style style);
|
||||
void setChars(int line, int column, char[] chars, TerminalStyle style);
|
||||
|
||||
/**
|
||||
* Set a subrange of an array of characters showing in the same {@link Style}.
|
||||
* Set a subrange of an array of characters showing in the same {@link TerminalStyle}.
|
||||
* @param line line must be >=0 and < height
|
||||
* @param column column must be >=0 and < width
|
||||
* @param chars the new characters at this position
|
||||
* @param start the start index in the chars array
|
||||
* @param len the number of characters to insert. Characters beyond width are not inserted.
|
||||
* @param style the style or null
|
||||
* @since 5.0
|
||||
*/
|
||||
void setChars(int line, int column, char[] chars, int start, int len, Style style);
|
||||
void setChars(int line, int column, char[] chars, int start, int len, TerminalStyle style);
|
||||
|
||||
/**
|
||||
* Cleans the entire line.
|
||||
|
@ -77,7 +80,7 @@ public interface ITerminalTextData extends ITerminalTextDataReadOnly {
|
|||
|
||||
/**
|
||||
* Shifts some lines up or down. The "empty" space is filled with <code>'\000'</code> chars
|
||||
* and <code>null</code> {@link Style}
|
||||
* and <code>null</code> {@link TerminalStyle}
|
||||
* <p>To illustrate shift, here is some sample data:
|
||||
* <pre>
|
||||
* 0 aaaa
|
||||
|
|
|
@ -49,8 +49,9 @@ public interface ITerminalTextDataReadOnly {
|
|||
* @param line must be >=0 and < height
|
||||
* @param column must be >=0 and < width
|
||||
* @return style at column,line or null
|
||||
* @since 5.0
|
||||
*/
|
||||
Style getStyle(int line, int column);
|
||||
TerminalStyle getStyle(int line, int column);
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link ITerminalTextDataSnapshot} that
|
||||
|
@ -67,7 +68,10 @@ public interface ITerminalTextDataReadOnly {
|
|||
|
||||
char[] getChars(int line);
|
||||
|
||||
Style[] getStyles(int line);
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
TerminalStyle[] getStyles(int line);
|
||||
|
||||
/**
|
||||
* @return the line in which the cursor is at the moment
|
||||
|
|
|
@ -13,15 +13,21 @@ package org.eclipse.tm.terminal.model;
|
|||
public class LineSegment {
|
||||
private final String fText;
|
||||
private final int fCol;
|
||||
private final Style fStyle;
|
||||
private final TerminalStyle fStyle;
|
||||
|
||||
public LineSegment(int col, String text, Style style) {
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
public LineSegment(int col, String text, TerminalStyle style) {
|
||||
fCol = col;
|
||||
fText = text;
|
||||
fStyle = style;
|
||||
}
|
||||
|
||||
public Style getStyle() {
|
||||
/**
|
||||
* @since 5.0
|
||||
*/
|
||||
public TerminalStyle getStyle() {
|
||||
return fStyle;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,192 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* Contributors:
|
||||
* Michael Scharf (Wind River) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
|
||||
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
|
||||
|
||||
/**
|
||||
* @author scharf
|
||||
* Flyweight
|
||||
* Threadsafe.
|
||||
*
|
||||
*/
|
||||
// TODO add an Object for user data, use weak map to keep track of styles with associated
|
||||
// user data
|
||||
public class Style {
|
||||
private final StyleColor fForground;
|
||||
private final StyleColor fBackground;
|
||||
private final boolean fBold;
|
||||
private final boolean fBlink;
|
||||
private final boolean fUnderline;
|
||||
private final boolean fReverse;
|
||||
private final static Map<Style, Style> fgStyles = Collections.synchronizedMap(new LinkedHashMap<Style, Style>() {
|
||||
@Override
|
||||
protected boolean removeEldestEntry(Map.Entry<Style, Style> eldest) {
|
||||
int size = size();
|
||||
boolean removeEldest = size >= 1000;
|
||||
if (TerminalPlugin.isOptionEnabled(Logger.TRACE_DEBUG_LOG_VT100BACKEND)) {
|
||||
if (removeEldest) {
|
||||
Logger.log("Removing eldest Style from style cache, size = " + size); //$NON-NLS-1$
|
||||
} else {
|
||||
Logger.log("Leaving eldest Style in style cache, size = " + size); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
return removeEldest;
|
||||
}
|
||||
});
|
||||
|
||||
private Style(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline,
|
||||
boolean reverse) {
|
||||
fForground = forground;
|
||||
fBackground = background;
|
||||
fBold = bold;
|
||||
fBlink = blink;
|
||||
fUnderline = underline;
|
||||
fReverse = reverse;
|
||||
}
|
||||
|
||||
public static Style getStyle(StyleColor forground, StyleColor background, boolean bold, boolean blink,
|
||||
boolean underline, boolean reverse) {
|
||||
Style style = new Style(forground, background, bold, blink, underline, reverse);
|
||||
// If set had a computeIfAbsent we would use a set, instead just store 1-2-1 mapping
|
||||
return fgStyles.computeIfAbsent(style, (s) -> style);
|
||||
}
|
||||
|
||||
public static Style getStyle(String forground, String background) {
|
||||
return getStyle(StyleColor.getStyleColor(forground), StyleColor.getStyleColor(background), false, false, false,
|
||||
false);
|
||||
}
|
||||
|
||||
public static Style getStyle(StyleColor forground, StyleColor background) {
|
||||
return getStyle(forground, background, false, false, false, false);
|
||||
}
|
||||
|
||||
public Style setForground(StyleColor forground) {
|
||||
return getStyle(forground, fBackground, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public Style setBackground(StyleColor background) {
|
||||
return getStyle(fForground, background, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public Style setForground(String colorName) {
|
||||
return getStyle(StyleColor.getStyleColor(colorName), fBackground, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public Style setBackground(String colorName) {
|
||||
return getStyle(fForground, StyleColor.getStyleColor(colorName), fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public Style setBold(boolean bold) {
|
||||
return getStyle(fForground, fBackground, bold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public Style setBlink(boolean blink) {
|
||||
return getStyle(fForground, fBackground, fBold, blink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public Style setUnderline(boolean underline) {
|
||||
return getStyle(fForground, fBackground, fBold, fBlink, underline, fReverse);
|
||||
}
|
||||
|
||||
public Style setReverse(boolean reverse) {
|
||||
return getStyle(fForground, fBackground, fBold, fBlink, fUnderline, reverse);
|
||||
}
|
||||
|
||||
public StyleColor getBackground() {
|
||||
return fBackground;
|
||||
}
|
||||
|
||||
public boolean isBlink() {
|
||||
return fBlink;
|
||||
}
|
||||
|
||||
public boolean isBold() {
|
||||
return fBold;
|
||||
}
|
||||
|
||||
public StyleColor getForground() {
|
||||
return fForground;
|
||||
}
|
||||
|
||||
public boolean isReverse() {
|
||||
return fReverse;
|
||||
}
|
||||
|
||||
public boolean isUnderline() {
|
||||
return fUnderline;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((fBackground == null) ? 0 : fBackground.hashCode());
|
||||
result = prime * result + (fBlink ? 1231 : 1237);
|
||||
result = prime * result + (fBold ? 1231 : 1237);
|
||||
result = prime * result + ((fForground == null) ? 0 : fForground.hashCode());
|
||||
result = prime * result + (fReverse ? 1231 : 1237);
|
||||
result = prime * result + (fUnderline ? 1231 : 1237);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
final Style other = (Style) obj;
|
||||
// background == is the same as equals
|
||||
if (fBackground != other.fBackground)
|
||||
return false;
|
||||
if (fBlink != other.fBlink)
|
||||
return false;
|
||||
if (fBold != other.fBold)
|
||||
return false;
|
||||
if (fForground != other.fForground)
|
||||
return false;
|
||||
if (fReverse != other.fReverse)
|
||||
return false;
|
||||
if (fUnderline != other.fUnderline)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer result = new StringBuffer();
|
||||
result.append("Style(foreground="); //$NON-NLS-1$
|
||||
result.append(fForground);
|
||||
result.append(", background="); //$NON-NLS-1$
|
||||
result.append(fBackground);
|
||||
if (fBlink)
|
||||
result.append(", blink"); //$NON-NLS-1$
|
||||
if (fBold)
|
||||
result.append(", bold"); //$NON-NLS-1$
|
||||
if (fBlink)
|
||||
result.append(", blink"); //$NON-NLS-1$
|
||||
if (fReverse)
|
||||
result.append(", reverse"); //$NON-NLS-1$
|
||||
if (fUnderline)
|
||||
result.append(", underline"); //$NON-NLS-1$
|
||||
result.append(")"); //$NON-NLS-1$
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* Contributors:
|
||||
* Michael Scharf (Wind River) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* Flyweight
|
||||
* Threadsafe.
|
||||
*/
|
||||
public class StyleColor {
|
||||
private final static Map<String, StyleColor> fgStyleColors = new HashMap<>();
|
||||
final String fName;
|
||||
|
||||
/**
|
||||
* @param name the name of the color. It is up to the UI to associate a
|
||||
* named color with a visual representation
|
||||
* @return a StyleColor
|
||||
*/
|
||||
public static StyleColor getStyleColor(String name) {
|
||||
StyleColor result;
|
||||
synchronized (fgStyleColors) {
|
||||
result = fgStyleColors.get(name);
|
||||
if (result == null) {
|
||||
result = new StyleColor(name);
|
||||
fgStyleColors.put(name, result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// nobody except the factory method is allowed to instantiate this class!
|
||||
private StyleColor(String name) {
|
||||
fName = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return fName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return fName;
|
||||
}
|
||||
// no need to override equals and hashCode, because Object uses object identity
|
||||
}
|
|
@ -0,0 +1,168 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2020 Kichwa Coders Canada Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import org.eclipse.core.runtime.Assert;
|
||||
import org.eclipse.jface.resource.ColorDescriptor;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
|
||||
/**
|
||||
* Colors that can be used in the Terminal are represented by this class. The enum contains
|
||||
* the colors with well known names defined by the ANSI Escape Sequences, plus other colors needed
|
||||
* to render a display (such as Background color).
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
public enum TerminalColor {
|
||||
BLACK, //
|
||||
RED, //
|
||||
GREEN, //
|
||||
YELLOW, //
|
||||
BLUE, //
|
||||
MAGENTA, //
|
||||
CYAN, //
|
||||
WHITE, //
|
||||
|
||||
BRIGHT_BLACK, //
|
||||
BRIGHT_RED, //
|
||||
BRIGHT_GREEN, //
|
||||
BRIGHT_YELLOW, //
|
||||
BRIGHT_BLUE, //
|
||||
BRIGHT_MAGENTA, //
|
||||
BRIGHT_CYAN, //
|
||||
BRIGHT_WHITE, //
|
||||
|
||||
FOREGROUND, //
|
||||
BACKGROUND, //
|
||||
SELECTION_FOREGROUND, //
|
||||
SELECTION_BACKGROUND;
|
||||
|
||||
/**
|
||||
* The first 16-items in the 8-bit lookup table map to the user changeable colors
|
||||
* above, so this array handles that mapping.
|
||||
*/
|
||||
private final static TerminalColor table8bitIndexedTerminalColors[] = new TerminalColor[16];
|
||||
|
||||
/**
|
||||
* The rest of the colors in the lookup table (240 colors) are pre-defined by
|
||||
* the standard. The colors that fill this table were derived from
|
||||
* https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit which was more
|
||||
* digestible and accessible than the underlying ITU and ISO standards.
|
||||
*/
|
||||
private final static RGB table8bitIndexedRGB[] = new RGB[256 - 16];
|
||||
|
||||
/**
|
||||
* Color to use instead when inverted color is selected
|
||||
*/
|
||||
private TerminalColor invertColor;
|
||||
|
||||
/**
|
||||
* Color to use instead when bright color is selected
|
||||
*/
|
||||
private TerminalColor brightColor;
|
||||
|
||||
/**
|
||||
* Pre-calculate the lookup tables for 8-bit colors, inverses and equivalent brights.
|
||||
*/
|
||||
static {
|
||||
TerminalColor[] values = TerminalColor.values();
|
||||
|
||||
// 8-bit color lookup tables
|
||||
{
|
||||
int index = 0;
|
||||
for (; index < 16; index++) {
|
||||
TerminalColor c = values[index];
|
||||
table8bitIndexedTerminalColors[index] = c;
|
||||
}
|
||||
|
||||
int vals[] = { 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff };
|
||||
Assert.isTrue(index == 16);
|
||||
for (int r = 0; r < 6; r++) {
|
||||
for (int g = 0; g < 6; g++) {
|
||||
for (int b = 0; b < 6; b++) {
|
||||
table8bitIndexedRGB[index++ - 16] = new RGB(vals[r], vals[g], vals[b]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int greys[] = { 0x08, 0x12, 0x1c, 0x26, 0x30, 0x3a, 0x44, 0x4e, 0x58, 0x62, 0x6c, 0x76, 0x80, 0x8a, 0x94,
|
||||
0x9e, 0xa8, 0xb2, 0xbc, 0xc6, 0xd0, 0xda, 0xe4, 0xee };
|
||||
|
||||
Assert.isTrue(index == 232);
|
||||
for (int g : greys) {
|
||||
table8bitIndexedRGB[index++ - 16] = new RGB(g, g, g);
|
||||
}
|
||||
Assert.isTrue(index == 256);
|
||||
}
|
||||
|
||||
// bright equivalents
|
||||
{
|
||||
// The second set of 8 colors are the bright of the first 8.
|
||||
for (int i = 0; i < 8; i++) {
|
||||
values[i].brightColor = values[i + 8];
|
||||
}
|
||||
// The rest of the colors are not brightened
|
||||
for (int i = 8; i < values.length; i++) {
|
||||
values[i].brightColor = values[i];
|
||||
}
|
||||
}
|
||||
|
||||
// inverses
|
||||
{
|
||||
// by default make all colors invert of themself
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
values[i].invertColor = values[i];
|
||||
}
|
||||
// and then mark the colors that are actual inverts
|
||||
inverts(BLACK, WHITE);
|
||||
inverts(BRIGHT_BLACK, BRIGHT_WHITE);
|
||||
inverts(BACKGROUND, FOREGROUND);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void inverts(TerminalColor a, TerminalColor b) {
|
||||
a.invertColor = b;
|
||||
b.invertColor = a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a new color for the given color with inversions or brightness attributes applied.
|
||||
*
|
||||
* @param invert For invertible colors, return the inverse (typically white <-> black)
|
||||
* @param bright returns the brighter version of the color if one is available
|
||||
* @return {@link ColorDescriptor} that a {@link Color} can be made from
|
||||
* using {@link ColorDescriptor#createColor(org.eclipse.swt.graphics.Device)}
|
||||
* @throws NullPointerException if there is no current {@link Display}
|
||||
*/
|
||||
public TerminalColor convertColor(boolean invert, boolean bright) {
|
||||
TerminalColor selected = this;
|
||||
// it doesn't matter which order you apply bright and invert, you get to
|
||||
// the same color when both are set
|
||||
if (invert) {
|
||||
selected = selected.invertColor;
|
||||
}
|
||||
if (bright) {
|
||||
selected = selected.brightColor;
|
||||
}
|
||||
return selected;
|
||||
}
|
||||
|
||||
/**
|
||||
* FOR TEST ONLY.
|
||||
*
|
||||
* @noreference This enum method is not intended to be referenced by clients.
|
||||
*/
|
||||
public static TerminalColor getForTest(int c) {
|
||||
return TerminalColor.values()[c % TerminalColor.values().length];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,193 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2020 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* Contributors:
|
||||
* Michael Scharf (Wind River) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
|
||||
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
|
||||
|
||||
/**
|
||||
* @author scharf
|
||||
* Flyweight
|
||||
* Threadsafe.
|
||||
* @since 5.0
|
||||
*
|
||||
*/
|
||||
// TODO add an Object for user data, use weak map to keep track of styles with associated
|
||||
// user data
|
||||
public class TerminalStyle {
|
||||
private final TerminalColor fForegroundTerminalColor;
|
||||
private final TerminalColor fBackgroundTerminalColor;
|
||||
private final boolean fBold;
|
||||
private final boolean fBlink;
|
||||
private final boolean fUnderline;
|
||||
private final boolean fReverse;
|
||||
private final static Map<TerminalStyle, TerminalStyle> fgStyles = Collections
|
||||
.synchronizedMap(new LinkedHashMap<TerminalStyle, TerminalStyle>() {
|
||||
@Override
|
||||
protected boolean removeEldestEntry(Map.Entry<TerminalStyle, TerminalStyle> eldest) {
|
||||
int size = size();
|
||||
boolean removeEldest = size >= 1000;
|
||||
if (TerminalPlugin.isOptionEnabled(Logger.TRACE_DEBUG_LOG_VT100BACKEND)) {
|
||||
if (removeEldest) {
|
||||
Logger.log("Removing eldest Style from style cache, size = " + size); //$NON-NLS-1$
|
||||
} else {
|
||||
Logger.log("Leaving eldest Style in style cache, size = " + size); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
return removeEldest;
|
||||
}
|
||||
});
|
||||
|
||||
private TerminalStyle(TerminalColor foregroundTerminalColor, TerminalColor backgroundTerminalColor, boolean bold,
|
||||
boolean blink, boolean underline, boolean reverse) {
|
||||
fForegroundTerminalColor = foregroundTerminalColor;
|
||||
fBackgroundTerminalColor = backgroundTerminalColor;
|
||||
fBold = bold;
|
||||
fBlink = blink;
|
||||
fUnderline = underline;
|
||||
fReverse = reverse;
|
||||
}
|
||||
|
||||
public static TerminalStyle getStyle(TerminalColor foregroundTerminalColor, TerminalColor backgroundTerminalColor,
|
||||
boolean bold, boolean blink, boolean underline, boolean reverse) {
|
||||
TerminalStyle style = new TerminalStyle(foregroundTerminalColor, backgroundTerminalColor, bold, blink,
|
||||
underline, reverse);
|
||||
// If set had a computeIfAbsent we would use a set, instead just store 1-2-1 mapping
|
||||
return fgStyles.computeIfAbsent(style, (s) -> style);
|
||||
}
|
||||
|
||||
public static TerminalStyle getDefaultStyle() {
|
||||
return getStyle(TerminalColor.FOREGROUND, TerminalColor.BACKGROUND);
|
||||
}
|
||||
|
||||
public static TerminalStyle getStyle(TerminalColor foregroundTerminalColor, TerminalColor backgroundTerminalColor) {
|
||||
return getStyle(foregroundTerminalColor, backgroundTerminalColor, false, false, false, false);
|
||||
}
|
||||
|
||||
public TerminalStyle setForeground(TerminalColor foregroundTerminalColor) {
|
||||
return getStyle(foregroundTerminalColor, fBackgroundTerminalColor, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setBackground(TerminalColor backgroundTerminalColor) {
|
||||
return getStyle(fForegroundTerminalColor, backgroundTerminalColor, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setForeground(TerminalStyle other) {
|
||||
return getStyle(other.fForegroundTerminalColor, fBackgroundTerminalColor, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setBackground(TerminalStyle other) {
|
||||
return getStyle(fForegroundTerminalColor, other.fBackgroundTerminalColor, fBold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setBold(boolean bold) {
|
||||
return getStyle(fForegroundTerminalColor, fBackgroundTerminalColor, bold, fBlink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setBlink(boolean blink) {
|
||||
return getStyle(fForegroundTerminalColor, fBackgroundTerminalColor, fBold, blink, fUnderline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setUnderline(boolean underline) {
|
||||
return getStyle(fForegroundTerminalColor, fBackgroundTerminalColor, fBold, fBlink, underline, fReverse);
|
||||
}
|
||||
|
||||
public TerminalStyle setReverse(boolean reverse) {
|
||||
return getStyle(fForegroundTerminalColor, fBackgroundTerminalColor, fBold, fBlink, fUnderline, reverse);
|
||||
}
|
||||
|
||||
public TerminalColor getForegroundTerminalColor() {
|
||||
return fForegroundTerminalColor;
|
||||
}
|
||||
|
||||
public TerminalColor getBackgroundTerminalColor() {
|
||||
return fBackgroundTerminalColor;
|
||||
}
|
||||
|
||||
public boolean isBlink() {
|
||||
return fBlink;
|
||||
}
|
||||
|
||||
public boolean isBold() {
|
||||
return fBold;
|
||||
}
|
||||
|
||||
public boolean isReverse() {
|
||||
return fReverse;
|
||||
}
|
||||
|
||||
public boolean isUnderline() {
|
||||
return fUnderline;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((fBackgroundTerminalColor == null) ? 0 : fBackgroundTerminalColor.hashCode());
|
||||
result = prime * result + (fBlink ? 1231 : 1237);
|
||||
result = prime * result + (fBold ? 1231 : 1237);
|
||||
result = prime * result + ((fForegroundTerminalColor == null) ? 0 : fForegroundTerminalColor.hashCode());
|
||||
result = prime * result + (fReverse ? 1231 : 1237);
|
||||
result = prime * result + (fUnderline ? 1231 : 1237);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
TerminalStyle other = (TerminalStyle) obj;
|
||||
if (fBackgroundTerminalColor != other.fBackgroundTerminalColor)
|
||||
return false;
|
||||
if (fBlink != other.fBlink)
|
||||
return false;
|
||||
if (fBold != other.fBold)
|
||||
return false;
|
||||
if (fForegroundTerminalColor != other.fForegroundTerminalColor)
|
||||
return false;
|
||||
if (fReverse != other.fReverse)
|
||||
return false;
|
||||
if (fUnderline != other.fUnderline)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer result = new StringBuffer();
|
||||
result.append("Style(foreground="); //$NON-NLS-1$
|
||||
result.append(fForegroundTerminalColor);
|
||||
result.append(", background="); //$NON-NLS-1$
|
||||
result.append(fBackgroundTerminalColor);
|
||||
if (fBlink)
|
||||
result.append(", blink"); //$NON-NLS-1$
|
||||
if (fBold)
|
||||
result.append(", bold"); //$NON-NLS-1$
|
||||
if (fBlink)
|
||||
result.append(", blink"); //$NON-NLS-1$
|
||||
if (fReverse)
|
||||
result.append(", reverse"); //$NON-NLS-1$
|
||||
if (fUnderline)
|
||||
result.append(", underline"); //$NON-NLS-1$
|
||||
result.append(")"); //$NON-NLS-1$
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -14,13 +14,13 @@
|
|||
|
||||
package org.eclipse.tm.internal.terminal.connector;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.ConnectorMock;
|
||||
import org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.SimpleFactory;
|
||||
import org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.TerminalControlMock;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* Testcase for TerminalConnector that must run as a JUnit plug-in test.
|
||||
*/
|
||||
|
|
|
@ -16,13 +16,16 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.emulator;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.WHITE;
|
||||
|
||||
import org.eclipse.tm.internal.terminal.model.TerminalTextDataStore;
|
||||
import org.eclipse.tm.internal.terminal.model.TerminalTextTestHelper;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class VT100EmulatorBackendTest extends TestCase {
|
||||
|
||||
|
@ -592,10 +595,10 @@ public class VT100EmulatorBackendTest extends TestCase {
|
|||
public void testGetDefaultStyle() {
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
IVT100EmulatorBackend vt100 = makeBakend(term);
|
||||
Style style = Style.getStyle("white", "black");
|
||||
TerminalStyle style = TerminalStyle.getStyle(WHITE, BLACK);
|
||||
vt100.setDefaultStyle(style);
|
||||
assertSame(style, vt100.getDefaultStyle());
|
||||
Style style2 = style.setBold(true);
|
||||
TerminalStyle style2 = style.setBold(true);
|
||||
vt100.setDefaultStyle(style2);
|
||||
assertSame(style2, vt100.getDefaultStyle());
|
||||
}
|
||||
|
@ -603,10 +606,10 @@ public class VT100EmulatorBackendTest extends TestCase {
|
|||
public void testGetStyle() {
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
IVT100EmulatorBackend vt100 = makeBakend(term);
|
||||
Style style = Style.getStyle("white", "black");
|
||||
TerminalStyle style = TerminalStyle.getStyle(WHITE, BLACK);
|
||||
vt100.setStyle(style);
|
||||
assertSame(style, vt100.getStyle());
|
||||
Style style2 = style.setBold(true);
|
||||
TerminalStyle style2 = style.setBold(true);
|
||||
vt100.setStyle(style2);
|
||||
assertSame(style2, vt100.getStyle());
|
||||
}
|
||||
|
@ -668,7 +671,6 @@ public class VT100EmulatorBackendTest extends TestCase {
|
|||
assertEqualsTerm("klmn\n" + "opqr\n" + "sABC\n" + "DEFG\n" + "HIJK\n" + "L ", toMultiLineText(term));
|
||||
assertEquals(2, vt100.getCursorLine());
|
||||
assertEquals(1, vt100.getCursorColumn());
|
||||
|
||||
}
|
||||
|
||||
public void testProcessNewline() {
|
||||
|
|
|
@ -14,8 +14,8 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
@ -199,9 +199,9 @@ abstract public class AbstractITerminalTextDataTest extends TestCase {
|
|||
}
|
||||
|
||||
public void testGetLineSegments() {
|
||||
Style s1 = getDefaultStyle();
|
||||
Style s2 = s1.setBold(true);
|
||||
Style s3 = s1.setUnderline(true);
|
||||
TerminalStyle s1 = getDefaultStyle();
|
||||
TerminalStyle s2 = s1.setBold(true);
|
||||
TerminalStyle s3 = s1.setUnderline(true);
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
term.setDimensions(8, 8);
|
||||
LineSegment[] segments;
|
||||
|
@ -273,7 +273,7 @@ abstract public class AbstractITerminalTextDataTest extends TestCase {
|
|||
|
||||
}
|
||||
|
||||
void assertSegment(int col, String text, Style style, LineSegment segment) {
|
||||
void assertSegment(int col, String text, TerminalStyle style, LineSegment segment) {
|
||||
assertEquals(col, segment.getColumn());
|
||||
assertEqualsTerm(text, segment.getText());
|
||||
assertEquals(style, segment.getStyle());
|
||||
|
@ -333,26 +333,25 @@ abstract public class AbstractITerminalTextDataTest extends TestCase {
|
|||
|
||||
public void testGetStyle() {
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
Style style = getDefaultStyle();
|
||||
TerminalStyle style = getDefaultStyle();
|
||||
term.setDimensions(6, 3);
|
||||
for (int line = 0; line < term.getHeight(); line++) {
|
||||
for (int column = 0; column < term.getWidth(); column++) {
|
||||
char c = (char) ('a' + column + line);
|
||||
term.setChar(line, column, c, style.setForground(StyleColor.getStyleColor("" + c)));
|
||||
term.setChar(line, column, c, style.setForeground(TerminalColor.getForTest(c)));
|
||||
}
|
||||
}
|
||||
for (int line = 0; line < term.getHeight(); line++) {
|
||||
for (int column = 0; column < term.getWidth(); column++) {
|
||||
char c = (char) ('a' + column + line);
|
||||
assertSame(style.setForground(StyleColor.getStyleColor("" + c)), term.getStyle(line, column));
|
||||
assertSame(style.setForeground(TerminalColor.getForTest(c)), term.getStyle(line, column));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected Style getDefaultStyle() {
|
||||
return Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false,
|
||||
false);
|
||||
protected TerminalStyle getDefaultStyle() {
|
||||
return TerminalStyle.getDefaultStyle();
|
||||
}
|
||||
|
||||
public void testSetChar() {
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.model;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class SnapshotChangesTest extends TestCase {
|
||||
/**
|
||||
* @param change
|
||||
|
|
|
@ -12,8 +12,7 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
@ -46,8 +45,7 @@ public class TerminalTextDataPerformanceTest extends TestCase {
|
|||
}
|
||||
|
||||
private void method0(ITerminalTextData term, String label) {
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
initPerformance(term);
|
||||
String s = "This is a test string";
|
||||
long n = 0;
|
||||
|
@ -90,8 +88,7 @@ public class TerminalTextDataPerformanceTest extends TestCase {
|
|||
}
|
||||
|
||||
private void method1(ITerminalTextData term, String label) {
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
initPerformance(term);
|
||||
String s = "This is a test string";
|
||||
long n = 0;
|
||||
|
@ -115,8 +112,7 @@ public class TerminalTextDataPerformanceTest extends TestCase {
|
|||
|
||||
public void testPerformance2() {
|
||||
TerminalTextData term = new TerminalTextData();
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
initPerformance(term);
|
||||
TerminalTextData copy = new TerminalTextData();
|
||||
copy.copy(term);
|
||||
|
@ -144,8 +140,7 @@ public class TerminalTextDataPerformanceTest extends TestCase {
|
|||
public void testPerformance2a() {
|
||||
TerminalTextData term = new TerminalTextData();
|
||||
ITerminalTextDataSnapshot snapshot = term.makeSnapshot();
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
initPerformance(term);
|
||||
TerminalTextData copy = new TerminalTextData();
|
||||
copy.copy(term);
|
||||
|
@ -178,8 +173,7 @@ public class TerminalTextDataPerformanceTest extends TestCase {
|
|||
ITerminalTextDataSnapshot snapshot = term.makeSnapshot();
|
||||
N = 0;
|
||||
snapshot.addListener(snapshot1 -> N++);
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
initPerformance(term);
|
||||
TerminalTextData copy = new TerminalTextData();
|
||||
copy.copy(term);
|
||||
|
@ -207,8 +201,7 @@ public class TerminalTextDataPerformanceTest extends TestCase {
|
|||
|
||||
public void testPerformance3() {
|
||||
TerminalTextData term = new TerminalTextData();
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
initPerformance(term);
|
||||
TerminalTextData copy = new TerminalTextData();
|
||||
copy.copy(term);
|
||||
|
|
|
@ -13,8 +13,8 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
@ -317,13 +317,12 @@ public class TerminalTextDataSnapshotTest extends TestCase {
|
|||
//
|
||||
public void testGetStyle() {
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
term.setDimensions(6, 3);
|
||||
for (int line = 0; line < term.getHeight(); line++) {
|
||||
for (int column = 0; column < term.getWidth(); column++) {
|
||||
char c = (char) ('a' + column + line);
|
||||
term.setChar(line, column, c, style.setForground(StyleColor.getStyleColor("" + c)));
|
||||
term.setChar(line, column, c, style.setForeground(TerminalColor.getForTest(c)));
|
||||
}
|
||||
}
|
||||
ITerminalTextDataSnapshot snapshot = term.makeSnapshot();
|
||||
|
@ -332,7 +331,7 @@ public class TerminalTextDataSnapshotTest extends TestCase {
|
|||
for (int line = 0; line < term.getHeight(); line++) {
|
||||
for (int column = 0; column < term.getWidth(); column++) {
|
||||
char c = (char) ('a' + column + line);
|
||||
assertSame(style.setForground(StyleColor.getStyleColor("" + c)), snapshot.getStyle(line, column));
|
||||
assertSame(style.setForeground(TerminalColor.getForTest(c)), snapshot.getStyle(line, column));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.model;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class TerminalTextDataSnapshotWindowTest extends TestCase {
|
||||
String toMultiLineText(ITerminalTextDataReadOnly term) {
|
||||
return TerminalTextTestHelper.toMultiLineText(term);
|
||||
|
|
|
@ -17,8 +17,8 @@ import java.util.ArrayList;
|
|||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.LineSegment;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
public class TerminalTextDataWindowTest extends AbstractITerminalTextDataTest {
|
||||
int fOffset;
|
||||
|
@ -137,9 +137,9 @@ public class TerminalTextDataWindowTest extends AbstractITerminalTextDataTest {
|
|||
|
||||
@Override
|
||||
public void testGetLineSegments() {
|
||||
Style s1 = getDefaultStyle();
|
||||
Style s2 = s1.setBold(true);
|
||||
Style s3 = s1.setUnderline(true);
|
||||
TerminalStyle s1 = getDefaultStyle();
|
||||
TerminalStyle s2 = s1.setBold(true);
|
||||
TerminalStyle s3 = s1.setUnderline(true);
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
term.setDimensions(8, 8);
|
||||
LineSegment[] segments;
|
||||
|
@ -209,20 +209,20 @@ public class TerminalTextDataWindowTest extends AbstractITerminalTextDataTest {
|
|||
@Override
|
||||
public void testGetStyle() {
|
||||
ITerminalTextData term = makeITerminalTextData();
|
||||
Style style = getDefaultStyle();
|
||||
TerminalStyle style = getDefaultStyle();
|
||||
term.setDimensions(6, 3);
|
||||
for (int line = 0; line < term.getHeight(); line++) {
|
||||
for (int column = 0; column < term.getWidth(); column++) {
|
||||
char c = (char) ('a' + column + line);
|
||||
term.setChar(line, column, c, style.setForground(StyleColor.getStyleColor("" + c)));
|
||||
term.setChar(line, column, c, style.setForeground(TerminalColor.getForTest(c)));
|
||||
}
|
||||
}
|
||||
for (int line = 0; line < term.getHeight(); line++) {
|
||||
for (int column = 0; column < term.getWidth(); column++) {
|
||||
char c = (char) ('a' + column + line);
|
||||
Style s = null;
|
||||
TerminalStyle s = null;
|
||||
if (line >= fOffset && line < fOffset + fSize)
|
||||
s = style.setForground(StyleColor.getStyleColor("" + c));
|
||||
s = style.setForeground(TerminalColor.getForTest(c));
|
||||
assertSame(s, term.getStyle(line, column));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ package org.eclipse.tm.internal.terminal.model;
|
|||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
public class TerminalTextTestHelper {
|
||||
static public String toSimple(ITerminalTextDataReadOnly term) {
|
||||
|
@ -62,12 +62,11 @@ public class TerminalTextTestHelper {
|
|||
* @param s each character is one line
|
||||
*/
|
||||
static public void fillSimple(ITerminalTextData term, String s) {
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
term.setDimensions(s.length(), 1);
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
term.setChar(i, 0, c, style.setForground(StyleColor.getStyleColor("" + c)));
|
||||
term.setChar(i, 0, c, style.setForeground(TerminalColor.getForTest(c)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,15 +98,14 @@ public class TerminalTextTestHelper {
|
|||
static public void fill(ITerminalTextData term, int column, int line, String s) {
|
||||
int xx = column;
|
||||
int yy = line;
|
||||
Style style = Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false,
|
||||
false, false);
|
||||
TerminalStyle style = TerminalStyle.getDefaultStyle();
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
if (c == '\n') {
|
||||
yy++;
|
||||
xx = column;
|
||||
} else {
|
||||
term.setChar(yy, xx, c, style.setForground(StyleColor.getStyleColor("" + c)));
|
||||
term.setChar(yy, xx, c, style.setForeground(TerminalColor.getForTest(c)));
|
||||
xx++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package org.eclipse.tm.internal.terminal.test.ui;
|
||||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* Adds line by line
|
||||
|
@ -20,7 +20,7 @@ import org.eclipse.tm.terminal.model.Style;
|
|||
abstract class AbstractLineOrientedDataSource implements IDataSource {
|
||||
abstract public char[] dataSource();
|
||||
|
||||
abstract public Style getStyle();
|
||||
abstract public TerminalStyle getStyle();
|
||||
|
||||
abstract public void next();
|
||||
|
||||
|
@ -28,7 +28,7 @@ abstract class AbstractLineOrientedDataSource implements IDataSource {
|
|||
public int step(ITerminalTextData terminal) {
|
||||
next();
|
||||
char[] chars = dataSource();
|
||||
Style style = getStyle();
|
||||
TerminalStyle style = getStyle();
|
||||
int len;
|
||||
// keep the synchronized block short!
|
||||
synchronized (terminal) {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.test.ui;
|
||||
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
final class FastDataSource extends AbstractLineOrientedDataSource {
|
||||
char lines[][] = new char[][] {
|
||||
|
@ -25,7 +25,7 @@ final class FastDataSource extends AbstractLineOrientedDataSource {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle() {
|
||||
public TerminalStyle getStyle() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,8 +14,7 @@ import java.io.BufferedReader;
|
|||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
/**
|
||||
* Reads the file in an infinite loop.
|
||||
|
@ -29,11 +28,11 @@ final class FileDataSource extends AbstractLineOrientedDataSource {
|
|||
|
||||
String line;
|
||||
|
||||
Style style;
|
||||
TerminalStyle style;
|
||||
|
||||
Style styleNormal = Style.getStyle(StyleColor.getStyleColor("black"), StyleColor.getStyleColor("white"));
|
||||
TerminalStyle styleNormal = TerminalStyle.getDefaultStyle();
|
||||
|
||||
Style styleBold = styleNormal.setBold(true);
|
||||
TerminalStyle styleBold = styleNormal.setBold(true);
|
||||
|
||||
FileDataSource(String file) {
|
||||
fFile = file;
|
||||
|
@ -45,7 +44,7 @@ final class FileDataSource extends AbstractLineOrientedDataSource {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle() {
|
||||
public TerminalStyle getStyle() {
|
||||
return style;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,16 +10,20 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.test.ui;
|
||||
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.YELLOW;
|
||||
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
final class LineCountingDataSource extends AbstractLineOrientedDataSource {
|
||||
Style styleNormal = Style.getStyle(StyleColor.getStyleColor("black"), StyleColor.getStyleColor("red"));
|
||||
TerminalStyle styleNormal = TerminalStyle.getStyle(BLACK, RED);
|
||||
|
||||
Style styles[] = new Style[] { styleNormal, styleNormal.setBold(true), styleNormal.setForground("blue"),
|
||||
styleNormal.setForground("yellow"), styleNormal.setBold(true).setUnderline(true),
|
||||
styleNormal.setReverse(true), styleNormal.setReverse(true).setBold(true),
|
||||
styleNormal.setReverse(true).setUnderline(true) };
|
||||
TerminalStyle styles[] = new TerminalStyle[] { styleNormal, styleNormal.setBold(true),
|
||||
styleNormal.setForeground(BLUE), styleNormal.setForeground(YELLOW),
|
||||
styleNormal.setBold(true).setUnderline(true), styleNormal.setReverse(true),
|
||||
styleNormal.setReverse(true).setBold(true), styleNormal.setReverse(true).setUnderline(true) };
|
||||
|
||||
int pos;
|
||||
|
||||
|
@ -30,7 +34,7 @@ final class LineCountingDataSource extends AbstractLineOrientedDataSource {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Style getStyle() {
|
||||
public TerminalStyle getStyle() {
|
||||
return styles[pos % styles.length];
|
||||
}
|
||||
|
||||
|
|
|
@ -10,19 +10,23 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.internal.terminal.test.ui;
|
||||
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.YELLOW;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import org.eclipse.tm.terminal.model.ITerminalTextData;
|
||||
import org.eclipse.tm.terminal.model.Style;
|
||||
import org.eclipse.tm.terminal.model.StyleColor;
|
||||
import org.eclipse.tm.terminal.model.TerminalStyle;
|
||||
|
||||
public class RandomDataSource implements IDataSource {
|
||||
Random fRandom = new Random();
|
||||
Style styleNormal = Style.getStyle(StyleColor.getStyleColor("black"), StyleColor.getStyleColor("green"));
|
||||
Style styles[] = new Style[] { styleNormal, styleNormal.setBold(true), styleNormal.setForground("red"),
|
||||
styleNormal.setForground("yellow"), styleNormal.setBold(true).setUnderline(true),
|
||||
styleNormal.setReverse(true), styleNormal.setReverse(true).setBold(true),
|
||||
styleNormal.setReverse(true).setUnderline(true) };
|
||||
TerminalStyle styleNormal = TerminalStyle.getStyle(BLACK, GREEN);
|
||||
TerminalStyle styles[] = new TerminalStyle[] { styleNormal, styleNormal.setBold(true),
|
||||
styleNormal.setForeground(RED), styleNormal.setForeground(YELLOW),
|
||||
styleNormal.setBold(true).setUnderline(true), styleNormal.setReverse(true),
|
||||
styleNormal.setReverse(true).setBold(true), styleNormal.setReverse(true).setUnderline(true) };
|
||||
|
||||
@Override
|
||||
public int step(ITerminalTextData terminal) {
|
||||
|
@ -34,7 +38,7 @@ public class RandomDataSource implements IDataSource {
|
|||
int line = fRandom.nextInt(h);
|
||||
int col = fRandom.nextInt(w);
|
||||
char c = (char) ('A' + fRandom.nextInt('z' - 'A'));
|
||||
Style style = styles[fRandom.nextInt(styles.length)];
|
||||
TerminalStyle style = styles[fRandom.nextInt(styles.length)];
|
||||
terminal.setChar(line, col, c, style);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import junit.framework.JUnit4TestAdapter;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
@ -31,7 +32,7 @@ public class AllTests extends TestCase {
|
|||
|
||||
public static Test suite() {
|
||||
TestSuite suite = new TestSuite(AllTests.class.getName());
|
||||
suite.addTestSuite(StyleColorTest.class);
|
||||
suite.addTest(new JUnit4TestAdapter(TerminalColorUITest.class));
|
||||
suite.addTestSuite(StyleTest.class);
|
||||
return suite;
|
||||
}
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2018 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* Contributors:
|
||||
* Michael Scharf (Wind River) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class StyleColorTest extends TestCase {
|
||||
|
||||
public void testEqualsObject() {
|
||||
assertEquals(StyleColor.getStyleColor("foo"), StyleColor.getStyleColor("foo"));
|
||||
assertFalse(StyleColor.getStyleColor("foox").equals(StyleColor.getStyleColor("foo")));
|
||||
}
|
||||
|
||||
public void testSameObject() {
|
||||
assertSame(StyleColor.getStyleColor("foo"), StyleColor.getStyleColor("foo"));
|
||||
assertNotSame(StyleColor.getStyleColor("foox"), StyleColor.getStyleColor("foo"));
|
||||
}
|
||||
|
||||
public void testToString() {
|
||||
assertEquals("xxx", StyleColor.getStyleColor("xxx").toString());
|
||||
}
|
||||
|
||||
public void testGetName() {
|
||||
assertEquals("xxx", StyleColor.getStyleColor("xxx").getName());
|
||||
}
|
||||
|
||||
}
|
|
@ -13,13 +13,13 @@ package org.eclipse.tm.terminal.model;
|
|||
import junit.framework.TestCase;
|
||||
|
||||
public class StyleTest extends TestCase {
|
||||
final StyleColor c1 = StyleColor.getStyleColor("c1");
|
||||
final StyleColor c2 = StyleColor.getStyleColor("c2");
|
||||
final StyleColor c3 = StyleColor.getStyleColor("c3");
|
||||
final TerminalColor c1 = TerminalColor.getForTest(1);
|
||||
final TerminalColor c2 = TerminalColor.getForTest(2);
|
||||
final TerminalColor c3 = TerminalColor.getForTest(3);
|
||||
|
||||
public void testGetStyle() {
|
||||
Style s1 = Style.getStyle(c1, c2, true, false, true, false);
|
||||
Style s2 = Style.getStyle(c1, c2, true, false, true, false);
|
||||
TerminalStyle s1 = TerminalStyle.getStyle(c1, c2, true, false, true, false);
|
||||
TerminalStyle s2 = TerminalStyle.getStyle(c1, c2, true, false, true, false);
|
||||
assertEquals(s1, s2);
|
||||
assertSame(s1, s2);
|
||||
s1 = s1.setBlink(!s1.isBlink());
|
||||
|
@ -29,37 +29,37 @@ public class StyleTest extends TestCase {
|
|||
assertSame(s1, s2);
|
||||
}
|
||||
|
||||
public void testSetForground() {
|
||||
Style s1 = Style.getStyle(c1, c2, true, false, true, false);
|
||||
Style s2 = s1;
|
||||
s2 = s1.setForground(c3);
|
||||
public void testSetForeground() {
|
||||
TerminalStyle s1 = TerminalStyle.getStyle(c1, c2, true, false, true, false);
|
||||
TerminalStyle s2 = s1;
|
||||
s2 = s1.setForeground(c3);
|
||||
assertNotSame(s1, s2);
|
||||
assertFalse(s1.equals(s2));
|
||||
assertSame(s2.getForground(), c3);
|
||||
assertSame(s1.getForground(), c1);
|
||||
assertSame(s1.getBackground(), c2);
|
||||
assertSame(s2.getBackground(), c2);
|
||||
s2 = s2.setForground(c1);
|
||||
assertSame(s2.getForegroundTerminalColor(), c3);
|
||||
assertSame(s1.getForegroundTerminalColor(), c1);
|
||||
assertSame(s1.getBackgroundTerminalColor(), c2);
|
||||
assertSame(s2.getBackgroundTerminalColor(), c2);
|
||||
s2 = s2.setForeground(c1);
|
||||
assertSame(s1, s2);
|
||||
}
|
||||
|
||||
public void testSetBackground() {
|
||||
Style s1 = Style.getStyle(c1, c2, true, false, true, false);
|
||||
Style s2 = s1;
|
||||
TerminalStyle s1 = TerminalStyle.getStyle(c1, c2, true, false, true, false);
|
||||
TerminalStyle s2 = s1;
|
||||
s2 = s1.setBackground(c3);
|
||||
assertNotSame(s1, s2);
|
||||
assertFalse(s1.equals(s2));
|
||||
assertSame(s2.getForground(), c1);
|
||||
assertSame(s1.getForground(), c1);
|
||||
assertSame(s1.getBackground(), c2);
|
||||
assertSame(s2.getBackground(), c3);
|
||||
assertSame(s2.getForegroundTerminalColor(), c1);
|
||||
assertSame(s1.getForegroundTerminalColor(), c1);
|
||||
assertSame(s1.getBackgroundTerminalColor(), c2);
|
||||
assertSame(s2.getBackgroundTerminalColor(), c3);
|
||||
s2 = s2.setBackground(c2);
|
||||
assertSame(s1, s2);
|
||||
}
|
||||
|
||||
public void testSetBold() {
|
||||
Style s1 = getDefaultStyle();
|
||||
Style s2 = s1;
|
||||
TerminalStyle s1 = getDefaultStyle();
|
||||
TerminalStyle s2 = s1;
|
||||
assertSame(s1, s2);
|
||||
assertFalse(s2.isBold());
|
||||
s2 = s2.setBold(true);
|
||||
|
@ -71,8 +71,8 @@ public class StyleTest extends TestCase {
|
|||
}
|
||||
|
||||
public void testSetBlink() {
|
||||
Style s1 = getDefaultStyle();
|
||||
Style s2 = s1;
|
||||
TerminalStyle s1 = getDefaultStyle();
|
||||
TerminalStyle s2 = s1;
|
||||
assertSame(s1, s2);
|
||||
assertFalse(s2.isBlink());
|
||||
s2 = s2.setBlink(true);
|
||||
|
@ -84,8 +84,8 @@ public class StyleTest extends TestCase {
|
|||
}
|
||||
|
||||
public void testSetUnderline() {
|
||||
Style s1 = getDefaultStyle();
|
||||
Style s2 = s1;
|
||||
TerminalStyle s1 = getDefaultStyle();
|
||||
TerminalStyle s2 = s1;
|
||||
assertSame(s1, s2);
|
||||
assertFalse(s2.isUnderline());
|
||||
s2 = s2.setUnderline(true);
|
||||
|
@ -97,8 +97,8 @@ public class StyleTest extends TestCase {
|
|||
}
|
||||
|
||||
public void testSetReverse() {
|
||||
Style s1 = getDefaultStyle();
|
||||
Style s2 = s1;
|
||||
TerminalStyle s1 = getDefaultStyle();
|
||||
TerminalStyle s2 = s1;
|
||||
assertSame(s1, s2);
|
||||
assertFalse(s2.isReverse());
|
||||
s2 = s2.setReverse(true);
|
||||
|
@ -109,8 +109,8 @@ public class StyleTest extends TestCase {
|
|||
assertFalse(s2.isReverse());
|
||||
}
|
||||
|
||||
private Style getDefaultStyle() {
|
||||
return Style.getStyle(c1, c2, false, false, false, false);
|
||||
private TerminalStyle getDefaultStyle() {
|
||||
return TerminalStyle.getStyle(c1, c2, false, false, false, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2020 Kichwa Coders Canada Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License 2.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-2.0/
|
||||
*******************************************************************************/
|
||||
package org.eclipse.tm.terminal.model;
|
||||
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLACK;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.BLUE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.CYAN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.GREEN;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.MAGENTA;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.RED;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.WHITE;
|
||||
import static org.eclipse.tm.terminal.model.TerminalColor.YELLOW;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* This is a UI test because {@link TerminalColor#convertColor(boolean, boolean)
|
||||
* requires a Display to operate the ColorRegistry.
|
||||
*/
|
||||
public class TerminalColorUITest {
|
||||
|
||||
private static Display display = null;
|
||||
|
||||
@BeforeClass
|
||||
public static void createDisplay() {
|
||||
Display current = Display.getCurrent();
|
||||
if (current == null) {
|
||||
display = new Display();
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void disposeDisplay() {
|
||||
if (display != null) {
|
||||
display.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInversionsStandard() {
|
||||
|
||||
assertEquals(BLACK.convertColor(false, false), WHITE.convertColor(true, false));
|
||||
assertNotEquals(BLACK.convertColor(false, false), WHITE.convertColor(false, false));
|
||||
|
||||
assertEquals(RED.convertColor(false, false), RED.convertColor(true, false));
|
||||
assertEquals(GREEN.convertColor(false, false), GREEN.convertColor(true, false));
|
||||
assertEquals(YELLOW.convertColor(false, false), YELLOW.convertColor(true, false));
|
||||
assertEquals(BLUE.convertColor(false, false), BLUE.convertColor(true, false));
|
||||
assertEquals(MAGENTA.convertColor(false, false), MAGENTA.convertColor(true, false));
|
||||
assertEquals(CYAN.convertColor(false, false), CYAN.convertColor(true, false));
|
||||
|
||||
assertEquals(WHITE.convertColor(false, false), BLACK.convertColor(true, false));
|
||||
assertNotEquals(WHITE.convertColor(false, false), BLACK.convertColor(false, false));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInversionsBright() {
|
||||
assertEquals(BLACK.convertColor(false, true), WHITE.convertColor(true, true));
|
||||
assertNotEquals(BLACK.convertColor(false, true), WHITE.convertColor(false, true));
|
||||
|
||||
assertEquals(RED.convertColor(false, true), RED.convertColor(true, true));
|
||||
assertEquals(GREEN.convertColor(false, true), GREEN.convertColor(true, true));
|
||||
assertEquals(YELLOW.convertColor(false, true), YELLOW.convertColor(true, true));
|
||||
assertEquals(BLUE.convertColor(false, true), BLUE.convertColor(true, true));
|
||||
assertEquals(MAGENTA.convertColor(false, true), MAGENTA.convertColor(true, true));
|
||||
assertEquals(CYAN.convertColor(false, true), CYAN.convertColor(true, true));
|
||||
|
||||
assertEquals(WHITE.convertColor(false, true), BLACK.convertColor(true, true));
|
||||
assertNotEquals(WHITE.convertColor(false, true), BLACK.convertColor(false, true));
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue