diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-06-06 16:49:33 -0500 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-07-03 22:01:22 -0400 |
| commit | 74d101451fbd0d6678ffd26689cf378dafb4d31f (patch) | |
| tree | 2a9945932aeeaf79c2b60fd830b5dfbc0119ec65 | |
| parent | 154cf56c5deafb8bcbdef925775c9c565d7f6362 (diff) | |
| download | muhqs-game-74d101451fbd0d6678ffd26689cf378dafb4d31f.tar.gz muhqs-game-74d101451fbd0d6678ffd26689cf378dafb4d31f.zip | |
add toggable card view
| -rw-r--r-- | go/ui/cardView.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/go/ui/cardView.go b/go/ui/cardView.go index a1c004c5..f30b811c 100644 --- a/go/ui/cardView.go +++ b/go/ui/cardView.go @@ -44,3 +44,57 @@ func (cv *CardView) render() *ebiten.Image { img.DrawImage(card, op) return img } + +type ToggleCardView struct { + EventHandlersMap + cv *CardView + tgglBtn *SimpleButton + expanded bool +} + +func NewToggleCardView(x, y, wdth, hght int, card string) *ToggleCardView { + cv := &ToggleCardView{ + EventHandlersMap: NewEventHandlersMap(), + cv: NewScaledCardView(x, y, wdth, hght, card), + expanded: true} + + cv.tgglBtn = NewSimpleButton(x, y+10, 80, 50, ">", func(b *SimpleButton) { + shift := float64(cv.cv.Width - 80) + if cv.expanded { + b.label = "<" + cv.cv.Op.GeoM.Translate(shift, 0) + cv.tgglBtn.X = cv.tgglBtn.X + int(shift) - 20 + } else { + b.label = ">" + cv.cv.Op.GeoM.Reset() + cv.tgglBtn.X = cv.tgglBtn.X - int(shift) + 20 + } + cv.tgglBtn.ForceRedraw() + cv.expanded = !cv.expanded + }) + return cv +} + +func (cv *ToggleCardView) Draw(screen *ebiten.Image) { + cv.cv.Draw(screen) + cv.tgglBtn.Draw(screen) +} + +func (cv *ToggleCardView) Layout() (int, int) { + return cv.cv.Layout() +} + +func (cv *ToggleCardView) Contains(x, y int) bool { + return cv.cv.Contains(x, y) +} + +func (cv *ToggleCardView) FindObjectAt(x, y int) interface{} { + return cv.cv.FindObjectAt(x, y) +} + +func (*ToggleCardView) IsClickable() bool { return true } +func (cv *ToggleCardView) Click(x, y int) { + if cv.tgglBtn.Contains(x, y) { + cv.tgglBtn.Click(x, y) + } +} |
