Make background color of panel components configurable (#11619)

This commit is contained in:
TheStonedTurtle
2020-05-20 08:54:31 -07:00
committed by GitHub
parent 6208c3bee5
commit 794fba7176
5 changed files with 60 additions and 6 deletions

View File

@@ -24,12 +24,14 @@
*/ */
package net.runelite.client.config; package net.runelite.client.config;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import net.runelite.api.Constants; import net.runelite.api.Constants;
import net.runelite.client.Notifier; import net.runelite.client.Notifier;
import net.runelite.client.ui.ContainableFrame; import net.runelite.client.ui.ContainableFrame;
import net.runelite.client.ui.overlay.components.ComponentConstants;
@ConfigGroup(RuneLiteConfig.GROUP_NAME) @ConfigGroup(RuneLiteConfig.GROUP_NAME)
public interface RuneLiteConfig extends Config public interface RuneLiteConfig extends Config
@@ -280,11 +282,23 @@ public interface RuneLiteConfig extends Config
return 35; return 35;
} }
@ConfigItem(
keyName = "overlayBackgroundColor",
name = "Overlay Color",
description = "Configures the background color of infoboxes and overlays",
position = 43
)
@Alpha
default Color overlayBackgroundColor()
{
return ComponentConstants.STANDARD_BACKGROUND_COLOR;
}
@ConfigItem( @ConfigItem(
keyName = "blockExtraMouseButtons", keyName = "blockExtraMouseButtons",
name = "Block Extra Mouse Buttons", name = "Block Extra Mouse Buttons",
description = "Blocks extra mouse buttons (4 and above)", description = "Blocks extra mouse buttons (4 and above)",
position = 43 position = 44
) )
default boolean blockExtraMouseButtons() default boolean blockExtraMouseButtons()
{ {
@@ -295,7 +309,7 @@ public interface RuneLiteConfig extends Config
keyName = "sidebarToggleKey", keyName = "sidebarToggleKey",
name = "Sidebar Toggle Key", name = "Sidebar Toggle Key",
description = "The key that will toggle the sidebar (accepts modifiers)", description = "The key that will toggle the sidebar (accepts modifiers)",
position = 44 position = 45
) )
default Keybind sidebarToggleKey() default Keybind sidebarToggleKey()
{ {
@@ -306,7 +320,7 @@ public interface RuneLiteConfig extends Config
keyName = "panelToggleKey", keyName = "panelToggleKey",
name = "Plugin Panel Toggle Key", name = "Plugin Panel Toggle Key",
description = "The key that will toggle the current or last opened plugin panel (accepts modifiers)", description = "The key that will toggle the current or last opened plugin panel (accepts modifiers)",
position = 45 position = 46
) )
default Keybind panelToggleKey() default Keybind panelToggleKey()
{ {

View File

@@ -47,6 +47,7 @@ import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.events.OverlayMenuClicked;
import net.runelite.client.events.PluginChanged; import net.runelite.client.events.PluginChanged;
@@ -104,12 +105,25 @@ public class OverlayManager
private final ConfigManager configManager; private final ConfigManager configManager;
private final EventBus eventBus; private final EventBus eventBus;
private final RuneLiteConfig runeLiteConfig;
@Inject @Inject
private OverlayManager(final ConfigManager configManager, final EventBus eventBus) private OverlayManager(final ConfigManager configManager, final EventBus eventBus, final RuneLiteConfig runeLiteConfig)
{ {
this.configManager = configManager; this.configManager = configManager;
this.eventBus = eventBus; this.eventBus = eventBus;
this.runeLiteConfig = runeLiteConfig;
}
@Subscribe
public void onConfigChanged(final ConfigChanged event)
{
if (!RuneLiteConfig.GROUP_NAME.equals(event.getGroup()) || !"overlayBackgroundColor".equals(event.getKey()))
{
return;
}
overlays.forEach(this::updateOverlayConfig);
} }
@Subscribe @Subscribe
@@ -171,12 +185,15 @@ public class OverlayManager
// Add is always true // Add is always true
overlays.add(overlay); overlays.add(overlay);
loadOverlay(overlay); loadOverlay(overlay);
updateOverlayConfig(overlay);
// WidgetItemOverlays have a reference to the overlay manager in order to get the WidgetItems // WidgetItemOverlays have a reference to the overlay manager in order to get the WidgetItems
// for each frame. // for each frame.
if (overlay instanceof WidgetItemOverlay) if (overlay instanceof WidgetItemOverlay)
{ {
((WidgetItemOverlay) overlay).setOverlayManager(this); ((WidgetItemOverlay) overlay).setOverlayManager(this);
} }
rebuildOverlayLayers(); rebuildOverlayLayers();
return true; return true;
} }
@@ -304,6 +321,15 @@ public class OverlayManager
overlay.setPreferredPosition(position); overlay.setPreferredPosition(position);
} }
private void updateOverlayConfig(final Overlay overlay)
{
if (overlay instanceof OverlayPanel)
{
// Update preferred color for overlay panels based on configuration
((OverlayPanel) overlay).setPreferredColor(runeLiteConfig.overlayBackgroundColor());
}
}
private void saveOverlayLocation(final Overlay overlay) private void saveOverlayLocation(final Overlay overlay)
{ {
final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION;

View File

@@ -24,6 +24,7 @@
*/ */
package net.runelite.client.ui.overlay; package net.runelite.client.ui.overlay;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import lombok.Getter; import lombok.Getter;
@@ -49,6 +50,11 @@ public abstract class OverlayPanel extends Overlay
*/ */
private boolean dynamicFont = false; private boolean dynamicFont = false;
/**
* Preferred color used for panel component background
*/
private Color preferredColor = null;
protected OverlayPanel() protected OverlayPanel()
{ {
super(); super();
@@ -83,6 +89,13 @@ public abstract class OverlayPanel extends Overlay
} }
} }
final Color oldBackgroundColor = panelComponent.getBackgroundColor();
if (getPreferredColor() != null && ComponentConstants.STANDARD_BACKGROUND_COLOR.equals(oldBackgroundColor))
{
panelComponent.setBackgroundColor(getPreferredColor());
}
final Dimension dimension = panelComponent.render(graphics); final Dimension dimension = panelComponent.render(graphics);
if (clearChildren) if (clearChildren)
@@ -91,6 +104,7 @@ public abstract class OverlayPanel extends Overlay
} }
panelComponent.setPreferredSize(oldSize); panelComponent.setPreferredSize(oldSize);
panelComponent.setBackgroundColor(oldBackgroundColor);
return dimension; return dimension;
} }
} }

View File

@@ -31,7 +31,6 @@ import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.annotation.Nullable;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -48,7 +47,7 @@ public class PanelComponent implements LayoutableRenderableEntity
private Dimension preferredSize = new Dimension(ComponentConstants.STANDARD_WIDTH, 0); private Dimension preferredSize = new Dimension(ComponentConstants.STANDARD_WIDTH, 0);
@Setter @Setter
@Nullable @Getter
private Color backgroundColor = ComponentConstants.STANDARD_BACKGROUND_COLOR; private Color backgroundColor = ComponentConstants.STANDARD_BACKGROUND_COLOR;
@Getter @Getter

View File

@@ -111,6 +111,7 @@ public class InfoBoxOverlay extends OverlayPanel
infoBoxComponent.setImage(box.getScaledImage()); infoBoxComponent.setImage(box.getScaledImage());
infoBoxComponent.setTooltip(box.getTooltip()); infoBoxComponent.setTooltip(box.getTooltip());
infoBoxComponent.setPreferredSize(new Dimension(config.infoBoxSize(), config.infoBoxSize())); infoBoxComponent.setPreferredSize(new Dimension(config.infoBoxSize(), config.infoBoxSize()));
infoBoxComponent.setBackgroundColor(config.overlayBackgroundColor());
panelComponent.getChildren().add(infoBoxComponent); panelComponent.getChildren().add(infoBoxComponent);
} }