Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
298 lines
7.7 KiB
Java
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);
|
|
}
|
|
|
|
}
|