Improve widgets' attributes parsing engine
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package com.bartlomiejpluta.base.api.gui;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Inherited
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Attribute {
|
||||
String value();
|
||||
}
|
||||
@@ -2,10 +2,12 @@ package com.bartlomiejpluta.base.lib.gui;
|
||||
|
||||
import com.bartlomiejpluta.base.api.event.Event;
|
||||
import com.bartlomiejpluta.base.api.event.EventType;
|
||||
import com.bartlomiejpluta.base.api.gui.Attribute;
|
||||
import com.bartlomiejpluta.base.api.gui.SizeMode;
|
||||
import com.bartlomiejpluta.base.api.gui.Widget;
|
||||
import com.bartlomiejpluta.base.lib.event.EventHandler;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class BaseWidget implements Widget {
|
||||
@@ -39,8 +41,8 @@ public abstract class BaseWidget implements Widget {
|
||||
@Override
|
||||
public float getWidth() {
|
||||
return widthMode == SizeMode.RELATIVE
|
||||
? (parent != null ? width * parent.getWidth() - parent.getPaddingLeft() - parent.getPaddingRight() - marginLeft - marginRight : 0)
|
||||
: getActualWidth();
|
||||
? (parent != null ? width * parent.getWidth() - parent.getPaddingLeft() - parent.getPaddingRight() - marginLeft - marginRight : 0)
|
||||
: getActualWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -51,8 +53,8 @@ public abstract class BaseWidget implements Widget {
|
||||
@Override
|
||||
public float getHeight() {
|
||||
return heightMode == SizeMode.RELATIVE
|
||||
? (parent != null ? height * parent.getHeight() - parent.getPaddingTop() - parent.getPaddingBottom() - marginTop - marginBottom : 0)
|
||||
: getActualHeight();
|
||||
? (parent != null ? height * parent.getHeight() - parent.getPaddingTop() - parent.getPaddingBottom() - marginTop - marginBottom : 0)
|
||||
: getActualHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,6 +72,36 @@ public abstract class BaseWidget implements Widget {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
@Attribute("height")
|
||||
public void setHeight(String height) {
|
||||
var heightLowerCased = height.toLowerCase(Locale.ROOT);
|
||||
|
||||
if (heightLowerCased.equals("auto")) {
|
||||
this.heightMode = SizeMode.AUTO;
|
||||
} else if (heightLowerCased.equals("relative")) {
|
||||
this.heightMode = SizeMode.RELATIVE;
|
||||
this.height = 1f;
|
||||
} else {
|
||||
this.heightMode = SizeMode.ABSOLUTE;
|
||||
this.height = Float.parseFloat(height);
|
||||
}
|
||||
}
|
||||
|
||||
@Attribute("width")
|
||||
public void setWidth(String width) {
|
||||
var widthLowerCased = width.toLowerCase(Locale.ROOT);
|
||||
|
||||
if (widthLowerCased.equals("auto")) {
|
||||
this.widthMode = SizeMode.AUTO;
|
||||
} else if (widthLowerCased.equals("relative")) {
|
||||
this.widthMode = SizeMode.RELATIVE;
|
||||
this.width = 1f;
|
||||
} else {
|
||||
this.widthMode = SizeMode.ABSOLUTE;
|
||||
this.width = Float.parseFloat(width);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(Float width, Float height) {
|
||||
this.width = width;
|
||||
@@ -88,6 +120,7 @@ public abstract class BaseWidget implements Widget {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Attribute("widthMode")
|
||||
public void setWidthMode(SizeMode mode) {
|
||||
this.widthMode = mode;
|
||||
}
|
||||
@@ -98,6 +131,7 @@ public abstract class BaseWidget implements Widget {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Attribute("heightMode")
|
||||
public void setHeightMode(SizeMode mode) {
|
||||
this.heightMode = mode;
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ public abstract class BaseWindow extends BaseWidget implements Window {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Attribute("windowPosition")
|
||||
public void setWindowPosition(WindowPosition windowPosition) {
|
||||
this.windowPosition = requireNonNull(windowPosition);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.bartlomiejpluta.base.lib.gui;
|
||||
|
||||
import com.bartlomiejpluta.base.api.context.Context;
|
||||
import com.bartlomiejpluta.base.api.gui.Attribute;
|
||||
import com.bartlomiejpluta.base.api.gui.Color;
|
||||
import com.bartlomiejpluta.base.api.gui.GUI;
|
||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
||||
@@ -50,8 +51,15 @@ public class Label extends BaseComponent {
|
||||
return alignment;
|
||||
}
|
||||
|
||||
public void setAlignment(Integer alignment) {
|
||||
this.alignment = alignment;
|
||||
@Attribute("alignment")
|
||||
public void setAlignment(TextAlignment... alignment) {
|
||||
byte b = 0;
|
||||
|
||||
for (var elem : alignment) {
|
||||
b |= elem.getAlign();
|
||||
}
|
||||
|
||||
this.alignment = b;
|
||||
}
|
||||
|
||||
public float getRed() {
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.bartlomiejpluta.base.lib.gui;
|
||||
|
||||
import com.bartlomiejpluta.base.api.gui.GUI;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum TextAlignment {
|
||||
LEFT(GUI.ALIGN_LEFT),
|
||||
CENTER(GUI.ALIGN_CENTER),
|
||||
RIGHT(GUI.ALIGN_RIGHT),
|
||||
TOP(GUI.ALIGN_TOP),
|
||||
MIDDLE(GUI.ALIGN_MIDDLE),
|
||||
BOTTOM(GUI.ALIGN_BOTTOM),
|
||||
BASELINE(GUI.ALIGN_BASELINE);
|
||||
|
||||
@Getter
|
||||
private final int align;
|
||||
}
|
||||
Reference in New Issue
Block a user