ElementRenderer fix
This commit is contained in:
@@ -1,27 +1,92 @@
|
|||||||
package org.saturnclient.ui;
|
package org.saturnclient.ui;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class ElementRenderer {
|
public class ElementRenderer {
|
||||||
public static ElementRenderer INSTANCE;
|
public static void draw(List<Element> elements, Element element) {
|
||||||
|
synchronized (elements) {
|
||||||
|
elements.add(element);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void draw(List<Element> elements, Element element);
|
if (element.animation != null) {
|
||||||
|
element.animation.init(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void render(List<Element> elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY);
|
public static void render(List<Element> elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY) {
|
||||||
|
for (Element element : elements) {
|
||||||
|
element.playAnimationFrame(elapsed);
|
||||||
|
|
||||||
public abstract void mouseClicked(List<Element> 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<Element> 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<Element> elements,
|
List<Element> elements,
|
||||||
double mouseX,
|
double mouseX,
|
||||||
double mouseY,
|
double mouseY,
|
||||||
double horizontalAmount,
|
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<Element> elements, int keyCode, int scanCode, int modifiers);
|
public static void keyPressed(List<Element> 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<Element> elements, double mouseX, double mouseY, int button, double deltaX,
|
char typedChar = Utils.getCharFromKey(keyCode, modifiers);
|
||||||
double deltaY);
|
if (typedChar != '\0') {
|
||||||
|
element.charTyped(typedChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void mouseReleased(List<Element> elements, double mouseX, double mouseY, int button);
|
public static void mouseDragged(List<Element> 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<Element> elements, double mouseX, double mouseY, int button) {
|
||||||
|
for (Element element : new ArrayList<>(elements)) {
|
||||||
|
element.mouseReleased(mouseX - element.x, mouseY - element.y, button);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public abstract class SaturnScreen {
|
|||||||
public abstract void ui();
|
public abstract void ui();
|
||||||
|
|
||||||
public void draw(Element element) {
|
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);
|
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();
|
renderScope.getMatrixStack().pop();
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ public abstract class SaturnScreen {
|
|||||||
mouseX *= 2;
|
mouseX *= 2;
|
||||||
mouseY *= 2;
|
mouseY *= 2;
|
||||||
|
|
||||||
ElementRenderer.INSTANCE.mouseClicked(elements, mouseX, mouseY, button);
|
ElementRenderer.mouseClicked(elements, mouseX, mouseY, button);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,7 @@ public abstract class SaturnScreen {
|
|||||||
mouseX *= 2;
|
mouseX *= 2;
|
||||||
mouseY *= 2;
|
mouseY *= 2;
|
||||||
|
|
||||||
ElementRenderer.INSTANCE.mouseDragged(elements, mouseX, mouseY, button, deltaX, deltaY);
|
ElementRenderer.mouseDragged(elements, mouseX, mouseY, button, deltaX, deltaY);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ public abstract class SaturnScreen {
|
|||||||
mouseX *= 2;
|
mouseX *= 2;
|
||||||
mouseY *= 2;
|
mouseY *= 2;
|
||||||
|
|
||||||
ElementRenderer.INSTANCE.mouseReleased(elements, mouseX, mouseY, button);
|
ElementRenderer.mouseReleased(elements, mouseX, mouseY, button);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ public abstract class SaturnScreen {
|
|||||||
mouseX *= 2;
|
mouseX *= 2;
|
||||||
mouseY *= 2;
|
mouseY *= 2;
|
||||||
|
|
||||||
ElementRenderer.INSTANCE.mouseScrolled(elements, mouseX, mouseY, horizontalAmount, verticalAmount);
|
ElementRenderer.mouseScrolled(elements, mouseX, mouseY, horizontalAmount, verticalAmount);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -107,7 +107,7 @@ public abstract class SaturnScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
ElementRenderer.INSTANCE.keyPressed(elements, keyCode, scanCode, modifiers);
|
ElementRenderer.keyPressed(elements, keyCode, scanCode, modifiers);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<Element> elements, Element element) {
|
|
||||||
synchronized (elements) {
|
|
||||||
elements.add(element);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element.animation != null) {
|
|
||||||
element.animation.init(element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(List<Element> 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<Element> 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<Element> 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<Element> 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<Element> 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<Element> elements, double mouseX, double mouseY, int button) {
|
|
||||||
for (Element element : new ArrayList<>(elements)) {
|
|
||||||
element.mouseReleased(mouseX - element.x, mouseY - element.y, button);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -31,7 +31,7 @@ public class AnimationStagger extends Element {
|
|||||||
element.animation.delay = delay * children.size();
|
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.height = Math.max(this.height, element.y + element.height);
|
||||||
this.width = Math.max(this.width, element.x + element.width);
|
this.width = Math.max(this.width, element.x + element.width);
|
||||||
@@ -39,28 +39,28 @@ public class AnimationStagger extends Element {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(RenderScope renderScope, ElementContext ctx) {
|
public void render(RenderScope renderScope, ElementContext ctx) {
|
||||||
ElementRenderer.INSTANCE.render(children, ctx.elapsed, renderScope,
|
ElementRenderer.render(children, ctx.elapsed, renderScope,
|
||||||
ctx.mouseX,
|
ctx.mouseX,
|
||||||
ctx.mouseY);
|
ctx.mouseY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(double mouseX, double mouseY, int button) {
|
public void mouseClicked(double mouseX, double mouseY, int button) {
|
||||||
ElementRenderer.INSTANCE.mouseClicked(children, mouseX, mouseY, button);
|
ElementRenderer.mouseClicked(children, mouseX, mouseY, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
ElementRenderer.INSTANCE.keyPressed(children, keyCode, scanCode, modifiers);
|
ElementRenderer.keyPressed(children, keyCode, scanCode, modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
|
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
|
@Override
|
||||||
public void mouseReleased(double mouseX, double mouseY, int button) {
|
public void mouseReleased(double mouseX, double mouseY, int button) {
|
||||||
ElementRenderer.INSTANCE.mouseReleased(children, mouseX, mouseY, button);
|
ElementRenderer.mouseReleased(children, mouseX, mouseY, button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class Scroll extends Element {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void draw(Element element) {
|
public void draw(Element element) {
|
||||||
ElementRenderer.INSTANCE.draw(children, element);
|
ElementRenderer.draw(children, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -40,7 +40,7 @@ public class Scroll extends Element {
|
|||||||
renderScope.getMatrixStack().push();
|
renderScope.getMatrixStack().push();
|
||||||
renderScope.getMatrixStack().translate(padding, -scroll + padding, 0);
|
renderScope.getMatrixStack().translate(padding, -scroll + padding, 0);
|
||||||
|
|
||||||
ElementRenderer.INSTANCE.render(children, ctx.elapsed, renderScope,
|
ElementRenderer.render(children, ctx.elapsed, renderScope,
|
||||||
ctx.mouseX - padding,
|
ctx.mouseX - padding,
|
||||||
ctx.mouseY - padding + scroll);
|
ctx.mouseY - padding + scroll);
|
||||||
|
|
||||||
@@ -111,22 +111,22 @@ public class Scroll extends Element {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
ElementRenderer.INSTANCE.keyPressed(children, keyCode, scanCode, modifiers);
|
ElementRenderer.keyPressed(children, keyCode, scanCode, modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(double mouseX, double mouseY, int button) {
|
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
|
@Override
|
||||||
public void mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
|
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);
|
deltaY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(double mouseX, double mouseY, int button) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user