diff --git a/src/main/java/be/seeseemelk/diceos/DiceOS.java b/src/main/java/be/seeseemelk/diceos/DiceOS.java index c919648..8ee3b47 100644 --- a/src/main/java/be/seeseemelk/diceos/DiceOS.java +++ b/src/main/java/be/seeseemelk/diceos/DiceOS.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.utils.ScreenUtils; -import com.badlogic.gdx.utils.viewport.FillViewport; +import com.badlogic.gdx.utils.viewport.ScreenViewport; import com.badlogic.gdx.utils.viewport.Viewport; import io.avaje.inject.Component; import lombok.RequiredArgsConstructor; @@ -22,14 +22,22 @@ public class DiceOS extends ApplicationAdapter { private final List startupTasks; private Texture background; private Texture border; - private Viewport viewport; + private Viewport vmViewport; + private Viewport screenViewport; + private int stretchFactor = 1; + private int offsetX = 0; + private int offsetY = 0; @Override public void create() { log.info("DiceOS starting..."); background = new Texture("src/main/resources/background.png"); border = new Texture("src/main/resources/border.png"); - viewport = new FillViewport(2, 2); + + screenViewport = new ScreenViewport(); + vmViewport = new ScreenViewport(); + vmViewport.update(display.getWidth(), display.getHeight(), true); + for (var task : startupTasks) { task.onStartup(); @@ -38,11 +46,23 @@ public class DiceOS extends ApplicationAdapter { log.info("DiceOS started!"); } + @Override + public void resize(int width, int height) { + screenViewport.update(width, height, true); + + int displayWidth = display.getWidth(); + int displayHeight = display.getHeight(); + stretchFactor = Math.min(width / displayWidth, height / displayHeight); + offsetX = (width - (displayWidth * stretchFactor)) / 2; + offsetY = (height - (displayHeight * stretchFactor)) / 2; + } + @Override public void render() { + ScreenUtils.clear(Color.BLACK); + vmViewport.apply(); display.getScreenBuffer().begin(); - viewport.apply(); - display.getBatch().setProjectionMatrix(viewport.getCamera().combined); + display.getBatch().setProjectionMatrix(vmViewport.getCamera().combined); display.getBatch().begin(); ScreenUtils.clear(Color.GREEN); @@ -65,9 +85,11 @@ public class DiceOS extends ApplicationAdapter { display.getBatch().end(); display.getScreenBuffer().end(); + screenViewport.apply(); + display.getBatch().setProjectionMatrix(screenViewport.getCamera().combined); display.getBatch().begin(); display.getBatch().draw(display.getScreenBuffer().getColorBufferTexture(), - 0, 0); + offsetX, offsetY, display.getWidth() * stretchFactor, display.getHeight() * stretchFactor); display.getBatch().end(); } } diff --git a/src/main/java/be/seeseemelk/diceos/system/DisplayService.java b/src/main/java/be/seeseemelk/diceos/system/DisplayService.java index d5baa05..346137c 100644 --- a/src/main/java/be/seeseemelk/diceos/system/DisplayService.java +++ b/src/main/java/be/seeseemelk/diceos/system/DisplayService.java @@ -22,6 +22,7 @@ public class DisplayService implements OnStartup { @Override public void onStartup() { screenBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, getWidth(), getHeight(), false); + screenBuffer.getColorBufferTexture().setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest); batch = new SpriteBatch(); }