diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2018-09-30 11:20:43 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2018-09-30 11:20:43 +0200 |
commit | 25b5f54ddbc6c0e3dd3b8ca461a0ed118e1421cf (patch) | |
tree | b6177fc198a1a52e3e080d4d7591a3a1ba6f180e /core/src | |
parent | 897c2a7ff5c09bea2b1e9be845b4d60b17890047 (diff) | |
download | gdx-boardgame-25b5f54ddbc6c0e3dd3b8ca461a0ed118e1421cf.zip gdx-boardgame-25b5f54ddbc6c0e3dd3b8ca461a0ed118e1421cf.tar.gz |
ui : introduce tainted, get rid of manual update()
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Assembly.java | 4 | ||||
-rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Button.java | 31 | ||||
-rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Element.java | 35 | ||||
-rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Label.java | 13 | ||||
-rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Patch.java | 1 | ||||
-rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Root.java | 2 |
6 files changed, 45 insertions, 41 deletions
diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Assembly.java b/core/src/ch/asynk/gdx/tabletop/ui/Assembly.java index 505bc2c..9facd26 100644 --- a/core/src/ch/asynk/gdx/tabletop/ui/Assembly.java +++ b/core/src/ch/asynk/gdx/tabletop/ui/Assembly.java @@ -45,9 +45,9 @@ public abstract class Assembly extends Element return false; } - @Override public void update() + @Override public void taint() { - children.forEach( c -> c.update() ); + children.forEach( c -> c.taint() ); } @Override public void draw(Batch batch) diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Button.java b/core/src/ch/asynk/gdx/tabletop/ui/Button.java index cc9c6da..06688c9 100644 --- a/core/src/ch/asynk/gdx/tabletop/ui/Button.java +++ b/core/src/ch/asynk/gdx/tabletop/ui/Button.java @@ -8,11 +8,16 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer; public class Button extends Patch { private Label label; - private float spacing; + private float spacing; // for label alignment; public Button(BitmapFont font, NinePatch patch) { - this(font, patch, 0, 0); + this(font, patch, 0); + } + + public Button(BitmapFont font, NinePatch patch, float padding) + { + this(font, patch, padding, 0); } public Button(BitmapFont font, NinePatch patch, float padding, float spacing) @@ -27,12 +32,8 @@ public class Button extends Patch public void write(String text) { - write(text, getX(), getY()); - } - - public void write(String text, float x, float y) - { - label.write(text, x, y); + label.write(text); + this.tainted = true; // might impact Button's geometry } public void setLabelAlignment(Alignment alignment) @@ -40,19 +41,19 @@ public class Button extends Patch label.setAlignment(alignment); } - @Override public void update() + @Override public void computeGeometry() { - label.preUpdate(); // compute width and height - rect.width = label.getWidth() + 2 * (padding + spacing); - rect.height = label.getHeight() + 2 * (padding + spacing); - super.update(); - label.doUpdate(); // compute x and y - label.postUpdate(); // compute fx and fy + float dd = 2 * (padding + spacing); + rect.width = label.getWidth() + dd; + rect.height = label.getHeight() + dd; + super.computeGeometry(); + label.computeGeometry(); } @Override public void draw(Batch batch) { if (!visible) return; + if (tainted) computeGeometry(); super.draw(batch); label.draw(batch); } diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Element.java b/core/src/ch/asynk/gdx/tabletop/ui/Element.java index 17511a9..5b3c0fe 100644 --- a/core/src/ch/asynk/gdx/tabletop/ui/Element.java +++ b/core/src/ch/asynk/gdx/tabletop/ui/Element.java @@ -13,18 +13,20 @@ public abstract class Element implements Drawable, Touchable protected float padding; protected Element parent; protected Alignment alignment; - protected Rectangle rect; // drawing coordinates + protected Rectangle rect; // outer drawing coordinates protected float x, y; // given position + protected boolean tainted; // geometry must be computed protected Element() { this.blocked = false; this.visible = true; this.padding = 0; - this.rect = new Rectangle(0, 0, 0, 0); this.parent = null; this.alignment = alignment.RELATIVE; + this.rect = new Rectangle(0, 0, 0, 0); this.x = this.y = 0; + this.tainted = true; } @Override public final float getX() { return rect.x; } @@ -48,28 +50,37 @@ public abstract class Element implements Drawable, Touchable return rect.contains(x, y); } + public void taint() + { + this.tainted = true; + } + @Override public void setPosition(float x, float y, float w, float h) { this.x = x; this.y = y; - rect.width = w; - rect.height = h; - // rect.set(rec.x, y, w, h); + this.rect.width = w; + this.rect.height = h; + this.tainted = true; + // rect.(x,y) will be set in computeGeometry } public void setParent(Element parent) { this.parent = parent; + this.tainted = true; } public void setPadding(float padding) { this.padding = padding; + this.tainted = true; } public void setAlignment(Alignment alignment) { this.alignment = alignment; + this.tainted = true; } public final void translate(float dx, float dy) @@ -87,26 +98,18 @@ public abstract class Element implements Drawable, Touchable setPosition(x, y, rect.width, rect.height); } - protected void preUpdate() { } - protected void postUpdate() { } - protected void doUpdate() + protected void computeGeometry() { if (alignment == Alignment.ABSOLUTE || parent == null) { rect.x = x; rect.y = y; } else if (alignment == Alignment.RELATIVE) { - rect.x = x + parent.getInnerX(); + rect.x = x + parent.getInnerX(); rect.y = y + parent.getInnerX(); } else { rect.x = x + alignment.getX(parent, rect.width); rect.y = y + alignment.getY(parent, rect.height); } - } - - public void update() - { - preUpdate(); - doUpdate(); - postUpdate(); + this.tainted = false; } } diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Label.java b/core/src/ch/asynk/gdx/tabletop/ui/Label.java index d2b5fc6..55eab83 100644 --- a/core/src/ch/asynk/gdx/tabletop/ui/Label.java +++ b/core/src/ch/asynk/gdx/tabletop/ui/Label.java @@ -39,17 +39,15 @@ public class Label extends Element public void write(String text, float x, float y) { this.text = text; - setPosition(x, y); - } - - @Override protected void preUpdate() - { this.layout.setText(font, (text == null) ? "" : text); - super.setPosition(x, y, (layout.width + (2 * padding)), (layout.height + (2 * padding))); + this.rect.width = (layout.width + (2 * padding)); + this.rect.height = (layout.height + (2 * padding)); + this.tainted = true; } - @Override protected void postUpdate() + @Override protected void computeGeometry() { + super.computeGeometry(); fx = getInnerX(); fy = getInnerY() + layout.height; } @@ -57,6 +55,7 @@ public class Label extends Element @Override public void draw(Batch batch) { if (!visible) return; + if (tainted) computeGeometry(); font.draw(batch, layout, fx, fy); } } diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Patch.java b/core/src/ch/asynk/gdx/tabletop/ui/Patch.java index c012f70..a829ce0 100644 --- a/core/src/ch/asynk/gdx/tabletop/ui/Patch.java +++ b/core/src/ch/asynk/gdx/tabletop/ui/Patch.java @@ -17,6 +17,7 @@ public class Patch extends Element @Override public void draw(Batch batch) { if (!visible) return; + if (tainted) computeGeometry(); patch.draw(batch, getX(), getY(), getWidth(), getHeight()); } } diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Root.java b/core/src/ch/asynk/gdx/tabletop/ui/Root.java index f42a8df..99d63cf 100644 --- a/core/src/ch/asynk/gdx/tabletop/ui/Root.java +++ b/core/src/ch/asynk/gdx/tabletop/ui/Root.java @@ -11,6 +11,6 @@ public class Root extends Assembly public void resize(float width, float height) { setPosition(0, 0, width, height); - update(); + taint(); } } |