diff options
| author | nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> | 2022-05-04 18:36:37 +0100 |
|---|---|---|
| committer | nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> | 2022-05-04 18:36:37 +0100 |
| commit | 77f8b7924ad61ebb8334d37a0a2ae2c8a297b400 (patch) | |
| tree | 0f36b3509e4a2e20853996ce6e4a86b4fbc39c90 /src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor | |
| parent | 74b42fa8a490b4226ca1a331fcddb22af149d217 (diff) | |
| download | OneConfig-77f8b7924ad61ebb8334d37a0a2ae2c8a297b400.tar.gz OneConfig-77f8b7924ad61ebb8334d37a0a2ae2c8a297b400.tar.bz2 OneConfig-77f8b7924ad61ebb8334d37a0a2ae2c8a297b400.zip | |
change some files and start on scrolling
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor')
| -rw-r--r-- | src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/Scissor.java | 22 | ||||
| -rw-r--r-- | src/main/java/cc/polyfrost/oneconfig/lwjgl/scissor/ScissorManager.java | 41 |
2 files changed, 63 insertions, 0 deletions
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<Scissor> 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); + } +} |
