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; }