overlayn't

- add config options that allow some more customization of the overlay renderer (addresses #2020)
- overlay position has been reset to its default position, because the config path changed

- allow integer config values to be entered and displayed as hex or binary (inside the config gui only)
- how integer values are displayed can be changed with a special comment
- minor changes to theme, that allow keys to refer to one another
This commit is contained in:
zelophed 2021-07-25 04:12:56 +02:00
parent 28d9df16f2
commit e944906519
6 changed files with 190 additions and 57 deletions

View file

@ -13,6 +13,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock; import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.gui.Theme;
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
@ -34,6 +35,7 @@ import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.ITextProperties; import net.minecraft.util.text.ITextProperties;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.fml.client.gui.GuiUtils;
public class GoggleOverlayRenderer { public class GoggleOverlayRenderer {
@ -154,7 +156,12 @@ public class GoggleOverlayRenderer {
posX = Math.min(posX, tooltipScreen.width - tooltipTextWidth - 20); posX = Math.min(posX, tooltipScreen.width - tooltipTextWidth - 20);
posY = Math.min(posY, tooltipScreen.height - tooltipHeight - 20); posY = Math.min(posY, tooltipScreen.height - tooltipHeight - 20);
tooltipScreen.renderComponentTooltip(ms, tooltip, posX, posY); Boolean useCustom = AllConfigs.CLIENT.overlayCustomColor.get();
int colorBackground = useCustom ? AllConfigs.CLIENT.overlayBackgroundColor.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BACKGROUND);
int colorBorderTop = useCustom ? AllConfigs.CLIENT.overlayBorderColorTop.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BORDER, true);
int colorBorderBot = useCustom ? AllConfigs.CLIENT.overlayBorderColorBot.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BORDER, false);
GuiUtils.drawHoveringText(ms, tooltip, posX, posY, tooltipScreen.width, tooltipScreen.height, -1, colorBackground, colorBorderTop, colorBorderBot, mc.font);
ItemStack item = AllItems.GOGGLES.asStack(); ItemStack item = AllItems.GOGGLES.asStack();
GuiGameElement.of(item) GuiGameElement.of(item)

View file

@ -4,6 +4,7 @@ public class CClient extends ConfigBase {
public ConfigGroup client = group(0, "client", public ConfigGroup client = group(0, "client",
"Client-only settings - If you're looking for general settings, look inside your worlds serverconfig folder!"); "Client-only settings - If you're looking for general settings, look inside your worlds serverconfig folder!");
//no group
public ConfigBool tooltips = b(true, "enableTooltips", "Show item descriptions on Shift and controls on Ctrl."); public ConfigBool tooltips = b(true, "enableTooltips", "Show item descriptions on Shift and controls on Ctrl.");
public ConfigBool enableOverstressedTooltip = public ConfigBool enableOverstressedTooltip =
b(true, "enableOverstressedTooltip", "Display a tooltip when looking at overstressed components."); b(true, "enableOverstressedTooltip", "Display a tooltip when looking at overstressed components.");
@ -15,12 +16,7 @@ public class CClient extends ConfigBase {
public ConfigBool experimentalRendering = public ConfigBool experimentalRendering =
b(true, "experimentalRendering", "Use modern OpenGL features to drastically increase performance."); b(true, "experimentalRendering", "Use modern OpenGL features to drastically increase performance.");
public ConfigInt maxContraptionLightVolume = i(16384, 0, Integer.MAX_VALUE, "maximumContraptionLightVolume", public ConfigInt maxContraptionLightVolume = i(16384, 0, Integer.MAX_VALUE, "maximumContraptionLightVolume",
"The maximum amount of blocks for which to try and calculate dynamic contraption lighting. Decrease if large contraption cause too much lag"); "The maximum amount of blocks for which to try and calculate dynamic contraption lighting. Decrease if large contraption cause too much lag");//no group
public ConfigInt overlayOffsetX = i(20, Integer.MIN_VALUE, Integer.MAX_VALUE, "overlayOffsetX",
"Offset the overlay from goggle- and hover- information by this many pixels on the X axis; Use /create overlay");
public ConfigInt overlayOffsetY = i(0, Integer.MIN_VALUE, Integer.MAX_VALUE, "overlayOffsetY",
"Offset the overlay from goggle- and hover- information by this many pixels on the Y axis; Use /create overlay");
public ConfigInt mainMenuConfigButtonRow = i(2, 0, 4, "mainMenuConfigButtonRow", public ConfigInt mainMenuConfigButtonRow = i(2, 0, 4, "mainMenuConfigButtonRow",
"Choose the menu row that the Create config button appears on in the main menu", "Choose the menu row that the Create config button appears on in the main menu",
"Set to 0 to disable the button altogether"); "Set to 0 to disable the button altogether");
@ -38,6 +34,21 @@ public class CClient extends ConfigBase {
public ConfigBool ignoreFabulousWarning = b(false, "ignoreFabulousWarning", public ConfigBool ignoreFabulousWarning = b(false, "ignoreFabulousWarning",
"Setting this to true will prevent Create from sending you a warning when playing with Fabulous graphics enabled"); "Setting this to true will prevent Create from sending you a warning when playing with Fabulous graphics enabled");
//overlay group
public ConfigGroup overlay = group(1, "goggleOverlay", "Settings for the Goggle Overlay");
public ConfigInt overlayOffsetX = i(20, Integer.MIN_VALUE, Integer.MAX_VALUE, "overlayOffsetX",
"Offset the overlay from goggle- and hover- information by this many pixels on the X axis; Use /create overlay");
public ConfigInt overlayOffsetY = i(0, Integer.MIN_VALUE, Integer.MAX_VALUE, "overlayOffsetY",
"Offset the overlay from goggle- and hover- information by this many pixels on the Y axis; Use /create overlay");
public ConfigBool overlayCustomColor = b(false, "customColorsOverlay", "Enable this to use your custom colors for the Goggle- and Hover- Overlay");
public ConfigInt overlayBackgroundColor = i(0xf0_100010, Integer.MIN_VALUE, Integer.MAX_VALUE, "customBackgroundOverlay",
"The custom background color to use for the Goggle- and Hover- Overlays, if enabled", "[in Hex: #AaRrGgBb]", "[@cui:IntDisplay:#]");
public ConfigInt overlayBorderColorTop = i(0x50_5000ff, Integer.MIN_VALUE, Integer.MAX_VALUE, "customBorderTopOverlay",
"The custom top color of the border gradient to use for the Goggle- and Hover- Overlays, if enabled", "[in Hex: #AaRrGgBb]", "[@cui:IntDisplay:#]");
public ConfigInt overlayBorderColorBot = i(0x50_28007f, Integer.MIN_VALUE, Integer.MAX_VALUE, "customBorderBotOverlay",
"The custom bot color of the border gradient to use for the Goggle- and Hover- Overlays, if enabled", "[in Hex: #AaRrGgBb]", "[@cui:IntDisplay:#]");
//placement assist group
public ConfigGroup placementAssist = group(1, "placementAssist", "Settings for the Placement Assist"); public ConfigGroup placementAssist = group(1, "placementAssist", "Settings for the Placement Assist");
public ConfigEnum<PlacementIndicatorSetting> placementIndicator = e(PlacementIndicatorSetting.TEXTURE, public ConfigEnum<PlacementIndicatorSetting> placementIndicator = e(PlacementIndicatorSetting.TEXTURE,
"indicatorType", "indicatorType",
@ -46,10 +57,12 @@ public class CClient extends ConfigBase {
public ConfigFloat indicatorScale = public ConfigFloat indicatorScale =
f(1.0f, 0f, "indicatorScale", "Change the size of the Indicator by this multiplier"); f(1.0f, 0f, "indicatorScale", "Change the size of the Indicator by this multiplier");
//ponder group
public ConfigGroup ponder = group(1, "ponder", "Ponder settings"); public ConfigGroup ponder = group(1, "ponder", "Ponder settings");
public ConfigBool comfyReading = public ConfigBool comfyReading =
b(false, "comfyReading", "Slow down a ponder scene whenever there is text on screen."); b(false, "comfyReading", "Slow down a ponder scene whenever there is text on screen.");
//sound group
public ConfigGroup sound = group(1, "sound", "Sound settings"); public ConfigGroup sound = group(1, "sound", "Sound settings");
public ConfigBool enableAmbientSounds = b(true, "enableAmbientSounds", "Make cogs rumble and machines clatter."); public ConfigBool enableAmbientSounds = b(true, "enableAmbientSounds", "Make cogs rumble and machines clatter.");
public ConfigFloat ambientVolumeCap = f(.1f, 0, 1, "ambientVolumeCap", "Maximum volume modifier of Ambient noise"); public ConfigFloat ambientVolumeCap = f(.1f, 0, 1, "ambientVolumeCap", "Maximum volume modifier of Ambient noise");

View file

@ -1,5 +1,7 @@
package com.simibubi.create.foundation.config.ui; package com.simibubi.create.foundation.config.ui;
import org.lwjgl.glfw.GLFW;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.StringTextComponent;
@ -31,4 +33,29 @@ public class ConfigTextField extends TextFieldWidget {
ConfigScreenList.currentText = this; ConfigScreenList.currentText = this;
} }
@Override
public boolean keyPressed(int p_231046_1_, int p_231046_2_, int p_231046_3_) {
//prevent input of hex-keys from exiting the current config screen, in case they match the inventory key
boolean ret = false;
switch (p_231046_1_) {
case GLFW.GLFW_KEY_A:
case GLFW.GLFW_KEY_B:
case GLFW.GLFW_KEY_C:
case GLFW.GLFW_KEY_D:
case GLFW.GLFW_KEY_E:
case GLFW.GLFW_KEY_F:
ret = true;
break;
default:
break;
}
if (ret)
return true;
return super.keyPressed(p_231046_1_, p_231046_2_, p_231046_3_);
}
} }

View file

@ -1,6 +1,7 @@
package com.simibubi.create.foundation.config.ui.entries; package com.simibubi.create.foundation.config.ui.entries;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Locale;
import java.util.function.Function; import java.util.function.Function;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -39,7 +40,27 @@ public abstract class NumberEntry<T extends Number> extends ValueEntry<T> {
public NumberEntry(String label, ForgeConfigSpec.ConfigValue<T> value, ForgeConfigSpec.ValueSpec spec) { public NumberEntry(String label, ForgeConfigSpec.ConfigValue<T> value, ForgeConfigSpec.ValueSpec spec) {
super(label, value, spec); super(label, value, spec);
textField = new ConfigTextField(Minecraft.getInstance().font, 0, 0, 200, 20, unit); textField = new ConfigTextField(Minecraft.getInstance().font, 0, 0, 200, 20, unit);
if (this instanceof IntegerEntry && annotations.containsKey("IntDisplay")) {
String intDisplay = annotations.get("IntDisplay");
int intValue = (Integer) getValue();
String textValue;
switch (intDisplay) {
case "#":
textValue = "#" + Integer.toHexString(intValue).toUpperCase(Locale.ROOT);
break;
case "0x":
textValue = "0x" + Integer.toHexString(intValue).toUpperCase(Locale.ROOT);
break;
case "0b":
textValue = "0b" + Integer.toBinaryString(intValue);
break;
default:
textValue = String.valueOf(intValue);
}
textField.setValue(textValue);
} else {
textField.setValue(String.valueOf(getValue())); textField.setValue(String.valueOf(getValue()));
}
textField.setTextColor(Theme.i(Theme.Key.TEXT)); textField.setTextColor(Theme.i(Theme.Key.TEXT));
Object range = spec.getRange(); Object range = spec.getRange();
@ -82,6 +103,7 @@ public abstract class NumberEntry<T extends Number> extends ValueEntry<T> {
} }
}); });
textField.moveCursorToStart();
listeners.add(textField); listeners.add(textField);
onReset(); onReset();
} }
@ -107,11 +129,13 @@ public abstract class NumberEntry<T extends Number> extends ValueEntry<T> {
@Override @Override
public void onValueChange(T newValue) { public void onValueChange(T newValue) {
super.onValueChange(newValue); super.onValueChange(newValue);
String newText = String.valueOf(newValue);
if (textField.getValue().equals(newText))
return;
textField.setValue(newText); try {
T current = getParser().apply(textField.getValue());
if (!current.equals(newValue)) {
textField.setValue(String.valueOf(newValue));
}
} catch (IllegalArgumentException ignored) {}
} }
@Override @Override
@ -161,7 +185,17 @@ public abstract class NumberEntry<T extends Number> extends ValueEntry<T> {
@Override @Override
protected Function<String, Integer> getParser() { protected Function<String, Integer> getParser() {
return Integer::parseInt; return (string) -> {
if (string.startsWith("#")) {
return Integer.parseUnsignedInt(string.substring(1), 16);
} else if (string.startsWith("0x")) {
return Integer.parseUnsignedInt(string.substring(2), 16);
} else if (string.startsWith("0b")) {
return Integer.parseUnsignedInt(string.substring(2), 2);
} else {
return Integer.parseInt(string);
}
};
} }
} }

View file

@ -1,7 +1,9 @@
package com.simibubi.create.foundation.config.ui.entries; package com.simibubi.create.foundation.config.ui.entries;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -30,9 +32,11 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
protected static final IFormattableTextComponent modComponent = new StringTextComponent("* ").withStyle(TextFormatting.BOLD, TextFormatting.DARK_BLUE).append(StringTextComponent.EMPTY.plainCopy().withStyle(TextFormatting.RESET)); protected static final IFormattableTextComponent modComponent = new StringTextComponent("* ").withStyle(TextFormatting.BOLD, TextFormatting.DARK_BLUE).append(StringTextComponent.EMPTY.plainCopy().withStyle(TextFormatting.RESET));
protected static final int resetWidth = 28;//including 6px offset on either side protected static final int resetWidth = 28;//including 6px offset on either side
public static final Pattern unitPattern = Pattern.compile("\\[(in .*)]"); public static final Pattern unitPattern = Pattern.compile("\\[(in .*)]");
public static final Pattern annotationPattern = Pattern.compile("\\[@cui:([^:]*)(?::(.*))?]");
protected ForgeConfigSpec.ConfigValue<T> value; protected ForgeConfigSpec.ConfigValue<T> value;
protected ForgeConfigSpec.ValueSpec spec; protected ForgeConfigSpec.ValueSpec spec;
protected Map<String, String> annotations;
protected BoxWidget resetButton; protected BoxWidget resetButton;
protected boolean editable = true; protected boolean editable = true;
protected String path; protected String path;
@ -53,6 +57,7 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
listeners.add(resetButton); listeners.add(resetButton);
annotations = new HashMap<>();
List<String> path = value.getPath(); List<String> path = value.getPath();
labelTooltip.add(new StringTextComponent(label).withStyle(TextFormatting.WHITE)); labelTooltip.add(new StringTextComponent(label).withStyle(TextFormatting.WHITE));
String comment = spec.getComment(); String comment = spec.getComment();
@ -67,10 +72,19 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
continue; continue;
} }
Matcher matcher = unitPattern.matcher(commentLines[i]); Matcher matcher = annotationPattern.matcher(commentLines[i]);
if (!matcher.matches()) if (matcher.matches()) {
continue; String annotation = matcher.group(1);
String aValue = matcher.group(2);
annotations.putIfAbsent(annotation, aValue);
commentLines = ArrayUtils.remove(commentLines, i);
i--;
continue;
}
matcher = unitPattern.matcher(commentLines[i]);
if (matcher.matches()) {
String u = matcher.group(1); String u = matcher.group(1);
if (u.equals("in Revolutions per Minute")) if (u.equals("in Revolutions per Minute"))
u = "in RPM"; u = "in RPM";
@ -78,6 +92,8 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
u = "in SU"; u = "in SU";
unit = u; unit = u;
} }
}
// add comment to tooltip // add comment to tooltip
labelTooltip.addAll(Arrays.stream(commentLines) labelTooltip.addAll(Arrays.stream(commentLines)
.filter(Predicates.not(s -> s.startsWith("Range"))) .filter(Predicates.not(s -> s.startsWith("Range")))

View file

@ -1,8 +1,12 @@
package com.simibubi.create.foundation.gui; package com.simibubi.create.foundation.gui;
import java.awt.Color; import java.awt.Color;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -11,32 +15,31 @@ import com.simibubi.create.foundation.utility.Couple;
public class Theme { public class Theme {
private static final Theme base = new Theme(); private static final List<Theme> themes = new ArrayList<>();
private static Theme custom = null; private static final Theme base = addTheme(new Theme());
public static void setTheme(@Nullable Theme theme) { public static Theme addTheme(@Nonnull Theme theme) {
custom = theme; themes.add(theme);
themes.sort(Comparator.comparingInt(Theme::getPriority).reversed());
return theme;
}
public static void removeTheme(Theme theme) {
themes.remove(theme);
} }
public static void reload() { public static void reload() {
base.init(); themes.forEach(Theme::init);
if (custom != null)
custom.init();
} }
private static ColorHolder resolve(String key) { private static ColorHolder resolve(String key) {
ColorHolder h = null; return themes
.stream()
if (custom != null) .map(theme -> theme.get(key))
h = custom.get(key); .filter(Objects::nonNull)
.findFirst()
if (h == null) .map(holder -> holder.lookupKey == null ? holder : resolve(holder.lookupKey))
h = base.get(key); .orElse(ColorHolder.missing);
if (h == null)
h = ColorHolder.missing;
return h;
} }
@Nonnull public static Couple<Color> p(@Nonnull Key key) {return p(key.get());} @Nonnull public static Couple<Color> p(@Nonnull Key key) {return p(key.get());}
@ -57,12 +60,20 @@ public class Theme {
//-----------// //-----------//
protected final Map<String, ColorHolder> colors; protected final Map<String, ColorHolder> colors;
private int priority = 0;
protected Theme() { protected Theme() {
colors = new HashMap<>(); colors = new HashMap<>();
init(); init();
} }
/*
* Small note to addons: if you also want to make use of Theme,
* and add new Keys, please do not use mixins. Instead make a Theme
* subclass, override init and apply it via the static #addTheme
*
**/
protected void init() { protected void init() {
put(Key.BUTTON_IDLE, new Color(0xdd_8ab6d6, true), new Color(0x90_8ab6d6, true)); put(Key.BUTTON_IDLE, new Color(0xdd_8ab6d6, true), new Color(0x90_8ab6d6, true));
put(Key.BUTTON_HOVER, new Color(0xff_9ABBD3, true), new Color(0xd0_9ABBD3, true)); put(Key.BUTTON_HOVER, new Color(0xff_9ABBD3, true), new Color(0xd0_9ABBD3, true));
@ -75,6 +86,8 @@ public class Theme {
put(Key.TEXT_ACCENT_STRONG, new Color(0xff_8ab6d6), new Color(0xff_8ab6d6)); put(Key.TEXT_ACCENT_STRONG, new Color(0xff_8ab6d6), new Color(0xff_8ab6d6));
put(Key.TEXT_ACCENT_SLIGHT, new Color(0xff_ddeeff), new Color(0xff_a0b0c0)); put(Key.TEXT_ACCENT_SLIGHT, new Color(0xff_ddeeff), new Color(0xff_a0b0c0));
put(Key.STREAK, new Color(0x101010, false)); put(Key.STREAK, new Color(0x101010, false));
put(Key.VANILLA_TOOLTIP_BORDER, new Color(0x50_5000ff, true), new Color(0x50_28007f, true));
put(Key.VANILLA_TOOLTIP_BACKGROUND, new Color(0xf0_100010, true));
put(Key.PONDER_BUTTON_IDLE, new Color(0x60_c0c0ff, true), new Color(0x30_c0c0ff, true)); put(Key.PONDER_BUTTON_IDLE, new Color(0x60_c0c0ff, true), new Color(0x30_c0c0ff, true));
put(Key.PONDER_BUTTON_HOVER, new Color(0xf0_c0c0ff, true), new Color(0xa0_c0c0ff, true)); put(Key.PONDER_BUTTON_HOVER, new Color(0xf0_c0c0ff, true), new Color(0xa0_c0c0ff, true));
@ -89,7 +102,8 @@ public class Theme {
put(Key.PONDER_BACK_ARROW, new Color(0xf0aa9999, true), new Color(0x30aa9999, true)); put(Key.PONDER_BACK_ARROW, new Color(0xf0aa9999, true), new Color(0x30aa9999, true));
put(Key.PONDER_PROGRESSBAR, new Color(0x80ffeedd, true), new Color(0x50ffeedd, true)); put(Key.PONDER_PROGRESSBAR, new Color(0x80ffeedd, true), new Color(0x50ffeedd, true));
put(Key.PONDER_MISSING_CREATE, new Color(0x70_984500, true), new Color(0x70_692400, true)); put(Key.PONDER_MISSING_CREATE, new Color(0x70_984500, true), new Color(0x70_692400, true));
put(Key.PONDER_MISSING_VANILLA, new Color(0x50_5000ff, true), new Color(0x50_300077, true)); //put(Key.PONDER_MISSING_VANILLA, new Color(0x50_5000ff, true), new Color(0x50_300077, true));
lookup(Key.PONDER_MISSING_VANILLA, Key.VANILLA_TOOLTIP_BORDER);
put(Key.CONFIG_TITLE_A, new Color(0xffc69fbc, true), new Color(0xfff6b8bb, true)); put(Key.CONFIG_TITLE_A, new Color(0xffc69fbc, true), new Color(0xfff6b8bb, true));
put(Key.CONFIG_TITLE_B, new Color(0xfff6b8bb, true), new Color(0xfffbf994, true)); put(Key.CONFIG_TITLE_B, new Color(0xfff6b8bb, true), new Color(0xfffbf994, true));
//put(Key., new Color(0x, true), new Color(0x, true)); //put(Key., new Color(0x, true), new Color(0x, true));
@ -111,10 +125,23 @@ public class Theme {
put(key.get(), c1 , c2); put(key.get(), c1 , c2);
} }
protected void lookup(Key key, Key source) {
colors.put(key.get(), ColorHolder.lookup(source.get()));
}
@Nullable protected ColorHolder get(String key) { @Nullable protected ColorHolder get(String key) {
return colors.get(key); return colors.get(key);
} }
public int getPriority() {
return priority;
}
public Theme setPriority(int priority) {
this.priority = priority;
return this;
}
public static class Key { public static class Key {
public static Key BUTTON_IDLE = new Key(); public static Key BUTTON_IDLE = new Key();
@ -130,6 +157,8 @@ public class Theme {
public static Key TEXT_ACCENT_SLIGHT = new Key(); public static Key TEXT_ACCENT_SLIGHT = new Key();
public static Key STREAK = new Key(); public static Key STREAK = new Key();
public static Key VANILLA_TOOLTIP_BORDER = new Key();
public static Key VANILLA_TOOLTIP_BACKGROUND = new Key();
public static Key PONDER_BACKGROUND_TRANSPARENT = new Key(); public static Key PONDER_BACKGROUND_TRANSPARENT = new Key();
public static Key PONDER_BACKGROUND_FLAT = new Key(); public static Key PONDER_BACKGROUND_FLAT = new Key();
@ -172,6 +201,7 @@ public class Theme {
private static final ColorHolder missing = ColorHolder.single(Color.BLACK); private static final ColorHolder missing = ColorHolder.single(Color.BLACK);
private Couple<Color> colors; private Couple<Color> colors;
private String lookupKey;
private static ColorHolder single(Color c) { private static ColorHolder single(Color c) {
ColorHolder h = new ColorHolder(); ColorHolder h = new ColorHolder();
@ -185,6 +215,12 @@ public class Theme {
return h; return h;
} }
private static ColorHolder lookup(String key) {
ColorHolder h = new ColorHolder();
h.lookupKey = key;
return h;
}
private Color get() { private Color get() {
return colors.getFirst(); return colors.getFirst();
} }