From 77f8b7924ad61ebb8334d37a0a2ae2c8a297b400 Mon Sep 17 00:00:00 2001 From: nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> Date: Wed, 4 May 2022 18:36:37 +0100 Subject: change some files and start on scrolling --- .../polyfrost/oneconfig/lwjgl/scissor/Scissor.java | 22 ++++++++++++ .../oneconfig/lwjgl/scissor/ScissorManager.java | 41 ++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/Scissor.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/ScissorManager.java (limited to 'src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor') diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/Scissor.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/Scissor.java new file mode 100644 index 0000000..9523865 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/Scissor.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.lwjgl.scissor; + +public class Scissor { + public float x; + public float y; + public float width; + public float height; + + public Scissor(float x, float y, float width, float height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public Scissor(Scissor scissor) { + this.x = scissor.x; + this.y = scissor.y; + this.width = scissor.width; + this.height = scissor.height; + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/ScissorManager.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/ScissorManager.java new file mode 100644 index 0000000..a3f3780 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/ScissorManager.java @@ -0,0 +1,41 @@ +package cc.polyfrost.oneconfig.lwjgl.scissor; + +import cc.polyfrost.oneconfig.lwjgl.scissor.Scissor; +import org.lwjgl.nanovg.NanoVG; + +import java.util.ArrayList; + +public class ScissorManager { + private static final ArrayList scissors = new ArrayList<>(); + + public static Scissor scissor(long vg, float x, float y, float width, float height) { + Scissor scissor = new Scissor(x, y, width, height); + if (scissors.contains(scissor)) return scissor; + scissors.add(scissor); + applyScissors(vg); + return scissor; + } + + public static void resetScissor(long vg, Scissor scissor) { + if (scissors.contains(scissor)) { + scissors.remove(scissor); + applyScissors(vg); + } + } + + private static void applyScissors(long vg) { + NanoVG.nvgResetScissor(vg); + if (scissors.size() <= 0) return; + Scissor finalScissor = new Scissor(scissors.get(0)); + for (int i = 1; i < scissors.size(); i++) { + Scissor scissor = scissors.get(i); + float rightX = Math.min(scissor.x + scissor.width, finalScissor.x + finalScissor.width); + float rightY = Math.min(scissor.y + scissor.height, finalScissor.y + finalScissor.height); + finalScissor.x = Math.max(finalScissor.x, scissor.x); + finalScissor.y = Math.max(finalScissor.y, scissor.y); + finalScissor.width = rightX - finalScissor.x; + finalScissor.height = rightY - finalScissor.y; + } + NanoVG.nvgScissor(vg, finalScissor.x, finalScissor.y, finalScissor.width, finalScissor.height); + } +} -- cgit