From 4b000363694ef619b2fd4e5eff598f23a9b657a8 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Tue, 16 Dec 2025 18:37:58 +0100 Subject: [PATCH] Refactor graphics handling by renaming Graphics to GraphicsContext and introducing WindowService for menubar management --- .../be/seeseemelk/diceos/system/DiceOS.java | 16 ++++------ .../diceos/system/WindowService.java | 30 ++++++++++++++++++ .../diceos/system/gfx/Graphics.java | 17 ---------- .../diceos/system/gfx/GraphicsContext.java | 16 ++++++++++ .../diceos/system/gfx/GraphicsFactory.java | 2 +- .../diceos/system/toolkit/Menubar.java | 16 ++++++++++ src/main/resources/system/dice.png | Bin 0 -> 240 bytes 7 files changed, 69 insertions(+), 28 deletions(-) create mode 100644 src/main/java/be/seeseemelk/diceos/system/WindowService.java delete mode 100644 src/main/java/be/seeseemelk/diceos/system/gfx/Graphics.java create mode 100644 src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsContext.java create mode 100644 src/main/java/be/seeseemelk/diceos/system/toolkit/Menubar.java create mode 100644 src/main/resources/system/dice.png diff --git a/src/main/java/be/seeseemelk/diceos/system/DiceOS.java b/src/main/java/be/seeseemelk/diceos/system/DiceOS.java index 22f8b9a..245d2d7 100644 --- a/src/main/java/be/seeseemelk/diceos/system/DiceOS.java +++ b/src/main/java/be/seeseemelk/diceos/system/DiceOS.java @@ -1,9 +1,9 @@ package be.seeseemelk.diceos.system; +import be.seeseemelk.diceos.system.gfx.GraphicsContext; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.NinePatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.ScreenUtils; import com.badlogic.gdx.utils.viewport.ScreenViewport; @@ -21,22 +21,22 @@ public class DiceOS extends ApplicationAdapter { private final ResourceLoader resourceLoader; private final DisplayService display; private final CursorService cursorService; + private final WindowService windowService; private final List startupTasks; private Texture clouds; private Texture border; - private NinePatch menubar; private Viewport vmViewport; private Viewport screenViewport; private int scaling = 1; private int offsetX = 0; private int offsetY = 0; + private GraphicsContext gc; @Override public void create() { log.info("DiceOS starting..."); clouds = resourceLoader.loadTexture("backgrounds/clouds.png"); border = resourceLoader.loadTexture("system/border.png"); - loadMenubar(); screenViewport = new ScreenViewport(); vmViewport = new ScreenViewport(); @@ -50,11 +50,6 @@ public class DiceOS extends ApplicationAdapter { log.info("DiceOS started!"); } - private void loadMenubar() { - var texture = resourceLoader.loadTexture("system/menubar.png"); - menubar = new NinePatch(texture, 9, 9, 15, 1); - } - @Override public void resize(int width, int height) { screenViewport.update(width, height, true); @@ -66,6 +61,8 @@ public class DiceOS extends ApplicationAdapter { offsetY = (height - (displayHeight * scaling)) / 2; cursorService.setScale(scaling); + + gc = new GraphicsContext(display.getBatch(), displayHeight, displayWidth); } @Override @@ -83,8 +80,7 @@ public class DiceOS extends ApplicationAdapter { // Render background display.draw(clouds, 0, 0); - // Render menubar - menubar.draw(display.getBatch(), 0, display.getHeight() - 16, display.getWidth(), 16); + windowService.paint(gc); // Render borders var param = new DisplayService.Parameters(); diff --git a/src/main/java/be/seeseemelk/diceos/system/WindowService.java b/src/main/java/be/seeseemelk/diceos/system/WindowService.java new file mode 100644 index 0000000..c74236f --- /dev/null +++ b/src/main/java/be/seeseemelk/diceos/system/WindowService.java @@ -0,0 +1,30 @@ +package be.seeseemelk.diceos.system; + +import be.seeseemelk.diceos.system.gfx.GraphicsContext; +import be.seeseemelk.diceos.system.toolkit.Menubar; +import com.badlogic.gdx.graphics.g2d.NinePatch; +import io.avaje.inject.Component; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Component +public class WindowService implements OnStartup { + private final ResourceLoader resourceLoader; + private NinePatch menubar; + private Menubar systemMenubar; + + @Override + public void onStartup() { + var texture = resourceLoader.loadTexture("system/menubar.png"); + menubar = new NinePatch(texture, 9, 9, 15, 1); + + systemMenubar = new Menubar() + .addItem("Dice") + .addItem("System"); + } + + void paint(GraphicsContext gc) { + // Render menubar + menubar.draw(gc.getBatch(), 0, gc.getHeight() - 16, gc.getWidth(), 16); + } +} diff --git a/src/main/java/be/seeseemelk/diceos/system/gfx/Graphics.java b/src/main/java/be/seeseemelk/diceos/system/gfx/Graphics.java deleted file mode 100644 index 415eddf..0000000 --- a/src/main/java/be/seeseemelk/diceos/system/gfx/Graphics.java +++ /dev/null @@ -1,17 +0,0 @@ -package be.seeseemelk.diceos.system.gfx; - -import io.avaje.inject.AssistFactory; -import lombok.RequiredArgsConstructor; - -/** - * Graphics context and rendering utilities. - */ -@RequiredArgsConstructor -@AssistFactory(GraphicsFactory.class) -public class Graphics { -// private final -// -// public void begin() { -// -// } -} diff --git a/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsContext.java b/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsContext.java new file mode 100644 index 0000000..e117966 --- /dev/null +++ b/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsContext.java @@ -0,0 +1,16 @@ +package be.seeseemelk.diceos.system.gfx; + +import com.badlogic.gdx.graphics.g2d.Batch; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * Graphics context and rendering utilities. + */ +@Getter +@RequiredArgsConstructor +public class GraphicsContext { + private final Batch batch; + private final int height; + private final int width; +} diff --git a/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsFactory.java b/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsFactory.java index 5fbb67e..aba54e4 100644 --- a/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsFactory.java +++ b/src/main/java/be/seeseemelk/diceos/system/gfx/GraphicsFactory.java @@ -1,5 +1,5 @@ package be.seeseemelk.diceos.system.gfx; public interface GraphicsFactory { - Graphics create(); + GraphicsContext create(); } diff --git a/src/main/java/be/seeseemelk/diceos/system/toolkit/Menubar.java b/src/main/java/be/seeseemelk/diceos/system/toolkit/Menubar.java new file mode 100644 index 0000000..5b44b47 --- /dev/null +++ b/src/main/java/be/seeseemelk/diceos/system/toolkit/Menubar.java @@ -0,0 +1,16 @@ +package be.seeseemelk.diceos.system.toolkit; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +public class Menubar { + @Getter + private final List items = new ArrayList<>(); + + public Menubar addItem(String item) { + items.add(item); + return this; + } +} diff --git a/src/main/resources/system/dice.png b/src/main/resources/system/dice.png new file mode 100644 index 0000000000000000000000000000000000000000..e4bdd3b0fe236ed40254930b86b0433c1084d576 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@pr;JNj1^1m%YcIHC7!;n>@Rr)cw}Us$WEF96ms))aSX9Iot&^hz(8r^|H+G| z3wEcuF-ZkpF?v{VvEHQhM2!gd3=LjpF{MLn>$hu^F$&LX_|@NTFU5AHgz>27%tvQj a3>g^mE(nSL=+p=Kgu&C*&t;ucLK6Vu075AM literal 0 HcmV?d00001