96 lines
1.9 KiB
Go
96 lines
1.9 KiB
Go
|
package tins2020
|
||
|
|
||
|
import "github.com/veandco/go-sdl2/sdl"
|
||
|
|
||
|
type DialogBase struct {
|
||
|
Container
|
||
|
|
||
|
content Proxy
|
||
|
close EventFn
|
||
|
}
|
||
|
|
||
|
type Dialog interface {
|
||
|
CloseDialog()
|
||
|
ShowDialog(EventFn)
|
||
|
}
|
||
|
|
||
|
func (d *DialogBase) CloseDialog() {
|
||
|
close := d.close
|
||
|
if close != nil {
|
||
|
close()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (d *DialogBase) SetContent(control Control) {
|
||
|
d.content.Proxied = control
|
||
|
}
|
||
|
|
||
|
func (d *DialogBase) ShowDialog(close EventFn) {
|
||
|
d.close = close
|
||
|
}
|
||
|
|
||
|
func (d *DialogBase) Init(ctx *Context) error {
|
||
|
d.AddChild(&d.content)
|
||
|
return d.Container.Init(ctx)
|
||
|
}
|
||
|
|
||
|
type LargeDialog struct {
|
||
|
DialogBase
|
||
|
|
||
|
title Label
|
||
|
close IconButton
|
||
|
}
|
||
|
|
||
|
func (d *LargeDialog) Arrange(ctx *Context, bounds Rectangle) {
|
||
|
const titleHeight = 64
|
||
|
d.ControlBase.Arrange(ctx, bounds)
|
||
|
d.title.Arrange(ctx, RectSize(bounds.X, bounds.Y, bounds.W, titleHeight))
|
||
|
d.close.Arrange(ctx, RectSize(bounds.W-64, 0, 64, 64))
|
||
|
d.content.Arrange(ctx, RectSize(bounds.X+titleHeight, 96, bounds.W-2*titleHeight, bounds.H-titleHeight))
|
||
|
}
|
||
|
|
||
|
func (d *LargeDialog) Init(ctx *Context) error {
|
||
|
d.title = Label{
|
||
|
Text: "Botanim",
|
||
|
FontName: "title",
|
||
|
Alignment: TextAlignmentCenter,
|
||
|
}
|
||
|
d.close = IconButton{
|
||
|
Icon: "control-cancel",
|
||
|
IconHover: HoverEffectColor,
|
||
|
IconWidth: 32,
|
||
|
}
|
||
|
d.close.OnLeftMouseButtonClick = EmptyEvent(d.CloseDialog)
|
||
|
d.AddChild(&d.title)
|
||
|
d.AddChild(&d.close)
|
||
|
return d.DialogBase.Init(ctx)
|
||
|
}
|
||
|
|
||
|
func (d *LargeDialog) Handle(ctx *Context, event sdl.Event) bool {
|
||
|
if d.DialogBase.Handle(ctx, event) {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
switch e := event.(type) {
|
||
|
case *sdl.KeyboardEvent:
|
||
|
if e.Type == sdl.KEYDOWN {
|
||
|
switch e.Keysym.Sym {
|
||
|
case sdl.K_ESCAPE:
|
||
|
d.CloseDialog()
|
||
|
return true
|
||
|
case sdl.K_RETURN:
|
||
|
d.CloseDialog()
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
func (d *LargeDialog) Render(ctx *Context) {
|
||
|
SetDrawColor(ctx.Renderer, MustHexColor("#356DAD"))
|
||
|
ctx.Renderer.FillRect(d.Bounds.SDLPtr())
|
||
|
|
||
|
d.DialogBase.Render(ctx)
|
||
|
}
|