ui refactoring, hoverstate
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-03-24 15:00:18 -04:00
parent 6f8e44f325
commit 1163f034eb
42 changed files with 256 additions and 93 deletions

View File

@ -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());
}});

View File

@ -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;

View File

@ -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 {

View File

@ -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;

View File

@ -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 {

View File

@ -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;

View File

@ -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;
/**

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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 {

View File

@ -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

View File

@ -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;
}
}
}

View File

@ -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;
/**
*

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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.*;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.ClickEvent;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import java.util.List;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.DragEvent;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.OpenGLState;
import electrosphere.renderer.RenderPipelineState;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.Event;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.FocusEvent;

View File

@ -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);
}
}

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.KeyboardEvent;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.MenuEvent;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.NavigationEvent;

View File

@ -1,4 +1,4 @@
package electrosphere.renderer.ui;
package electrosphere.renderer.ui.elementtypes;
import electrosphere.renderer.ui.events.ValueChangeEvent;

View File

@ -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 {

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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 {

View File

@ -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

View File

@ -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;
/**