ui refactoring, hoverstate
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
6f8e44f325
commit
1163f034eb
@ -144,6 +144,7 @@ public class ControlHandler {
|
||||
public static final String DATA_STRING_INPUT_CODE_MENU_SELECT = "menuSelect";
|
||||
public static final String INPUT_CODE_MENU_MOUSE_PRIMARY = "menuMousePrimary";
|
||||
public static final String DATA_STRING_INPUT_CODE_MENU_BACKOUT = "menuBackout";
|
||||
public static final String MENU_MOUSE_MOVE = "menuMouseMove";
|
||||
|
||||
|
||||
|
||||
@ -285,6 +286,7 @@ public class ControlHandler {
|
||||
handler.addControl(DATA_STRING_INPUT_CODE_MENU_DECREMENT, new Control(ControlType.KEY,GLFW_KEY_LEFT));
|
||||
handler.addControl(DATA_STRING_INPUT_CODE_MENU_SELECT, new Control(ControlType.KEY,GLFW_KEY_ENTER));
|
||||
handler.addControl(DATA_STRING_INPUT_CODE_MENU_BACKOUT, new Control(ControlType.KEY,GLFW_KEY_ESCAPE));
|
||||
handler.addControl(MENU_MOUSE_MOVE, new Control(ControlType.MOUSE_MOVEMENT,0));
|
||||
handler.addControl(INPUT_CODE_MENU_MOUSE_PRIMARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_LEFT));
|
||||
|
||||
/*
|
||||
@ -1091,6 +1093,11 @@ public class ControlHandler {
|
||||
}});
|
||||
controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setRepeatTimeout(0.5f * Main.targetFrameRate);
|
||||
|
||||
//moving the mouse
|
||||
menuNavigationControlList.add(controls.get(MENU_MOUSE_MOVE));
|
||||
controls.get(MENU_MOUSE_MOVE).setOnMove(new Control.MouseCallback(){public void execute(MouseEvent mouseEvent){
|
||||
Globals.elementManager.updateHover(mouseEvent.getCurrentX(), mouseEvent.getCurrentY());
|
||||
}});
|
||||
|
||||
|
||||
|
||||
|
||||
@ -23,10 +23,6 @@ import electrosphere.renderer.actor.Actor;
|
||||
import electrosphere.renderer.actor.ActorStaticMorph;
|
||||
import electrosphere.renderer.actor.ActorUtils;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.NavigableElement.NavigationEventCallback;
|
||||
import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.Window;
|
||||
import electrosphere.renderer.ui.elements.ActorPanel;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
@ -36,6 +32,10 @@ import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||
import electrosphere.renderer.ui.elements.Slider;
|
||||
import electrosphere.renderer.ui.elements.TextInput;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
||||
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||
|
||||
@ -6,11 +6,11 @@ import electrosphere.entity.state.inventory.RelationalInventoryState;
|
||||
import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
||||
import electrosphere.menu.ingame.MenuGeneratorsInventory;
|
||||
import electrosphere.menu.mainmenu.MenuGeneratorsTitleMenu;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.Window;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
|
||||
public class WindowUtils {
|
||||
|
||||
|
||||
@ -17,10 +17,7 @@ import electrosphere.renderer.RenderingEngine;
|
||||
import electrosphere.renderer.actor.Actor;
|
||||
import electrosphere.renderer.actor.ActorStaticMorph;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.Window;
|
||||
import electrosphere.renderer.ui.NavigableElement.NavigationEventCallback;
|
||||
import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.Div;
|
||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||
@ -28,6 +25,9 @@ import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||
import electrosphere.renderer.ui.elements.Slider;
|
||||
import electrosphere.renderer.ui.elements.TextInput;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
||||
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||
|
||||
@ -16,20 +16,19 @@ import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
||||
import electrosphere.entity.types.item.ItemUtils;
|
||||
import electrosphere.menu.WindowStrings;
|
||||
import electrosphere.menu.WindowUtils;
|
||||
import electrosphere.renderer.ui.DraggableElement.DragEventCallback;
|
||||
import electrosphere.renderer.ui.elements.Div;
|
||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
||||
import electrosphere.renderer.ui.elementtypes.DraggableElement.DragEventCallback;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement.FocusEventCallback;
|
||||
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
||||
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.Window;
|
||||
import electrosphere.renderer.ui.ClickableElement.ClickEventCallback;
|
||||
import electrosphere.renderer.ui.DraggableElement.DragEventCallback;
|
||||
import electrosphere.renderer.ui.FocusableElement.FocusEventCallback;
|
||||
import electrosphere.renderer.ui.NavigableElement.NavigationEventCallback;
|
||||
import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback;
|
||||
|
||||
public class MenuGeneratorsInventory {
|
||||
|
||||
|
||||
@ -4,11 +4,11 @@ import electrosphere.auth.AuthenticationManager;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||
import electrosphere.net.NetUtils;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elements.TextInput;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.form.FormElement;
|
||||
|
||||
|
||||
@ -7,13 +7,13 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.menu.WindowStrings;
|
||||
import electrosphere.menu.WindowUtils;
|
||||
import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.WidgetUtils;
|
||||
import electrosphere.renderer.ui.Window;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
|
||||
/**
|
||||
|
||||
@ -22,9 +22,6 @@ import electrosphere.renderer.actor.ActorUtils;
|
||||
import electrosphere.renderer.actor.ActorStaticMorph.StaticMorphTransforms;
|
||||
import electrosphere.renderer.anim.Animation;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.elements.ActorPanel;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||
@ -32,6 +29,9 @@ import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||
import electrosphere.renderer.ui.elements.Slider;
|
||||
import electrosphere.renderer.ui.elements.StringCarousel;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||
import electrosphere.renderer.ui.form.FormElement;
|
||||
|
||||
@ -4,10 +4,10 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||
import electrosphere.menu.MenuGenerators;
|
||||
import electrosphere.menu.WindowUtils;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.form.FormElement;
|
||||
|
||||
|
||||
@ -113,8 +113,8 @@ import electrosphere.renderer.pipelines.UIPipeline;
|
||||
import electrosphere.renderer.pipelines.VolumeBufferPipeline;
|
||||
import electrosphere.renderer.shader.ShaderProgram;
|
||||
import electrosphere.renderer.texture.Texture;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.imgui.ImGuiLinePlot;
|
||||
import electrosphere.renderer.ui.imgui.ImGuiWindow;
|
||||
import electrosphere.renderer.ui.imgui.ImGuiLinePlot.ImGuiLinePlotDataset;
|
||||
|
||||
@ -14,10 +14,10 @@ import electrosphere.logger.LoggerInterface;
|
||||
import electrosphere.renderer.RenderingEngine;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.shader.ShaderProgram;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
|
||||
|
||||
public class DebugRendering {
|
||||
|
||||
@ -7,8 +7,8 @@ import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.RenderingEngine;
|
||||
import electrosphere.renderer.texture.Texture;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
|
||||
/**
|
||||
* Main ui rendering pipeline
|
||||
|
||||
@ -9,18 +9,23 @@ import java.util.Stack;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.HoverableElement;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.events.FocusEvent;
|
||||
import electrosphere.renderer.ui.events.HoverEvent;
|
||||
import electrosphere.renderer.ui.events.MouseEvent;
|
||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||
import electrosphere.renderer.ui.events.NavigationEvent.NavigationEventType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author amaterasu
|
||||
* The main interface for working with the ui system
|
||||
*/
|
||||
public class ElementManager {
|
||||
|
||||
@ -29,6 +34,9 @@ public class ElementManager {
|
||||
List<Element> elementList = new CopyOnWriteArrayList<Element>();
|
||||
FocusableElement currentFocusedElement = null;
|
||||
DraggableElement currentDragElement = null;
|
||||
|
||||
// the element currently hovered over
|
||||
HoverableElement currentHoveredElement = null;
|
||||
|
||||
public void registerWindow(String name, Element w){
|
||||
elementMap.put(name,w);
|
||||
@ -175,6 +183,35 @@ public class ElementManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first hoverable element in the view stack
|
||||
* @param currentX the current x position of the mouse
|
||||
* @param currentY the current y position of the mouse
|
||||
* @return The first hoverable element if it exists, null otherwise
|
||||
*/
|
||||
public Element resolveFirstHoverable(int currentX, int currentY){
|
||||
ListIterator<Element> windowIterator = elementList.listIterator(elementList.size());
|
||||
while(windowIterator.hasPrevious()){
|
||||
Element currentWindow = windowIterator.previous();
|
||||
Stack<Element> elementStack = buildElementPositionalStack(new Stack<Element>(), currentWindow, currentX, currentY, 0, 0);
|
||||
Element currentElement = null;
|
||||
while(elementStack.size() > 0){
|
||||
currentElement = elementStack.pop();
|
||||
if(currentElement instanceof HoverableElement){
|
||||
return currentElement;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an element contains a given screen coordinate
|
||||
* @param el The element
|
||||
* @param x the x component of the coordinate
|
||||
* @param y the y component of the coordinate
|
||||
* @return True if it contains that point, false otherwise
|
||||
*/
|
||||
boolean elementContainsPoint(Element el, int x, int y){
|
||||
return
|
||||
x >= el.getPositionX() &&
|
||||
@ -217,9 +254,30 @@ public class ElementManager {
|
||||
fireEvent(event,event.getCurrentX(),event.getCurrentY());
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates backwards
|
||||
*/
|
||||
public void navigateBackwards(){
|
||||
NavigationEvent event = new NavigationEvent(NavigationEventType.BACKWARD);
|
||||
fireEvent(event,currentFocusedElement.getPositionX(),currentFocusedElement.getPositionY());
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the hover state
|
||||
* @param currentX The current mouse X
|
||||
* @param currentY The current mouse Y
|
||||
*/
|
||||
public void updateHover(int currentX, int currentY){
|
||||
Element newHoverableElement = resolveFirstHoverable(currentX,currentY);
|
||||
if(currentHoveredElement != newHoverableElement){
|
||||
if(currentHoveredElement != null){
|
||||
currentHoveredElement.handleEvent(new HoverEvent(false));
|
||||
}
|
||||
if(newHoverableElement != null){
|
||||
newHoverableElement.handleEvent(new HoverEvent(true));
|
||||
}
|
||||
currentHoveredElement = (HoverableElement)newHoverableElement;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,8 @@ import electrosphere.controls.ControlHandler;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.renderer.ui.elements.Button;
|
||||
import electrosphere.renderer.ui.elements.Label;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
@ -21,6 +21,10 @@ import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.NavigableElement;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||
|
||||
|
||||
@ -31,8 +31,8 @@ import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.DraggableElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
|
||||
@ -9,17 +9,19 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.HoverableElement;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.events.FocusEvent;
|
||||
import electrosphere.renderer.ui.events.HoverEvent;
|
||||
import electrosphere.renderer.ui.events.MouseEvent;
|
||||
|
||||
public class Button implements DrawableElement, FocusableElement, ContainerElement, ClickableElement {
|
||||
public class Button implements DrawableElement, FocusableElement, ContainerElement, ClickableElement, HoverableElement {
|
||||
|
||||
List<Element> childList = new LinkedList<Element>();
|
||||
|
||||
@ -38,6 +40,7 @@ public class Button implements DrawableElement, FocusableElement, ContainerEleme
|
||||
FocusEventCallback onFocusCallback;
|
||||
FocusEventCallback onLoseFocusCallback;
|
||||
ClickEventCallback clickCallback;
|
||||
HoverEventCallback hoverEventCallback;
|
||||
|
||||
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
||||
|
||||
@ -206,6 +209,28 @@ public class Button implements DrawableElement, FocusableElement, ContainerEleme
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default hover event handling
|
||||
* @param event the hover event
|
||||
*/
|
||||
void onHoverEvent(HoverEvent event){
|
||||
if(event.isHovered()){
|
||||
for(Element child : childList){
|
||||
if(child instanceof Label){
|
||||
Label childLabel = (Label) child;
|
||||
childLabel.setColor(new Vector3f(1,0,0));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for(Element child : childList){
|
||||
if(child instanceof Label){
|
||||
Label childLabel = (Label) child;
|
||||
childLabel.setColor(new Vector3f(1,1,1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
||||
for(Element child : childList){
|
||||
if(child instanceof DrawableElement){
|
||||
@ -281,7 +306,20 @@ public class Button implements DrawableElement, FocusableElement, ContainerEleme
|
||||
clickCallback.execute((ClickEvent)event);
|
||||
}
|
||||
}
|
||||
if(event instanceof HoverEvent){
|
||||
if(hoverEventCallback != null){
|
||||
hoverEventCallback.execute((HoverEvent)event);
|
||||
} else {
|
||||
//default hover handling
|
||||
onHoverEvent((HoverEvent)event);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOnHoverCallback(HoverEventCallback callback) {
|
||||
this.hoverEventCallback = callback;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -9,13 +9,13 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DraggableElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.FocusableElement;
|
||||
import electrosphere.renderer.ui.NavigableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.NavigableElement;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||
|
||||
@ -13,8 +13,8 @@ import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.texture.Texture;
|
||||
import electrosphere.renderer.ui.DraggableElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
|
||||
@ -9,8 +9,8 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.font.Font;
|
||||
import electrosphere.renderer.ui.font.FontUtils;
|
||||
|
||||
@ -14,9 +14,9 @@ import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
|
||||
@ -8,12 +8,12 @@ import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.debug.DebugRendering;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.ClickableElement;
|
||||
import electrosphere.renderer.ui.DraggableElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.FocusableElement;
|
||||
import electrosphere.renderer.ui.MenuEventElement;
|
||||
import electrosphere.renderer.ui.ValueElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.MenuEventElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ValueElement;
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||
|
||||
@ -8,11 +8,11 @@ import org.joml.Vector3f;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.FocusableElement;
|
||||
import electrosphere.renderer.ui.MenuEventElement;
|
||||
import electrosphere.renderer.ui.ValueElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.MenuEventElement;
|
||||
import electrosphere.renderer.ui.elementtypes.ValueElement;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.events.FocusEvent;
|
||||
import electrosphere.renderer.ui.events.MenuEvent;
|
||||
|
||||
@ -5,7 +5,7 @@ import electrosphere.engine.assetmanager.AssetDataStrings;
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.font.FontUtils;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
@ -9,10 +9,10 @@ import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.texture.Texture;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.FocusableElement;
|
||||
import electrosphere.renderer.ui.KeyEventElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.KeyEventElement;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.events.FocusEvent;
|
||||
import electrosphere.renderer.ui.events.KeyboardEvent;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.ClickEvent;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.DragEvent;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.FocusEvent;
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.HoverEvent;
|
||||
|
||||
/**
|
||||
* Hover state handling
|
||||
*/
|
||||
public interface HoverableElement extends Element {
|
||||
|
||||
//Sets the callback that is triggered when this element is hovered over
|
||||
public void setOnHoverCallback(HoverEventCallback callback);
|
||||
|
||||
/**
|
||||
* The callback triggered when this element is hovered over
|
||||
*/
|
||||
public interface HoverEventCallback {
|
||||
|
||||
/**
|
||||
* Executes the callback
|
||||
* @param event The event to handle
|
||||
* @return true if should propagate up to parents, false otherwise
|
||||
*/
|
||||
public boolean execute(HoverEvent event);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.KeyboardEvent;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.MenuEvent;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package electrosphere.renderer.ui;
|
||||
package electrosphere.renderer.ui.elementtypes;
|
||||
|
||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package electrosphere.renderer.ui.events;
|
||||
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
|
||||
public class DragEvent implements Event {
|
||||
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
package electrosphere.renderer.ui.events;
|
||||
|
||||
/**
|
||||
* Triggered when an element is hovered over
|
||||
*/
|
||||
public class HoverEvent implements Event {
|
||||
|
||||
//if true, this element is hovered over, false otherwise
|
||||
boolean isHovered;
|
||||
|
||||
/**
|
||||
* Creates the hover event
|
||||
* @param isHovered true if hovered over, false otherwise
|
||||
*/
|
||||
public HoverEvent(boolean isHovered){
|
||||
this.isHovered = isHovered;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the element is hovered over
|
||||
* @return true if hovered over, false otherwise
|
||||
*/
|
||||
public boolean isHovered(){
|
||||
return isHovered;
|
||||
}
|
||||
|
||||
}
|
||||
@ -6,7 +6,7 @@ import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
import electrosphere.renderer.ui.font.Font;
|
||||
// import electrosphere.renderer.ui.font.FontUtils;
|
||||
|
||||
@ -5,9 +5,9 @@ import java.util.List;
|
||||
|
||||
import electrosphere.renderer.OpenGLState;
|
||||
import electrosphere.renderer.RenderPipelineState;
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
|
||||
public class FormElement implements DrawableElement, ContainerElement {
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
package electrosphere.renderer.ui.layout;
|
||||
|
||||
import electrosphere.renderer.ui.ContainerElement;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author amaterasu
|
||||
|
||||
@ -20,8 +20,8 @@ import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.model.Material;
|
||||
import electrosphere.renderer.model.Model;
|
||||
import electrosphere.renderer.ui.DrawableElement;
|
||||
import electrosphere.renderer.ui.Element;
|
||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||
import electrosphere.renderer.ui.elementtypes.Element;
|
||||
import electrosphere.renderer.ui.events.Event;
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user