diff --git a/src/main/java/org/saturnclient/ui/ElementRenderer.java b/src/main/java/org/saturnclient/ui/ElementRenderer.java index fb85aca..07d26cc 100644 --- a/src/main/java/org/saturnclient/ui/ElementRenderer.java +++ b/src/main/java/org/saturnclient/ui/ElementRenderer.java @@ -1,27 +1,92 @@ package org.saturnclient.ui; +import java.util.ArrayList; import java.util.List; -public abstract class ElementRenderer { - public static ElementRenderer INSTANCE; +public class ElementRenderer { + public static void draw(List elements, Element element) { + synchronized (elements) { + elements.add(element); + } - public abstract void draw(List elements, Element element); + if (element.animation != null) { + element.animation.init(element); + } + } - public abstract void render(List elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY); + public static void render(List elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY) { + for (Element element : elements) { + element.playAnimationFrame(elapsed); - public abstract void mouseClicked(List elements, double mouseX, double mouseY, int button); + renderScope.getMatrixStack().push(); + renderScope.setOpacity(element.opacity); + renderScope.getMatrixStack().translate(element.x, element.y, 0); + renderScope.getMatrixStack().scale(element.scale, element.scale, 1.0f); + element.render(renderScope, new ElementContext(elapsed, mouseX, mouseY, element)); + renderScope.getMatrixStack().pop(); + } + } - public abstract void mouseScrolled( + public static void mouseClicked(List elements, double mouseX, double mouseY, int button) { + if (button == 0) { + for (Element element : new ArrayList<>(elements)) { + element.focused = false; + + int adjustedMouseX = (int) mouseX - element.x; + int adjustedMouseY = (int) mouseY - element.y; + + element.mouseClicked(adjustedMouseX * element.scale, adjustedMouseY * element.scale, button); + + if (element.opacity > 0 && Utils.isHovering(adjustedMouseX, adjustedMouseY, element.width, + element.height, element.scale)) { + element.focused = true; + element.click((int) (adjustedMouseX * element.scale), (int) (adjustedMouseY * element.scale)); + } + } + } + } + + public static void mouseScrolled( List elements, double mouseX, double mouseY, double horizontalAmount, - double verticalAmount); + double verticalAmount) { + for (Element element : new ArrayList<>(elements)) { + if (Utils.isHovering((int) mouseX - element.x, (int) mouseY - element.y, element.width, element.height, + element.scale)) { + element.scroll( + (int) mouseX - element.x, + (int) mouseY - element.y, + horizontalAmount, + verticalAmount); + } + } + } - public abstract void keyPressed(List elements, int keyCode, int scanCode, int modifiers); + public static void keyPressed(List elements, int keyCode, int scanCode, int modifiers) { + for (Element element : new ArrayList<>(elements)) { + if (element.focused && element.opacity > 0) { + element.keyPressed(keyCode, scanCode, modifiers); - public abstract void mouseDragged(List elements, double mouseX, double mouseY, int button, double deltaX, - double deltaY); + char typedChar = Utils.getCharFromKey(keyCode, modifiers); + if (typedChar != '\0') { + element.charTyped(typedChar); + } + } + } + } - public abstract void mouseReleased(List elements, double mouseX, double mouseY, int button); + public static void mouseDragged(List elements, double mouseX, double mouseY, int button, double deltaX, + double deltaY) { + for (Element element : new ArrayList<>(elements)) { + element.mouseDragged(mouseX - element.x, mouseY - element.y, button, deltaX, deltaY); + } + } + + public static void mouseReleased(List elements, double mouseX, double mouseY, int button) { + for (Element element : new ArrayList<>(elements)) { + element.mouseReleased(mouseX - element.x, mouseY - element.y, button); + } + } } diff --git a/src/main/java/org/saturnclient/ui/SaturnScreen.java b/src/main/java/org/saturnclient/ui/SaturnScreen.java index 991c25b..bc27716 100644 --- a/src/main/java/org/saturnclient/ui/SaturnScreen.java +++ b/src/main/java/org/saturnclient/ui/SaturnScreen.java @@ -41,7 +41,7 @@ public abstract class SaturnScreen { public abstract void ui(); public void draw(Element element) { - ElementRenderer.INSTANCE.draw(elements, element); + ElementRenderer.draw(elements, element); } // -------------- @@ -53,7 +53,7 @@ public abstract class SaturnScreen { renderScope.getMatrixStack().scale(0.5f, 0.5f, 0.5f); - ElementRenderer.INSTANCE.render(new ArrayList<>(elements), elapsed, renderScope, mouseX, mouseY); + ElementRenderer.render(new ArrayList<>(elements), elapsed, renderScope, mouseX, mouseY); renderScope.getMatrixStack().pop(); } @@ -66,7 +66,7 @@ public abstract class SaturnScreen { mouseX *= 2; mouseY *= 2; - ElementRenderer.INSTANCE.mouseClicked(elements, mouseX, mouseY, button); + ElementRenderer.mouseClicked(elements, mouseX, mouseY, button); return false; } @@ -75,7 +75,7 @@ public abstract class SaturnScreen { mouseX *= 2; mouseY *= 2; - ElementRenderer.INSTANCE.mouseDragged(elements, mouseX, mouseY, button, deltaX, deltaY); + ElementRenderer.mouseDragged(elements, mouseX, mouseY, button, deltaX, deltaY); return false; } @@ -84,7 +84,7 @@ public abstract class SaturnScreen { mouseX *= 2; mouseY *= 2; - ElementRenderer.INSTANCE.mouseReleased(elements, mouseX, mouseY, button); + ElementRenderer.mouseReleased(elements, mouseX, mouseY, button); return false; } @@ -97,7 +97,7 @@ public abstract class SaturnScreen { mouseX *= 2; mouseY *= 2; - ElementRenderer.INSTANCE.mouseScrolled(elements, mouseX, mouseY, horizontalAmount, verticalAmount); + ElementRenderer.mouseScrolled(elements, mouseX, mouseY, horizontalAmount, verticalAmount); return false; } @@ -107,7 +107,7 @@ public abstract class SaturnScreen { } public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - ElementRenderer.INSTANCE.keyPressed(elements, keyCode, scanCode, modifiers); + ElementRenderer.keyPressed(elements, keyCode, scanCode, modifiers); return false; } diff --git a/src/main/java/org/saturnclient/ui/components/ElementRendererImpl.java b/src/main/java/org/saturnclient/ui/components/ElementRendererImpl.java deleted file mode 100644 index ad664d8..0000000 --- a/src/main/java/org/saturnclient/ui/components/ElementRendererImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.saturnclient.ui.components; - -import java.util.ArrayList; -import java.util.List; - -import org.saturnclient.ui.Element; -import org.saturnclient.ui.ElementContext; -import org.saturnclient.ui.ElementRenderer; -import org.saturnclient.ui.RenderScope; -import org.saturnclient.ui.Utils; - -public class ElementRendererImpl extends ElementRenderer { - public void draw(List elements, Element element) { - synchronized (elements) { - elements.add(element); - } - - if (element.animation != null) { - element.animation.init(element); - } - } - - public void render(List elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY) { - for (Element element : elements) { - element.playAnimationFrame(elapsed); - - renderScope.getMatrixStack().push(); - renderScope.setOpacity(element.opacity); - renderScope.getMatrixStack().translate(element.x, element.y, 0); - renderScope.getMatrixStack().scale(element.scale, element.scale, 1.0f); - element.render(renderScope, new ElementContext(elapsed, mouseX, mouseY, element)); - renderScope.getMatrixStack().pop(); - } - } - - public void mouseClicked(List elements, double mouseX, double mouseY, int button) { - if (button == 0) { - for (Element element : new ArrayList<>(elements)) { - element.focused = false; - - int adjustedMouseX = (int) mouseX - element.x; - int adjustedMouseY = (int) mouseY - element.y; - - element.mouseClicked(adjustedMouseX * element.scale, adjustedMouseY * element.scale, button); - - if (element.opacity > 0 && Utils.isHovering(adjustedMouseX, adjustedMouseY, element.width, - element.height, element.scale)) { - element.focused = true; - element.click((int) (adjustedMouseX * element.scale), (int) (adjustedMouseY * element.scale)); - } - } - } - } - - public void mouseScrolled( - List elements, - double mouseX, - double mouseY, - double horizontalAmount, - double verticalAmount) { - for (Element element : new ArrayList<>(elements)) { - if (Utils.isHovering((int) mouseX - element.x, (int) mouseY - element.y, element.width, element.height, - element.scale)) { - element.scroll( - (int) mouseX - element.x, - (int) mouseY - element.y, - horizontalAmount, - verticalAmount); - } - } - } - - public void keyPressed(List elements, int keyCode, int scanCode, int modifiers) { - for (Element element : new ArrayList<>(elements)) { - if (element.focused && element.opacity > 0) { - element.keyPressed(keyCode, scanCode, modifiers); - - char typedChar = Utils.getCharFromKey(keyCode, modifiers); - if (typedChar != '\0') { - element.charTyped(typedChar); - } - } - } - } - - public void mouseDragged(List elements, double mouseX, double mouseY, int button, double deltaX, - double deltaY) { - for (Element element : new ArrayList<>(elements)) { - element.mouseDragged(mouseX - element.x, mouseY - element.y, button, deltaX, deltaY); - } - } - - public void mouseReleased(List elements, double mouseX, double mouseY, int button) { - for (Element element : new ArrayList<>(elements)) { - element.mouseReleased(mouseX - element.x, mouseY - element.y, button); - } - } -} diff --git a/src/main/java/org/saturnclient/ui/elements/AnimationStagger.java b/src/main/java/org/saturnclient/ui/elements/AnimationStagger.java index 3226e0f..0a8f123 100644 --- a/src/main/java/org/saturnclient/ui/elements/AnimationStagger.java +++ b/src/main/java/org/saturnclient/ui/elements/AnimationStagger.java @@ -31,7 +31,7 @@ public class AnimationStagger extends Element { element.animation.delay = delay * children.size(); } - ElementRenderer.INSTANCE.draw(children, element); + ElementRenderer.draw(children, element); this.height = Math.max(this.height, element.y + element.height); this.width = Math.max(this.width, element.x + element.width); @@ -39,28 +39,28 @@ public class AnimationStagger extends Element { @Override public void render(RenderScope renderScope, ElementContext ctx) { - ElementRenderer.INSTANCE.render(children, ctx.elapsed, renderScope, + ElementRenderer.render(children, ctx.elapsed, renderScope, ctx.mouseX, ctx.mouseY); } @Override public void mouseClicked(double mouseX, double mouseY, int button) { - ElementRenderer.INSTANCE.mouseClicked(children, mouseX, mouseY, button); + ElementRenderer.mouseClicked(children, mouseX, mouseY, button); } @Override public void keyPressed(int keyCode, int scanCode, int modifiers) { - ElementRenderer.INSTANCE.keyPressed(children, keyCode, scanCode, modifiers); + ElementRenderer.keyPressed(children, keyCode, scanCode, modifiers); } @Override public void mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - ElementRenderer.INSTANCE.mouseDragged(children, mouseX, mouseY, button, deltaX, deltaY); + ElementRenderer.mouseDragged(children, mouseX, mouseY, button, deltaX, deltaY); } @Override public void mouseReleased(double mouseX, double mouseY, int button) { - ElementRenderer.INSTANCE.mouseReleased(children, mouseX, mouseY, button); + ElementRenderer.mouseReleased(children, mouseX, mouseY, button); } } diff --git a/src/main/java/org/saturnclient/ui/elements/Scroll.java b/src/main/java/org/saturnclient/ui/elements/Scroll.java index 859e225..8c4648f 100644 --- a/src/main/java/org/saturnclient/ui/elements/Scroll.java +++ b/src/main/java/org/saturnclient/ui/elements/Scroll.java @@ -26,7 +26,7 @@ public class Scroll extends Element { } public void draw(Element element) { - ElementRenderer.INSTANCE.draw(children, element); + ElementRenderer.draw(children, element); } @Override @@ -40,7 +40,7 @@ public class Scroll extends Element { renderScope.getMatrixStack().push(); renderScope.getMatrixStack().translate(padding, -scroll + padding, 0); - ElementRenderer.INSTANCE.render(children, ctx.elapsed, renderScope, + ElementRenderer.render(children, ctx.elapsed, renderScope, ctx.mouseX - padding, ctx.mouseY - padding + scroll); @@ -111,22 +111,22 @@ public class Scroll extends Element { @Override public void keyPressed(int keyCode, int scanCode, int modifiers) { - ElementRenderer.INSTANCE.keyPressed(children, keyCode, scanCode, modifiers); + ElementRenderer.keyPressed(children, keyCode, scanCode, modifiers); } @Override public void mouseClicked(double mouseX, double mouseY, int button) { - ElementRenderer.INSTANCE.mouseClicked(children, mouseX - padding, mouseY - padding + scroll, button); + ElementRenderer.mouseClicked(children, mouseX - padding, mouseY - padding + scroll, button); } @Override public void mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - ElementRenderer.INSTANCE.mouseDragged(children, mouseX - padding, mouseY - padding + scroll, button, deltaX, + ElementRenderer.mouseDragged(children, mouseX - padding, mouseY - padding + scroll, button, deltaX, deltaY); } @Override public void mouseReleased(double mouseX, double mouseY, int button) { - ElementRenderer.INSTANCE.mouseReleased(children, mouseX - padding, mouseY - padding + scroll, button); + ElementRenderer.mouseReleased(children, mouseX - padding, mouseY - padding + scroll, button); } }