83 lines
1.7 KiB
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)
|
|
}
|