package ui

import "opslag.de/schobers/geom"

type DisplayCloseEvent struct {
	EventBase
}

type DisplayResizeEvent struct {
	EventBase
	Bounds geom.RectangleF32
}

type Event interface {
	Stamp() float64
}

type EventBase struct {
	StampInSeconds float64
}

func (e *EventBase) Stamp() float64 {
	return e.StampInSeconds
}

type KeyModifier int

const (
	KeyModifierNone  KeyModifier = 0
	KeyModifierShift             = 1 << iota
	KeyModifierControl
	KeyModifierAlt
	KeyModifierOSCommand
)

type KeyDownEvent struct {
	EventBase
	Key       Key
	Modifiers KeyModifier
}

type KeyUpEvent struct {
	EventBase
	Key       Key
	Modifiers KeyModifier
}

type MouseButton int

const (
	MouseButtonLeft   MouseButton = 1
	MouseButtonRight  MouseButton = 2
	MouseButtonMiddle MouseButton = 3
)

type MouseButtonDownEvent struct {
	MouseEvent
	Button MouseButton
}

type MouseButtonUpEvent struct {
	MouseEvent
	Button MouseButton
}

type MouseEnterEvent struct {
	MouseEvent
}

type MouseEvent struct {
	EventBase
	X, Y float32
}

func (e *MouseEvent) Pos() geom.PointF32 {
	return geom.PtF32(e.X, e.Y)
}

type MouseLeaveEvent struct {
	MouseEvent
}

type MouseMoveEvent struct {
	MouseEvent
	MouseWheel float32
}

type RefreshEvent struct {
	EventBase
}

type TextInputEvent struct {
	EventBase
	Character rune
}