mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 06:49:36 -04:00
parent
dadc335178
commit
c59e72e6b4
11
src/main/java/de/neemann/digital/draw/graphics/ColorKey.java
Normal file
11
src/main/java/de/neemann/digital/draw/graphics/ColorKey.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 Helmut Neemann.
|
||||||
|
* Use of this source code is governed by the GPL v3 license
|
||||||
|
* that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
package de.neemann.digital.draw.graphics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifiers for the different colors
|
||||||
|
*/
|
||||||
|
public enum ColorKey {BACKGROUND, MAIN, WIRE, WIRE_HIGH, WIRE_LOW, WIRE_VALUE, WIRE_OUT, WIRE_Z, ERROR, PASSED, PINS, GRID, TESTCASE, DISABLED, ASYNC, HIGHLIGHT}
|
@ -1,153 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2020 Helmut Neemann.
|
|
||||||
* Use of this source code is governed by the GPL v3 license
|
|
||||||
* that can be found in the LICENSE file.
|
|
||||||
*/
|
|
||||||
package de.neemann.digital.draw.graphics;
|
|
||||||
|
|
||||||
import de.neemann.digital.core.element.Key;
|
|
||||||
import de.neemann.digital.gui.Settings;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Color map.
|
|
||||||
* Used to define the different color schemes.
|
|
||||||
*/
|
|
||||||
public final class ColorMap {
|
|
||||||
|
|
||||||
private static final ColorMap DEFAULT_MAP = new ColorMap()
|
|
||||||
.set(ColorKey.BACKGROUND, Color.WHITE)
|
|
||||||
.set(ColorKey.MAIN, Color.BLACK)
|
|
||||||
.set(ColorKey.WIRE, Color.BLUE.darker())
|
|
||||||
.set(ColorKey.WIRE_LOW, new Color(0, 142, 0))
|
|
||||||
.set(ColorKey.WIRE_HIGH, new Color(102, 255, 102))
|
|
||||||
.set(ColorKey.WIRE_OUT, Color.RED.darker())
|
|
||||||
.set(ColorKey.WIRE_VALUE, new Color(50, 162, 50))
|
|
||||||
.set(ColorKey.WIRE_Z, Color.GRAY)
|
|
||||||
.set(ColorKey.PINS, Color.GRAY)
|
|
||||||
.set(ColorKey.HIGHLIGHT, Color.CYAN)
|
|
||||||
.set(ColorKey.GRID, new Color(210, 210, 210))
|
|
||||||
.set(ColorKey.PASSED, Color.GREEN)
|
|
||||||
.set(ColorKey.ERROR, Color.RED);
|
|
||||||
|
|
||||||
private static final ColorMap DARK_MAP = new ColorMap()
|
|
||||||
.set(ColorKey.BACKGROUND, Color.BLACK)
|
|
||||||
.set(ColorKey.MAIN, Color.GRAY)
|
|
||||||
.set(ColorKey.WIRE, Color.BLUE.darker())
|
|
||||||
.set(ColorKey.WIRE_LOW, new Color(0, 142, 0))
|
|
||||||
.set(ColorKey.WIRE_HIGH, new Color(102, 255, 102))
|
|
||||||
.set(ColorKey.WIRE_OUT, Color.RED.darker())
|
|
||||||
.set(ColorKey.WIRE_VALUE, new Color(50, 162, 50))
|
|
||||||
.set(ColorKey.WIRE_Z, Color.GRAY)
|
|
||||||
.set(ColorKey.PINS, Color.GRAY)
|
|
||||||
.set(ColorKey.HIGHLIGHT, Color.CYAN)
|
|
||||||
.set(ColorKey.GRID, new Color(50, 50, 50))
|
|
||||||
.set(ColorKey.PASSED, Color.GREEN)
|
|
||||||
.set(ColorKey.ERROR, Color.RED);
|
|
||||||
|
|
||||||
private static final ColorMap COLOR_BLIND_MAP = new ColorMap()
|
|
||||||
.set(ColorKey.BACKGROUND, Color.WHITE)
|
|
||||||
.set(ColorKey.MAIN, Color.BLACK)
|
|
||||||
.set(ColorKey.WIRE, Color.BLUE.darker())
|
|
||||||
.set(ColorKey.WIRE_LOW, new Color(32, 59, 232))
|
|
||||||
.set(ColorKey.WIRE_HIGH, new Color(244, 235, 66))
|
|
||||||
.set(ColorKey.WIRE_OUT, Color.RED.darker())
|
|
||||||
.set(ColorKey.WIRE_VALUE, new Color(50, 162, 50))
|
|
||||||
.set(ColorKey.WIRE_Z, new Color(1, 188, 157))
|
|
||||||
.set(ColorKey.PINS, Color.GRAY)
|
|
||||||
.set(ColorKey.HIGHLIGHT, Color.CYAN)
|
|
||||||
.set(ColorKey.GRID, new Color(210, 210, 210))
|
|
||||||
.set(ColorKey.PASSED, Color.GREEN)
|
|
||||||
.set(ColorKey.ERROR, Color.RED);
|
|
||||||
|
|
||||||
private enum ColorSchemes {
|
|
||||||
DEFAULT(DEFAULT_MAP), DARK(DARK_MAP), COLOR_BLIND(COLOR_BLIND_MAP);
|
|
||||||
|
|
||||||
private final ColorMap map;
|
|
||||||
|
|
||||||
ColorSchemes(ColorMap map) {
|
|
||||||
this.map = map;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ColorMap getMap() {
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key used to select the color map
|
|
||||||
*/
|
|
||||||
public static final Key<ColorSchemes> COLOR_SCHEME =
|
|
||||||
new Key.KeyEnum<>("colorScheme", ColorSchemes.DEFAULT, ColorSchemes.values())
|
|
||||||
.setRequiresRepaint();
|
|
||||||
|
|
||||||
private static ColorMap instance = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the selected color map
|
|
||||||
*/
|
|
||||||
public static ColorMap getInstance() {
|
|
||||||
if (instance == null) {
|
|
||||||
Settings.getInstance().getAttributes().addListener(ColorMap::updateInstance);
|
|
||||||
updateInstance();
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void updateInstance() {
|
|
||||||
instance = Settings.getInstance().get(COLOR_SCHEME).getMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The identifiers for the different colors
|
|
||||||
*/
|
|
||||||
public enum ColorKey {BACKGROUND, MAIN, WIRE, WIRE_HIGH, WIRE_LOW, WIRE_VALUE, WIRE_OUT, WIRE_Z, ERROR, PASSED, PINS, GRID, HIGHLIGHT}
|
|
||||||
|
|
||||||
private final Color[] colors;
|
|
||||||
|
|
||||||
private ColorMap() {
|
|
||||||
colors = new Color[ColorKey.HIGHLIGHT.ordinal() + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
private ColorMap set(ColorKey key, Color color) {
|
|
||||||
colors[key.ordinal()] = color;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the selected color
|
|
||||||
*
|
|
||||||
* @param key te color key
|
|
||||||
* @return the color
|
|
||||||
*/
|
|
||||||
public Color getColor(ColorKey key) {
|
|
||||||
Color color = colors[key.ordinal()];
|
|
||||||
if (color == null)
|
|
||||||
return colors[ColorKey.MAIN.ordinal()];
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a color
|
|
||||||
*/
|
|
||||||
public interface ColorProvider {
|
|
||||||
/**
|
|
||||||
* @return the color
|
|
||||||
*/
|
|
||||||
Color getColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
static final class ColorByKey implements ColorProvider {
|
|
||||||
private final ColorKey key;
|
|
||||||
|
|
||||||
ColorByKey(ColorKey key) {
|
|
||||||
this.key = key;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Color getColor() {
|
|
||||||
return getInstance().getColor(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
110
src/main/java/de/neemann/digital/draw/graphics/ColorScheme.java
Normal file
110
src/main/java/de/neemann/digital/draw/graphics/ColorScheme.java
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 Helmut Neemann.
|
||||||
|
* Use of this source code is governed by the GPL v3 license
|
||||||
|
* that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
package de.neemann.digital.draw.graphics;
|
||||||
|
|
||||||
|
import de.neemann.digital.core.element.Key;
|
||||||
|
import de.neemann.digital.gui.Settings;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Color map.
|
||||||
|
* Used to define the different color schemes.
|
||||||
|
*/
|
||||||
|
public final class ColorScheme {
|
||||||
|
|
||||||
|
private static final ColorScheme DEFAULT_SCHEME = new ColorScheme()
|
||||||
|
.set(ColorKey.BACKGROUND, Color.WHITE)
|
||||||
|
.set(ColorKey.MAIN, Color.BLACK)
|
||||||
|
.set(ColorKey.WIRE, Color.BLUE.darker())
|
||||||
|
.set(ColorKey.WIRE_LOW, new Color(0, 142, 0))
|
||||||
|
.set(ColorKey.WIRE_HIGH, new Color(102, 255, 102))
|
||||||
|
.set(ColorKey.WIRE_OUT, Color.RED.darker())
|
||||||
|
.set(ColorKey.WIRE_VALUE, new Color(50, 162, 50))
|
||||||
|
.set(ColorKey.WIRE_Z, Color.GRAY)
|
||||||
|
.set(ColorKey.PINS, Color.GRAY)
|
||||||
|
.set(ColorKey.HIGHLIGHT, Color.CYAN)
|
||||||
|
.set(ColorKey.GRID, new Color(210, 210, 210))
|
||||||
|
.set(ColorKey.PASSED, Color.GREEN)
|
||||||
|
.set(ColorKey.ERROR, Color.RED)
|
||||||
|
.set(ColorKey.DISABLED, Color.LIGHT_GRAY)
|
||||||
|
.set(ColorKey.TESTCASE, new Color(180, 255, 180, 200))
|
||||||
|
.set(ColorKey.ASYNC, new Color(255, 180, 180, 200));
|
||||||
|
|
||||||
|
private static final ColorScheme DARK_SCHEME = new ColorScheme(DEFAULT_SCHEME)
|
||||||
|
.set(ColorKey.BACKGROUND, Color.BLACK)
|
||||||
|
.set(ColorKey.MAIN, Color.GRAY)
|
||||||
|
.set(ColorKey.GRID, new Color(50, 50, 50))
|
||||||
|
.set(ColorKey.DISABLED, Color.GRAY.darker().darker());
|
||||||
|
|
||||||
|
private static final ColorScheme COLOR_BLIND_SCHEME = new ColorScheme(DEFAULT_SCHEME)
|
||||||
|
.set(ColorKey.WIRE_LOW, new Color(32, 59, 232))
|
||||||
|
.set(ColorKey.WIRE_HIGH, new Color(244, 235, 66))
|
||||||
|
.set(ColorKey.WIRE_Z, new Color(1, 188, 157));
|
||||||
|
|
||||||
|
enum ColorSchemes {
|
||||||
|
DEFAULT(DEFAULT_SCHEME), DARK(DARK_SCHEME), COLOR_BLIND(COLOR_BLIND_SCHEME);
|
||||||
|
|
||||||
|
private final ColorScheme scheme;
|
||||||
|
|
||||||
|
ColorSchemes(ColorScheme scheme) {
|
||||||
|
this.scheme = scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
ColorScheme getScheme() {
|
||||||
|
return scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The key used to select the color map
|
||||||
|
*/
|
||||||
|
public static final Key<ColorSchemes> COLOR_SCHEME =
|
||||||
|
new Key.KeyEnum<>("colorScheme", ColorSchemes.DEFAULT, ColorSchemes.values())
|
||||||
|
.setRequiresRepaint();
|
||||||
|
|
||||||
|
private static ColorScheme instance = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the selected color map
|
||||||
|
*/
|
||||||
|
public static ColorScheme getInstance() {
|
||||||
|
if (instance == null) {
|
||||||
|
updateInstance();
|
||||||
|
Settings.getInstance().getAttributes().addListener(ColorScheme::updateInstance);
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateInstance() {
|
||||||
|
instance = Settings.getInstance().get(COLOR_SCHEME).getScheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Color[] colors;
|
||||||
|
|
||||||
|
private ColorScheme() {
|
||||||
|
colors = new Color[ColorKey.values().length];
|
||||||
|
}
|
||||||
|
|
||||||
|
private ColorScheme(ColorScheme other) {
|
||||||
|
this.colors = other.colors.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ColorScheme set(ColorKey key, Color color) {
|
||||||
|
colors[key.ordinal()] = color;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the selected color
|
||||||
|
*
|
||||||
|
* @param key te color key
|
||||||
|
* @return the color
|
||||||
|
*/
|
||||||
|
public Color getColor(ColorKey key) {
|
||||||
|
return colors[key.ordinal()];
|
||||||
|
}
|
||||||
|
}
|
@ -37,11 +37,11 @@ public final class Style {
|
|||||||
/**
|
/**
|
||||||
* used to draw the failed state lines in the measurement graph
|
* used to draw the failed state lines in the measurement graph
|
||||||
*/
|
*/
|
||||||
public static final Style FAILED = new Builder(NORMAL).setColor(ColorMap.ColorKey.ERROR).build();
|
public static final Style FAILED = new Builder(NORMAL).setColor(ColorKey.ERROR).build();
|
||||||
/**
|
/**
|
||||||
* used to draw the passed state lines in the measurement graph
|
* used to draw the passed state lines in the measurement graph
|
||||||
*/
|
*/
|
||||||
public static final Style PASS = new Builder(NORMAL).setColor(ColorMap.ColorKey.PASSED).build();
|
public static final Style PASS = new Builder(NORMAL).setColor(ColorKey.PASSED).build();
|
||||||
/**
|
/**
|
||||||
* Used for text which is integral part of the shape.
|
* Used for text which is integral part of the shape.
|
||||||
* Text which uses this style is always included in sizing!
|
* Text which uses this style is always included in sizing!
|
||||||
@ -66,25 +66,25 @@ public final class Style {
|
|||||||
public static final Style WIRE = new Builder()
|
public static final Style WIRE = new Builder()
|
||||||
.setThickness(WIRETHICK)
|
.setThickness(WIRETHICK)
|
||||||
.setFilled(true)
|
.setFilled(true)
|
||||||
.setColor(ColorMap.ColorKey.WIRE)
|
.setColor(ColorKey.WIRE)
|
||||||
.setEndCap(BasicStroke.CAP_ROUND)
|
.setEndCap(BasicStroke.CAP_ROUND)
|
||||||
.build();
|
.build();
|
||||||
/**
|
/**
|
||||||
* Used for low wires in running mode
|
* Used for low wires in running mode
|
||||||
*/
|
*/
|
||||||
public static final Style WIRE_LOW = new Builder(WIRE).setColor(ColorMap.ColorKey.WIRE_LOW).build();
|
public static final Style WIRE_LOW = new Builder(WIRE).setColor(ColorKey.WIRE_LOW).build();
|
||||||
/**
|
/**
|
||||||
* Used for high wires in running mode
|
* Used for high wires in running mode
|
||||||
*/
|
*/
|
||||||
public static final Style WIRE_HIGH = new Builder(WIRE).setColor(ColorMap.ColorKey.WIRE_HIGH).build();
|
public static final Style WIRE_HIGH = new Builder(WIRE).setColor(ColorKey.WIRE_HIGH).build();
|
||||||
/**
|
/**
|
||||||
* Used for wires in high Z state
|
* Used for wires in high Z state
|
||||||
*/
|
*/
|
||||||
public static final Style WIRE_HIGHZ = new Builder(WIRE).setColor(ColorMap.ColorKey.WIRE_Z).build();
|
public static final Style WIRE_HIGHZ = new Builder(WIRE).setColor(ColorKey.WIRE_Z).build();
|
||||||
/**
|
/**
|
||||||
* used to draw the output dots
|
* used to draw the output dots
|
||||||
*/
|
*/
|
||||||
public static final Style WIRE_OUT = new Builder(WIRE).setColor(ColorMap.ColorKey.WIRE_OUT).build();
|
public static final Style WIRE_OUT = new Builder(WIRE).setColor(ColorKey.WIRE_OUT).build();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* used to draw the bus wires
|
* used to draw the bus wires
|
||||||
@ -107,7 +107,7 @@ public final class Style {
|
|||||||
*/
|
*/
|
||||||
public static final Style SHAPE_PIN = new Builder()
|
public static final Style SHAPE_PIN = new Builder()
|
||||||
.setThickness(LINETHIN)
|
.setThickness(LINETHIN)
|
||||||
.setColor(ColorMap.ColorKey.PINS)
|
.setColor(ColorKey.PINS)
|
||||||
.setFontSize(18)
|
.setFontSize(18)
|
||||||
.build();
|
.build();
|
||||||
/**
|
/**
|
||||||
@ -118,19 +118,19 @@ public final class Style {
|
|||||||
* Used to draw the pin description text
|
* Used to draw the pin description text
|
||||||
*/
|
*/
|
||||||
public static final Style WIRE_VALUE = new Builder(SHAPE_SPLITTER)
|
public static final Style WIRE_VALUE = new Builder(SHAPE_SPLITTER)
|
||||||
.setColor(ColorMap.ColorKey.WIRE_VALUE)
|
.setColor(ColorKey.WIRE_VALUE)
|
||||||
.build();
|
.build();
|
||||||
/**
|
/**
|
||||||
* Used to draw the wire bit number
|
* Used to draw the wire bit number
|
||||||
*/
|
*/
|
||||||
public static final Style WIRE_BITS = new Builder(SHAPE_SPLITTER)
|
public static final Style WIRE_BITS = new Builder(SHAPE_SPLITTER)
|
||||||
.setColor(ColorMap.ColorKey.WIRE)
|
.setColor(ColorKey.WIRE)
|
||||||
.build();
|
.build();
|
||||||
/**
|
/**
|
||||||
* highlight color used for the circles to mark an element
|
* highlight color used for the circles to mark an element
|
||||||
*/
|
*/
|
||||||
public static final Style HIGHLIGHT = new Builder(NORMAL)
|
public static final Style HIGHLIGHT = new Builder(NORMAL)
|
||||||
.setColor(ColorMap.ColorKey.HIGHLIGHT)
|
.setColor(ColorKey.HIGHLIGHT)
|
||||||
.setEndCap(BasicStroke.CAP_ROUND)
|
.setEndCap(BasicStroke.CAP_ROUND)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -138,13 +138,14 @@ public final class Style {
|
|||||||
* error color used for the circles to mark an element
|
* error color used for the circles to mark an element
|
||||||
*/
|
*/
|
||||||
public static final Style ERROR = new Builder(NORMAL)
|
public static final Style ERROR = new Builder(NORMAL)
|
||||||
.setColor(ColorMap.ColorKey.ERROR)
|
.setColor(ColorKey.ERROR)
|
||||||
.setEndCap(BasicStroke.CAP_ROUND)
|
.setEndCap(BasicStroke.CAP_ROUND)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private final int thickness;
|
private final int thickness;
|
||||||
private final boolean filled;
|
private final boolean filled;
|
||||||
private final ColorMap.ColorProvider color;
|
private final Color color;
|
||||||
|
private final ColorKey colorKey;
|
||||||
private final int fontSize;
|
private final int fontSize;
|
||||||
private final float[] dash;
|
private final float[] dash;
|
||||||
private final BasicStroke stroke;
|
private final BasicStroke stroke;
|
||||||
@ -160,6 +161,7 @@ public final class Style {
|
|||||||
private Style(Builder builder) {
|
private Style(Builder builder) {
|
||||||
this.thickness = builder.thickness;
|
this.thickness = builder.thickness;
|
||||||
this.filled = builder.filled;
|
this.filled = builder.filled;
|
||||||
|
this.colorKey = builder.colorKey;
|
||||||
this.color = builder.color;
|
this.color = builder.color;
|
||||||
this.fontSize = builder.fontSize;
|
this.fontSize = builder.fontSize;
|
||||||
this.fontStyle = builder.fontStyle;
|
this.fontStyle = builder.fontStyle;
|
||||||
@ -188,7 +190,10 @@ public final class Style {
|
|||||||
* @return the color
|
* @return the color
|
||||||
*/
|
*/
|
||||||
public Color getColor() {
|
public Color getColor() {
|
||||||
return color.getColor();
|
if (colorKey != null)
|
||||||
|
return ColorScheme.getInstance().getColor(colorKey);
|
||||||
|
else
|
||||||
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -276,6 +281,18 @@ public final class Style {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new style, based on this style.
|
||||||
|
*
|
||||||
|
* @param colorKey the new color
|
||||||
|
* @return Style the derived style with the given color set.
|
||||||
|
*/
|
||||||
|
public Style deriveColor(ColorKey colorKey) {
|
||||||
|
return new Builder(this)
|
||||||
|
.setColor(colorKey)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new style, based on this style.
|
* Creates a new style, based on this style.
|
||||||
*
|
*
|
||||||
@ -306,10 +323,25 @@ public final class Style {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new style suited for filling polygons, based on this style.
|
||||||
|
*
|
||||||
|
* @param colorKey the fill color key
|
||||||
|
* @return the nes style
|
||||||
|
*/
|
||||||
|
public Style deriveFillStyle(ColorKey colorKey) {
|
||||||
|
return new Builder(this)
|
||||||
|
.setThickness(0)
|
||||||
|
.setFilled(true)
|
||||||
|
.setColor(colorKey)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
private static final class Builder {
|
private static final class Builder {
|
||||||
private int thickness = LINETHICK;
|
private int thickness = LINETHICK;
|
||||||
private boolean filled = false;
|
private boolean filled = false;
|
||||||
private ColorMap.ColorProvider color = new ColorMap.ColorByKey(ColorMap.ColorKey.MAIN);
|
private ColorKey colorKey = ColorKey.MAIN;
|
||||||
|
private Color color;
|
||||||
private int fontSize = 24;
|
private int fontSize = 24;
|
||||||
private float[] dash = null;
|
private float[] dash = null;
|
||||||
private boolean mattersForSize = false;
|
private boolean mattersForSize = false;
|
||||||
@ -322,6 +354,7 @@ public final class Style {
|
|||||||
private Builder(Style style) {
|
private Builder(Style style) {
|
||||||
thickness = style.thickness;
|
thickness = style.thickness;
|
||||||
filled = style.filled;
|
filled = style.filled;
|
||||||
|
colorKey = style.colorKey;
|
||||||
color = style.color;
|
color = style.color;
|
||||||
fontSize = style.fontSize;
|
fontSize = style.fontSize;
|
||||||
dash = style.getDash();
|
dash = style.getDash();
|
||||||
@ -339,13 +372,15 @@ public final class Style {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Builder setColor(ColorMap.ColorKey key) {
|
private Builder setColor(ColorKey key) {
|
||||||
this.color = new ColorMap.ColorByKey(key);
|
this.colorKey = key;
|
||||||
|
this.color = null;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Builder setColor(Color color) {
|
private Builder setColor(Color color) {
|
||||||
this.color = () -> color;
|
this.colorKey = null;
|
||||||
|
this.color = color;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
|
|||||||
*/
|
*/
|
||||||
public class AsyncClockShape implements Shape {
|
public class AsyncClockShape implements Shape {
|
||||||
|
|
||||||
private static final Style TESTSTYLE = Style.NORMAL.deriveFillStyle(new Color(255, 180, 180, 200));
|
private static final Style ASYNCSTYLE = Style.NORMAL.deriveFillStyle(ColorKey.ASYNC);
|
||||||
private final String label;
|
private final String label;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,7 +54,7 @@ public class AsyncClockShape implements Shape {
|
|||||||
.add(SIZE2 + SIZE * 4, SIZE2)
|
.add(SIZE2 + SIZE * 4, SIZE2)
|
||||||
.add(SIZE2 + SIZE * 4, SIZE * 2 + SIZE2)
|
.add(SIZE2 + SIZE * 4, SIZE * 2 + SIZE2)
|
||||||
.add(SIZE2, SIZE * 2 + SIZE2);
|
.add(SIZE2, SIZE * 2 + SIZE2);
|
||||||
graphic.drawPolygon(pol, TESTSTYLE);
|
graphic.drawPolygon(pol, ASYNCSTYLE);
|
||||||
graphic.drawPolygon(pol, Style.THIN);
|
graphic.drawPolygon(pol, Style.THIN);
|
||||||
graphic.drawText(new Vector(SIZE2 + SIZE * 2, SIZE + SIZE2), "Async", Orientation.CENTERCENTER, Style.NORMAL);
|
graphic.drawText(new Vector(SIZE2 + SIZE * 2, SIZE + SIZE2), "Async", Orientation.CENTERCENTER, Style.NORMAL);
|
||||||
graphic.drawText(new Vector(SIZE2 + SIZE * 2, 0), label, Orientation.CENTERBOTTOM, Style.NORMAL);
|
graphic.drawText(new Vector(SIZE2 + SIZE * 2, 0), label, Orientation.CENTERBOTTOM, Style.NORMAL);
|
||||||
|
@ -11,10 +11,7 @@ import de.neemann.digital.core.element.PinDescriptions;
|
|||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
import de.neemann.digital.draw.elements.Pin;
|
import de.neemann.digital.draw.elements.Pin;
|
||||||
import de.neemann.digital.draw.elements.Pins;
|
import de.neemann.digital.draw.elements.Pins;
|
||||||
import de.neemann.digital.draw.graphics.Graphic;
|
import de.neemann.digital.draw.graphics.*;
|
||||||
import de.neemann.digital.draw.graphics.Orientation;
|
|
||||||
import de.neemann.digital.draw.graphics.Style;
|
|
||||||
import de.neemann.digital.draw.graphics.Vector;
|
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
@ -59,7 +56,7 @@ public class BreakShape implements Shape {
|
|||||||
Vector center = new Vector(2 + SIZE, 0);
|
Vector center = new Vector(2 + SIZE, 0);
|
||||||
Style style = Style.NORMAL;
|
Style style = Style.NORMAL;
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
style = Style.NORMAL.deriveColor(Color.LIGHT_GRAY);
|
style = Style.NORMAL.deriveColor(ColorKey.DISABLED);
|
||||||
graphic.drawCircle(center.sub(RAD), center.add(RAD), style);
|
graphic.drawCircle(center.sub(RAD), center.add(RAD), style);
|
||||||
graphic.drawLine(center.sub(D1), center.add(D1), style);
|
graphic.drawLine(center.sub(D1), center.add(D1), style);
|
||||||
graphic.drawLine(center.sub(D2), center.add(D2), style);
|
graphic.drawLine(center.sub(D2), center.add(D2), style);
|
||||||
|
@ -47,7 +47,7 @@ public class DipSwitchShape implements Shape {
|
|||||||
.add(-SIZE - SIZE2, -SIZE2 + 4)
|
.add(-SIZE - SIZE2, -SIZE2 + 4)
|
||||||
.add(-SIZE * 3 + 5, -SIZE2 + 4);
|
.add(-SIZE * 3 + 5, -SIZE2 + 4);
|
||||||
|
|
||||||
private static final Style STYLE = Style.THIN.deriveFillStyle(Color.GRAY);
|
private static final Style STYLE = Style.THIN.deriveFillStyle(ColorKey.PINS);
|
||||||
|
|
||||||
private final String label;
|
private final String label;
|
||||||
private final PinDescriptions outputs;
|
private final PinDescriptions outputs;
|
||||||
|
@ -43,7 +43,7 @@ public abstract class SevenShape implements Shape {
|
|||||||
*/
|
*/
|
||||||
public SevenShape(ElementAttributes attr) {
|
public SevenShape(ElementAttributes attr) {
|
||||||
onStyle = Style.NORMAL.deriveFillStyle(attr.get(Keys.COLOR));
|
onStyle = Style.NORMAL.deriveFillStyle(attr.get(Keys.COLOR));
|
||||||
offStyle = Style.NORMAL.deriveFillStyle(ColorMap.getInstance().getColor(ColorMap.ColorKey.GRID));
|
offStyle = Style.NORMAL.deriveFillStyle(ColorKey.GRID);
|
||||||
size = attr.get(Keys.SEVEN_SEG_SIZE);
|
size = attr.get(Keys.SEVEN_SEG_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public class SixteenShape implements Shape {
|
|||||||
public SixteenShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) {
|
public SixteenShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) {
|
||||||
pins = inputs;
|
pins = inputs;
|
||||||
onStyle = Style.NORMAL.deriveFillStyle(attr.get(Keys.COLOR));
|
onStyle = Style.NORMAL.deriveFillStyle(attr.get(Keys.COLOR));
|
||||||
offStyle = Style.NORMAL.deriveFillStyle(ColorMap.getInstance().getColor(ColorMap.ColorKey.GRID));
|
offStyle = Style.NORMAL.deriveFillStyle(ColorKey.GRID);
|
||||||
size = attr.get(Keys.SEVEN_SEG_SIZE);
|
size = attr.get(Keys.SEVEN_SEG_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ public class StepperMotorShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static final Style ERROR_STYLE = Style.NORMAL.deriveColor(Color.RED);
|
private static final Style ERROR_STYLE = Style.NORMAL.deriveColor(ColorKey.ERROR);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawTo(Graphic graphic, Style highLight) {
|
public void drawTo(Graphic graphic, Style highLight) {
|
||||||
|
@ -10,9 +10,6 @@ import de.neemann.digital.core.element.PinDescriptions;
|
|||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
import de.neemann.digital.draw.elements.Pins;
|
import de.neemann.digital.draw.elements.Pins;
|
||||||
import de.neemann.digital.draw.graphics.*;
|
import de.neemann.digital.draw.graphics.*;
|
||||||
import de.neemann.digital.draw.graphics.Polygon;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
import static de.neemann.digital.draw.shapes.GenericShape.SIZE;
|
import static de.neemann.digital.draw.shapes.GenericShape.SIZE;
|
||||||
import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
|
import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
|
||||||
@ -22,7 +19,7 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
|
|||||||
*/
|
*/
|
||||||
public class TestCaseShape implements Shape {
|
public class TestCaseShape implements Shape {
|
||||||
|
|
||||||
private static final Style TESTSTYLE = Style.NORMAL.deriveFillStyle(new Color(180, 255, 180, 200));
|
private static final Style TESTSTYLE = Style.NORMAL.deriveFillStyle(ColorKey.TESTCASE);
|
||||||
private final String label;
|
private final String label;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -8,7 +8,7 @@ package de.neemann.digital.gui;
|
|||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Key;
|
import de.neemann.digital.core.element.Key;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.draw.graphics.ColorMap;
|
import de.neemann.digital.draw.graphics.ColorScheme;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -43,7 +43,7 @@ public final class Settings extends SettingsBase {
|
|||||||
intList.add(Keys.SETTINGS_IEEE_SHAPES);
|
intList.add(Keys.SETTINGS_IEEE_SHAPES);
|
||||||
intList.add(Keys.SETTINGS_LANGUAGE);
|
intList.add(Keys.SETTINGS_LANGUAGE);
|
||||||
intList.add(Keys.SETTINGS_EXPRESSION_FORMAT);
|
intList.add(Keys.SETTINGS_EXPRESSION_FORMAT);
|
||||||
intList.add(ColorMap.COLOR_SCHEME);
|
intList.add(ColorScheme.COLOR_SCHEME);
|
||||||
intList.add(Keys.SETTINGS_DEFAULT_TREESELECT);
|
intList.add(Keys.SETTINGS_DEFAULT_TREESELECT);
|
||||||
intList.add(Keys.SETTINGS_GRID);
|
intList.add(Keys.SETTINGS_GRID);
|
||||||
intList.add(Keys.SETTINGS_SHOW_WIRE_BITS);
|
intList.add(Keys.SETTINGS_SHOW_WIRE_BITS);
|
||||||
|
@ -43,7 +43,7 @@ import java.io.IOException;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static de.neemann.digital.draw.graphics.ColorMap.*;
|
import static de.neemann.digital.draw.graphics.ColorScheme.*;
|
||||||
import static de.neemann.digital.draw.shapes.GenericShape.SIZE;
|
import static de.neemann.digital.draw.shapes.GenericShape.SIZE;
|
||||||
import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
|
import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
|
||||||
|
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 Helmut Neemann.
|
||||||
|
* Use of this source code is governed by the GPL v3 license
|
||||||
|
* that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
package de.neemann.digital.draw.graphics;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class ColorSchemeTest extends TestCase {
|
||||||
|
|
||||||
|
public void testCompleteness() {
|
||||||
|
ColorScheme map = ColorScheme.COLOR_SCHEME.getDefault().getScheme();
|
||||||
|
for (ColorKey ck : ColorKey.values())
|
||||||
|
assertNotNull(map.getColor(ck));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user