ux stuff
This commit is contained in:
76
common/elements/v1/button.go
Normal file
76
common/elements/v1/button.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package elements
|
||||
|
||||
import (
|
||||
"context"
|
||||
"image/color"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
"github.com/hajimehoshi/ebiten/v2/vector"
|
||||
"golang.org/x/image/font"
|
||||
)
|
||||
import "git.vezzani.net/ben/games/common/ux/v1"
|
||||
|
||||
type XAlign int
|
||||
type YAlign int
|
||||
|
||||
const (
|
||||
AlignCente XAlign = iota
|
||||
AlignLeft
|
||||
AlignRight
|
||||
)
|
||||
|
||||
const (
|
||||
AlignCenter YAlign = iota
|
||||
AlignTop
|
||||
AlignBottom
|
||||
)
|
||||
|
||||
type Button struct {
|
||||
mouseHandler
|
||||
Block
|
||||
Label string
|
||||
OnClick func() error
|
||||
OnRightClick func() error
|
||||
Style struct {
|
||||
MouseDownColor *color.Color
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Button) HandleClick(_ MouseState) error {
|
||||
if b.OnClick == nil {
|
||||
return nil
|
||||
}
|
||||
return b.OnClick()
|
||||
}
|
||||
|
||||
func (b *Button) getFont() font.Face {
|
||||
if b.Block.Style.Font == nil {
|
||||
return ux.FontFace
|
||||
}
|
||||
|
||||
return *b.Block.Style.Font
|
||||
}
|
||||
|
||||
func (b *Button) backgroundColor() color.Color {
|
||||
var c *color.Color
|
||||
if b.Block.Style.BackgroundColor != nil {
|
||||
c = b.Block.Style.BackgroundColor
|
||||
} else {
|
||||
c = &ux.BackgroundColor
|
||||
}
|
||||
|
||||
if (b.mouseState.RightDown || b.mouseState.LeftDown) && b.Style.MouseDownColor != nil {
|
||||
c = b.Style.MouseDownColor
|
||||
}
|
||||
|
||||
return *c
|
||||
}
|
||||
|
||||
func (b *Button) Draw(ctx context.Context, image *ebiten.Image) error {
|
||||
xz, yz := GetZero(ctx)
|
||||
w, h := b.size(ctx)
|
||||
|
||||
vector.StrokeRect(image, xz, yz, w, h, 1, b.backgroundColor(), true)
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user