129 lines
4.2 KiB
Go
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
|
|
}
|