diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2018-10-01 14:44:53 +0200 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2018-10-01 14:44:53 +0200 | 
| commit | 24ebbfb2e0905e168e4269b968d563e9ee05d3b0 (patch) | |
| tree | 57511f50112ba4bef8c2e921cd720d514912bb4c /core/src | |
| parent | 2fe68d502ebb92e45f33a24e367bf18cb592d0fd (diff) | |
| download | gdx-boardgame-24ebbfb2e0905e168e4269b968d563e9ee05d3b0.zip gdx-boardgame-24ebbfb2e0905e168e4269b968d563e9ee05d3b0.tar.gz  | |
add ui/Menu
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/ch/asynk/gdx/tabletop/ui/Menu.java | 126 | 
1 files changed, 126 insertions, 0 deletions
diff --git a/core/src/ch/asynk/gdx/tabletop/ui/Menu.java b/core/src/ch/asynk/gdx/tabletop/ui/Menu.java new file mode 100644 index 0000000..38a15dd --- /dev/null +++ b/core/src/ch/asynk/gdx/tabletop/ui/Menu.java @@ -0,0 +1,126 @@ +package ch.asynk.gdx.tabletop.ui; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.NinePatch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; + +public class Menu extends Patch +{ +    private Label title; +    private Label[] entries; +    private Integer touchedItem; + +    private int entriesOffset;      // horizontal offset +    private int titleSpacing;       // between title and entries +    private int entriesSpacing;     // between entries + +    public Menu(BitmapFont font, NinePatch patch, String title, String[] entries) +    { +        super(patch); +        this.touchedItem = null; +        setTitle(font, title); +        setEntries(font, entries); +    } + +    public void setTitle(BitmapFont font, String title) +    { +        this.title = new Label(font); +        this.title.write(title); +        this.tainted = true; +    } + +    public void setEntries(BitmapFont font, String[] entries) +    { +        this.entries = new Label[entries.length]; +        for (int i = 0; i < entries.length; i++) { +            Label l = new Label(font); +            l.write(entries[i]); +            this.entries[i] = l; +        } +        this.tainted = true; +    } + +    public void setLabelsOffset(int entriesOffset) +    { +        this.entriesOffset = entriesOffset; +        this.tainted = true; +    } + +    public void setPaddings(int titlePadding, int labelPadding) +    { +        this.title.setPadding(titlePadding); +        for (Label label : entries) { +            label.setPadding(labelPadding); +        } +        this.tainted = true; +    } + +    public void setSpacings(int titleSpacing, int entriesSpacing) +    { +        this.titleSpacing = titleSpacing; +        this.entriesSpacing = entriesSpacing; +        this.tainted = true; +    } + +    @Override public void computeGeometry() +    { +        title.computeGeometry(); +        float h = title.getHeight(); +        float w = title.getWidth(); +        for (Label label : entries) { +            label.computeGeometry(); +            h += label.getHeight(); +            float t = label.getWidth() + entriesOffset; +            if (t > w) +                w = t; +        } +        h += (titleSpacing + (entriesSpacing * (entries.length - 1)) + (2 * padding)); +        w += (2 * padding); + +        rect.width = w; +        rect.height = h; +        super.computeGeometry(); + +        float x = getInnerX(); +        float y = getInnerY(); + +        // setPosition() will trigger computeGeometry() from within draw() +        for (int i = entries.length - 1; i >= 0; i--) { +            entries[i].setPosition(x + entriesOffset, y); +            y += entries[i].getHeight() + entriesSpacing; +        } +        y -= entriesSpacing; +        y += titleSpacing; +        title.setPosition(x, y); +    } + +    public Integer touched() +    { +        return touchedItem; +    } + +    @Override public boolean touch(float x, float y) +    { +        touchedItem = null; +        if (super.touch(x, y)) { +            for (int i = 0; i < entries.length; i++) { +                if (entries[i].touch(x, y)) { +                    touchedItem = i; +                    return true; +                } +            } +        } +        return false; +    } + +    @Override public void draw(Batch batch) +    { +        if (!visible) return; +        if (tainted) computeGeometry(); +        super.draw(batch); +        title.draw(batch); +        for (Label label : entries) { +            label.draw(batch); +        } +    } +}  | 
