Create ScreenWidget - a screen aware parent of root widget

This commit is contained in:
2021-03-11 19:10:13 +01:00
parent b80632c705
commit 0a9bd87c29
4 changed files with 253 additions and 10 deletions

View File

@@ -5,6 +5,8 @@ import com.bartlomiejpluta.base.api.game.screen.Screen;
public interface Widget {
Widget getParent();
void setParent(Widget parent);
float getX();
float getY();

View File

@@ -98,6 +98,7 @@ public abstract class Component implements Widget {
return parent;
}
@Override
public void setParent(Widget parent) {
this.parent = parent;
}

View File

@@ -9,8 +9,8 @@ import com.bartlomiejpluta.base.api.game.screen.Screen;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.error.AppException;
import com.bartlomiejpluta.base.engine.gui.manager.FontManager;
import com.bartlomiejpluta.base.engine.gui.widget.ScreenWidget;
import lombok.Getter;
import lombok.Setter;
import org.lwjgl.nanovg.NVGColor;
import java.util.HashSet;
@@ -24,8 +24,7 @@ import static org.lwjgl.system.MemoryUtil.NULL;
public class NanoVGGUI implements GUI {
private long context;
@Setter
private Widget root;
private ScreenWidget screenWidget;
private NVGColor fillColor;
private NVGColor strokeColor;
@@ -41,25 +40,36 @@ public class NanoVGGUI implements GUI {
public void init(Screen screen) {
context = nvgCreate(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
if (context == NULL) {
throw new AppException("Could not init NanoVG");
}
screenWidget = new ScreenWidget(screen);
fillColor = NVGColor.create();
strokeColor = NVGColor.create();
if (context == NULL) {
throw new AppException("Could not onCreate NanoVG");
}
}
@Override
public void render(Screen screen, Camera camera, ShaderManager shaderManager) {
nvgBeginFrame(context, screen.getWidth(), screen.getHeight(), 1);
if (root != null) {
root.draw(screen, this);
}
screenWidget.draw(screen, this);
nvgEndFrame(context);
}
@Override
public Widget getRoot() {
return screenWidget.getRoot();
}
@Override
public void setRoot(Widget root) {
screenWidget.setRoot(root);
root.setParent(screenWidget);
}
@Override
public void beginPath() {
nvgBeginPath(context);

View File

@@ -0,0 +1,230 @@
package com.bartlomiejpluta.base.engine.gui.widget;
import com.bartlomiejpluta.base.api.game.gui.base.GUI;
import com.bartlomiejpluta.base.api.game.gui.base.SizeMode;
import com.bartlomiejpluta.base.api.game.gui.base.Widget;
import com.bartlomiejpluta.base.api.game.screen.Screen;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@RequiredArgsConstructor
public class ScreenWidget implements Widget {
private final Screen screen;
private Widget root;
@Override
public float getWidth() {
return screen.getWidth();
}
@Override
public float getHeight() {
return screen.getHeight();
}
@Override
public Widget getParent() {
return null;
}
@Override
public void setParent(Widget parent) {
throw new UnsupportedOperationException();
}
@Override
public float getX() {
return 0;
}
@Override
public float getY() {
return 0;
}
@Override
public void setX(float x) {
throw new UnsupportedOperationException();
}
@Override
public void setY(float y) {
throw new UnsupportedOperationException();
}
@Override
public void setPosition(float x, float y) {
throw new UnsupportedOperationException();
}
@Override
public void setWidth(float width) {
throw new UnsupportedOperationException();
}
@Override
public void setHeight(float height) {
throw new UnsupportedOperationException();
}
@Override
public void setSize(float width, float height) {
throw new UnsupportedOperationException();
}
@Override
public SizeMode getWidthMode() {
return SizeMode.MATCH_PARENT;
}
@Override
public void setWidthMode(SizeMode mode) {
throw new UnsupportedOperationException();
}
@Override
public SizeMode getHeightMode() {
return SizeMode.MATCH_PARENT;
}
@Override
public void setHeightMode(SizeMode mode) {
throw new UnsupportedOperationException();
}
@Override
public void setSizeMode(SizeMode widthMode, SizeMode heightMode) {
throw new UnsupportedOperationException();
}
@Override
public void setMargin(float top, float right, float bottom, float left) {
throw new UnsupportedOperationException();
}
@Override
public void setMargin(float top, float rightLeft, float bottom) {
throw new UnsupportedOperationException();
}
@Override
public void setMargin(float topBottom, float rightLeft) {
throw new UnsupportedOperationException();
}
@Override
public void setMargin(float all) {
throw new UnsupportedOperationException();
}
@Override
public void setMarginTop(float margin) {
throw new UnsupportedOperationException();
}
@Override
public void setMarginRight(float margin) {
throw new UnsupportedOperationException();
}
@Override
public void setMarginBottom(float margin) {
throw new UnsupportedOperationException();
}
@Override
public void setMarginLeft(float margin) {
throw new UnsupportedOperationException();
}
@Override
public float getMarginTop() {
return 0;
}
@Override
public float getMarginRight() {
return 0;
}
@Override
public float getMarginBottom() {
return 0;
}
@Override
public float getMarginLeft() {
return 0;
}
@Override
public void setPadding(float top, float right, float bottom, float left) {
throw new UnsupportedOperationException();
}
@Override
public void setPadding(float top, float rightLeft, float bottom) {
throw new UnsupportedOperationException();
}
@Override
public void setPadding(float topBottom, float rightLeft) {
throw new UnsupportedOperationException();
}
@Override
public void setPadding(float all) {
throw new UnsupportedOperationException();
}
@Override
public void setPaddingTop(float padding) {
throw new UnsupportedOperationException();
}
@Override
public void setPaddingRight(float padding) {
throw new UnsupportedOperationException();
}
@Override
public void setPaddingBottom(float padding) {
throw new UnsupportedOperationException();
}
@Override
public void setPaddingLeft(float padding) {
throw new UnsupportedOperationException();
}
@Override
public float getPaddingTop() {
return 0;
}
@Override
public float getPaddingRight() {
return 0;
}
@Override
public float getPaddingBottom() {
return 0;
}
@Override
public float getPaddingLeft() {
return 0;
}
@Override
public void draw(Screen screen, GUI gui) {
if (root != null) {
root.draw(screen, gui);
}
}
}