From d38d7f59aa4e1aac45a97dd1f7a4056478b00994 Mon Sep 17 00:00:00 2001 From: Mathieu Moran Date: Tue, 15 Sep 2026 23:35:40 -0400 Subject: [PATCH] Render focused button's focus image in the menu Buttons with a focus image now swap to it while selected, giving visible feedback when navigating with the arrow keys. --- core/src/main/java/dev/quoije/umd/rco/IDisplay.java | 5 +++++ .../main/java/dev/quoije/umd/rco/object/ButtonObject.java | 5 +++++ ui/src/main/java/dev/quoije/umd/ui/RcoRenderer.java | 7 ++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/dev/quoije/umd/rco/IDisplay.java b/core/src/main/java/dev/quoije/umd/rco/IDisplay.java index c343ef2..b0a677e 100644 --- a/core/src/main/java/dev/quoije/umd/rco/IDisplay.java +++ b/core/src/main/java/dev/quoije/umd/rco/IDisplay.java @@ -8,6 +8,11 @@ public interface IDisplay { Object getAnimImage(); + /** The image shown while this object has input focus, or {@code null}. */ + default Object getFocusImage() { + return null; + } + int getX(); int getY(); diff --git a/core/src/main/java/dev/quoije/umd/rco/object/ButtonObject.java b/core/src/main/java/dev/quoije/umd/rco/object/ButtonObject.java index 4e1fb65..acf5339 100644 --- a/core/src/main/java/dev/quoije/umd/rco/object/ButtonObject.java +++ b/core/src/main/java/dev/quoije/umd/rco/object/ButtonObject.java @@ -29,6 +29,11 @@ public class ButtonObject extends BasePositionObject { return image.getImage(); } + @Override + public Object getFocusImage() { + return focus.getImage(); + } + @Override public void setFocus() { trigger(onFocusIn); diff --git a/ui/src/main/java/dev/quoije/umd/ui/RcoRenderer.java b/ui/src/main/java/dev/quoije/umd/ui/RcoRenderer.java index e14ed28..e6c3788 100644 --- a/ui/src/main/java/dev/quoije/umd/ui/RcoRenderer.java +++ b/ui/src/main/java/dev/quoije/umd/ui/RcoRenderer.java @@ -112,7 +112,12 @@ public final class RcoRenderer implements Display { } private void draw(GraphicsContext g, IDisplay display) { - Image image = decode(display.getImage()); + Object source = display.getImage(); + if (display == focus && display.getFocusImage() != null) { + source = display.getFocusImage(); + } + + Image image = decode(source); if (image == null) { return; }