Files
questshock/modding/hacked/ui/opengl/WindowEventDispatcher.go
T

129 lines
4.2 KiB
Go

package opengl
import (
"github.com/inkyblackness/hacked/ui/input"
)
type keyDeferrer struct {
window *WindowEventDispatcher
}
func (def *keyDeferrer) KeyPress(key input.Key, modifier input.Modifier) {
def.window.CallKeyPress(key, modifier)
}
func (def *keyDeferrer) KeyRelease(key input.Key, modifier input.Modifier) {
def.window.CallKeyRelease(key, modifier)
}
func (def *keyDeferrer) Modifier(modifier input.Modifier) {
def.window.CallModifier(modifier)
}
// WindowEventDispatcher implements the common, basic functionality of Window.
type WindowEventDispatcher struct {
CallClosing ClosingCallback
CallClosed ClosedCallback
CallRender RenderCallback
CallResize ResizeCallback
CallOnMouseMove MouseMoveCallback
CallOnMouseButtonUp MouseButtonCallback
CallOnMouseButtonDown MouseButtonCallback
CallOnMouseScroll MouseScrollCallback
CallModifier ModifierCallback
CallKeyPress KeyCallback
CallKeyRelease KeyCallback
CallCharCallback CharCallback
CallFileDropCallback FileDropCallback
}
// NullWindowEventDispatcher returns an initialized instance with empty callbacks.
func NullWindowEventDispatcher() WindowEventDispatcher {
return WindowEventDispatcher{
CallClosing: func() {},
CallClosed: func() {},
CallRender: func() {},
CallResize: func(int, int) {},
CallOnMouseMove: func(float32, float32) {},
CallOnMouseButtonUp: func(uint32, input.Modifier) {},
CallOnMouseButtonDown: func(uint32, input.Modifier) {},
CallOnMouseScroll: func(float32, float32) {},
CallKeyPress: func(input.Key, input.Modifier) {},
CallKeyRelease: func(input.Key, input.Modifier) {},
CallModifier: func(input.Modifier) {},
CallCharCallback: func(rune) {},
CallFileDropCallback: func([]string) {},
}
}
// StickyKeyListener returns an instance of a listener acting as an adapter
// for the key-down/-up callbacks.
func (window *WindowEventDispatcher) StickyKeyListener() input.StickyKeyListener {
return &keyDeferrer{window: window}
}
// OnClosing implements the Window interface.
func (window *WindowEventDispatcher) OnClosing(callback ClosingCallback) {
window.CallClosing = callback
}
// OnClosed implements the Window interface.
func (window *WindowEventDispatcher) OnClosed(callback ClosedCallback) {
window.CallClosed = callback
}
// OnRender implements the Window interface.
func (window *WindowEventDispatcher) OnRender(callback RenderCallback) {
window.CallRender = callback
}
// OnResize implements the Window interface.
func (window *WindowEventDispatcher) OnResize(callback ResizeCallback) {
window.CallResize = callback
}
// OnMouseMove implements the Window interface.
func (window *WindowEventDispatcher) OnMouseMove(callback MouseMoveCallback) {
window.CallOnMouseMove = callback
}
// OnMouseButtonDown implements the Window interface.
func (window *WindowEventDispatcher) OnMouseButtonDown(callback MouseButtonCallback) {
window.CallOnMouseButtonDown = callback
}
// OnMouseButtonUp implements the Window interface.
func (window *WindowEventDispatcher) OnMouseButtonUp(callback MouseButtonCallback) {
window.CallOnMouseButtonUp = callback
}
// OnMouseScroll implements the Window interface.
func (window *WindowEventDispatcher) OnMouseScroll(callback MouseScrollCallback) {
window.CallOnMouseScroll = callback
}
// OnKeyPress implements the Window interface.
func (window *WindowEventDispatcher) OnKeyPress(callback KeyCallback) {
window.CallKeyPress = callback
}
// OnKeyRelease implements the Window interface.
func (window *WindowEventDispatcher) OnKeyRelease(callback KeyCallback) {
window.CallKeyRelease = callback
}
// OnModifier implements the WindowEventDispatcher interface.
func (window *WindowEventDispatcher) OnModifier(callback ModifierCallback) {
window.CallModifier = callback
}
// OnCharCallback implements the Window interface.
func (window *WindowEventDispatcher) OnCharCallback(callback CharCallback) {
window.CallCharCallback = callback
}
// OnFileDropCallback implements the Window interface.
func (window *WindowEventDispatcher) OnFileDropCallback(callback FileDropCallback) {
window.CallFileDropCallback = callback
}