gui/events.go

83 lines
1.7 KiB
Go

package gui
import "github.com/hajimehoshi/ebiten/v2"
type Events interface {
OnMouseClick(event MouseEvent) (consumed bool)
OnMouseMove(event MouseEvent) (consumed bool)
OnMouseScroll(event MouseEvent) (consumed bool)
}
type EventTmpl struct {
MouseClick func(event MouseEvent) (consumed bool)
MouseMove func(event MouseEvent) (consumed bool)
MouseScroll func(event MouseEvent) (consumed bool)
}
var _ Events = &EventTmpl{}
func (e *EventTmpl) OnMouseClick(event MouseEvent) (consumed bool) {
if e.MouseClick == nil {
return false
}
return e.MouseClick(event)
}
func (e *EventTmpl) OnMouseMove(event MouseEvent) (consumed bool) {
if e.MouseMove == nil {
return false
}
return e.MouseMove(event)
}
func (e *EventTmpl) OnMouseScroll(event MouseEvent) (consumed bool) {
if e.MouseScroll == nil {
return false
}
return e.MouseScroll(event)
}
type MouseEvent struct {
Position Point
Buttons ButtonMask
Wheel Point
}
func makeMouseEvent() MouseEvent {
return MouseEvent{
Position: P(ebiten.CursorPosition()),
Buttons: Buttons(),
Wheel: Pf(ebiten.Wheel()),
}
}
func (e MouseEvent) SubtractPos(p Point) MouseEvent {
e.Position = e.Position.Sub(p)
return e
}
func (e MouseEvent) AddPos(p Point) MouseEvent {
e.Position = e.Position.Add(p)
return e
}
func (e MouseEvent) IsScrollEvent() bool {
return e.Wheel.X != 0 || e.Wheel.Y != 0
}
func (e MouseEvent) HasMouseMoved(o MouseEvent) bool {
return e.Position != o.Position
}
func (e MouseEvent) Pressed(button MouseButton) bool {
return e.Buttons.Pressed(button)
}
func (e MouseEvent) JustPressed(button MouseButton) bool {
return e.Buttons.JustPressed(button)
}
func (e MouseEvent) Clicked(button MouseButton) bool {
return e.Buttons.Clicked(button)
}