Renderer/src/main/java/electrosphere/renderer/ui/elements/StandardElement.java
austin fe8466c2f8
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
edge polygon gen fix + logo
2024-11-20 13:23:55 -05:00

298 lines
7.7 KiB
Java

package electrosphere.renderer.ui.elements;
import org.lwjgl.util.yoga.Yoga;
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
import electrosphere.renderer.ui.elementtypes.Element;
import electrosphere.renderer.ui.events.Event;
/**
* An implementation of element
*/
public class StandardElement implements Element {
//these are set by the
private int width = -1;
private int height = -1;
private int relativeX;
private int relativeY;
private int absoluteX;
private int absoluteY;
boolean useAbsolutePosition = false;
Element parent = null;
public boolean visible = false;
//the yoga node id
long yogaNode = -1;
/**
* Constructor
*/
protected StandardElement(){
this.yogaNode = Yoga.YGNodeNew();
}
@Override
public int getWidth() {
return width;
}
@Override
public int getHeight() {
return height;
}
@Override
public int getRelativeX() {
return relativeX;
}
@Override
public int getRelativeY() {
return relativeY;
}
@Override
public int getAbsoluteX(){
return absoluteX;
}
@Override
public int getAbsoluteY(){
return absoluteY;
}
@Override
public void setAbsolutePosition(boolean useAbsolutePosition){
if(useAbsolutePosition){
Yoga.YGNodeStyleSetPositionType(yogaNode, Yoga.YGPositionTypeAbsolute);
} else {
Yoga.YGNodeStyleSetPositionType(yogaNode, Yoga.YGPositionTypeRelative);
}
this.useAbsolutePosition = useAbsolutePosition;
}
@Override
public void setWidth(int width) {
Yoga.YGNodeStyleSetWidth(this.yogaNode, width);
}
@Override
public void setWidthPercent(float width) {
Yoga.YGNodeStyleSetWidthPercent(yogaNode, width);
}
@Override
public void setHeight(int height) {
Yoga.YGNodeStyleSetHeight(this.yogaNode, height);
}
@Override
public void setHeightPercent(float height) {
Yoga.YGNodeStyleSetHeightPercent(yogaNode, height);
}
@Override
public void setPositionX(int posX) {
Yoga.YGNodeStyleSetPosition(this.yogaNode, Yoga.YGEdgeLeft, posX);
}
@Override
public void setPositionY(int posY) {
Yoga.YGNodeStyleSetPosition(this.yogaNode, Yoga.YGEdgeTop, posY);
}
public void setMarginTop(int marginTop){
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeTop, marginTop);
}
public void setMarginRight(int marginRight){
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeRight, marginRight);
}
public void setMarginBottom(int marginBottom){
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeBottom, marginBottom);
}
public void setMarginLeft(int marginLeft){
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeLeft, marginLeft);
}
public Element getParent(){
return this.parent;
}
public void setParent(Element parent){
this.parent = parent;
}
@Override
public void destroy(){
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
Yoga.YGNodeFree(this.yogaNode);
this.yogaNode = Element.NULL_YOGA_ELEMENT;
}
}
@Override
public long getYogaNode() {
return yogaNode;
}
@Override
public void applyYoga(int parentX, int parentY) {
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
//get the values from yoga
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
float widthRaw = Yoga.YGNodeLayoutGetWidth(yogaNode);
float heightRaw = Yoga.YGNodeLayoutGetHeight(yogaNode);
//apply the values to this component
this.relativeX = (int)leftRaw;
this.relativeY = (int)topRaw;
this.width = (int)widthRaw;
this.height = (int)heightRaw;
//calculate absolute values
this.absoluteX = parentX + this.relativeX;
this.absoluteY = parentY + this.relativeY;
}
}
@Override
public boolean handleEvent(Event event) {
boolean propagate = true;
return propagate;
}
@Override
public void setMaxWidth(int width) {
Yoga.YGNodeStyleSetMaxWidth(yogaNode, width);
}
@Override
public void setMaxWidthPercent(float percent) {
Yoga.YGNodeStyleSetMaxWidthPercent(yogaNode, percent);
}
@Override
public void setMaxHeight(int height) {
Yoga.YGNodeStyleSetMaxHeight(yogaNode, height);
}
@Override
public void setMaxHeightPercent(float percent) {
Yoga.YGNodeStyleSetMaxHeight(yogaNode, percent);
}
@Override
public void setMinWidth(int width) {
Yoga.YGNodeStyleSetMinWidth(yogaNode, width);
}
@Override
public void setMinWidthPercent(float percent) {
Yoga.YGNodeStyleSetMinWidthPercent(yogaNode, percent);
}
@Override
public void setMinHeight(int height) {
Yoga.YGNodeStyleSetMinHeight(yogaNode, height);
}
@Override
public void setMinHeightPercent(float percent) {
Yoga.YGNodeStyleSetMinHeightPercent(yogaNode, percent);
}
/**
* Converts an absolute (to the screen) position to a position within a framebuffer
* @param absolutePos The absolute position
* @param framebufferPos The position of the framebuffer on the screen
* @return The position within the framebuffer
*/
public int absoluteToFramebuffer(int absolutePos, int framebufferPos){
return absolutePos - framebufferPos;
}
@Override
public void setAlignSelf(YogaAlignment alignment){
int alignmentInteger = Yoga.YGAlignAuto;
switch(alignment){
case Auto:
alignmentInteger = Yoga.YGAlignAuto;
break;
case Start:
alignmentInteger = Yoga.YGAlignFlexStart;
break;
case End:
alignmentInteger = Yoga.YGAlignFlexEnd;
break;
case Around:
alignmentInteger = Yoga.YGAlignSpaceAround;
break;
case Between:
alignmentInteger = Yoga.YGAlignSpaceBetween;
break;
case Stretch:
alignmentInteger = Yoga.YGAlignStretch;
break;
case Baseline:
alignmentInteger = Yoga.YGAlignBaseline;
break;
case Center:
alignmentInteger = Yoga.YGAlignCenter;
break;
}
Yoga.YGNodeStyleSetAlignSelf(this.yogaNode, alignmentInteger);
}
/**
* The value of the grow property
* @param grow The grow value
*/
public void setFlexGrow(float grow){
Yoga.YGNodeStyleSetFlexGrow(yogaNode, grow);
}
public boolean getVisible() {
return visible;
}
public void setVisible(boolean draw) {
this.visible = draw;
}
public void setDisplay(int value){
Yoga.YGNodeStyleSetDisplay(this.yogaNode, value);
}
@Override
public void setPaddingTop(int paddingTop) {
Yoga.YGNodeStyleSetPadding(this.yogaNode, Yoga.YGEdgeTop, paddingTop);
}
@Override
public void setPaddingRight(int paddingRight) {
Yoga.YGNodeStyleSetPadding(this.yogaNode, Yoga.YGEdgeRight, paddingRight);
}
@Override
public void setPaddingBottom(int paddingBottom) {
Yoga.YGNodeStyleSetPadding(this.yogaNode, Yoga.YGEdgeBottom, paddingBottom);
}
@Override
public void setPaddingLeft(int paddingLeft) {
Yoga.YGNodeStyleSetPadding(this.yogaNode, Yoga.YGEdgeLeft, paddingLeft);
}
}