This repository has been archived by the owner on Jul 28, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AbstractOpenGlWindow.go
103 lines (85 loc) · 3.32 KB
/
AbstractOpenGlWindow.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package env
import (
"github.com/inkyblackness/shocked-client/env/keys"
)
type keyDeferrer struct {
window *AbstractOpenGlWindow
}
func (def *keyDeferrer) Key(key keys.Key, modifier keys.Modifier) {
def.window.CallKey(key, modifier)
}
func (def *keyDeferrer) Modifier(modifier keys.Modifier) {
def.window.CallModifier(modifier)
}
// AbstractOpenGlWindow implements the common, basic functionality of OpenGlWindow
type AbstractOpenGlWindow struct {
keyBuffer *keys.StickyKeyBuffer
CallRender RenderCallback
CallResize ResizeCallback
CallOnMouseMove MouseMoveCallback
CallOnMouseButtonUp MouseButtonCallback
CallOnMouseButtonDown MouseButtonCallback
CallOnMouseScroll MouseScrollCallback
CallModifier ModifierCallback
CallKey KeyCallback
CallCharCallback CharCallback
CallFileDropCallback FileDropCallback
}
// InitAbstractOpenGlWindow returns an initialized instance.
func InitAbstractOpenGlWindow() AbstractOpenGlWindow {
return AbstractOpenGlWindow{
CallRender: func() {},
CallResize: func(int, int) {},
CallOnMouseMove: func(float32, float32) {},
CallOnMouseButtonUp: func(uint32, keys.Modifier) {},
CallOnMouseButtonDown: func(uint32, keys.Modifier) {},
CallKey: func(keys.Key, keys.Modifier) {},
CallModifier: func(keys.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 *AbstractOpenGlWindow) StickyKeyListener() keys.StickyKeyListener {
return &keyDeferrer{window}
}
// OnRender implements the OpenGlWindow interface.
func (window *AbstractOpenGlWindow) OnRender(callback RenderCallback) {
window.CallRender = callback
}
// OnResize implements the OpenGlWindow interface.
func (window *AbstractOpenGlWindow) OnResize(callback ResizeCallback) {
window.CallResize = callback
}
// OnMouseMove implements the OpenGlWindow interface.
func (window *AbstractOpenGlWindow) OnMouseMove(callback MouseMoveCallback) {
window.CallOnMouseMove = callback
}
// OnMouseButtonDown implements the OpenGlWindow interface.
func (window *AbstractOpenGlWindow) OnMouseButtonDown(callback MouseButtonCallback) {
window.CallOnMouseButtonDown = callback
}
// OnMouseButtonUp implements the OpenGlWindow interface.
func (window *AbstractOpenGlWindow) OnMouseButtonUp(callback MouseButtonCallback) {
window.CallOnMouseButtonUp = callback
}
// OnMouseScroll implements the OpenGlWindow interface.
func (window *AbstractOpenGlWindow) OnMouseScroll(callback MouseScrollCallback) {
window.CallOnMouseScroll = callback
}
// OnKey implements the OpenGlWindow interface
func (window *AbstractOpenGlWindow) OnKey(callback KeyCallback) {
window.CallKey = callback
}
// OnModifier implements the OpenGlWindow interface
func (window *AbstractOpenGlWindow) OnModifier(callback ModifierCallback) {
window.CallModifier = callback
}
// OnCharCallback implements the OpenGlWindow interface
func (window *AbstractOpenGlWindow) OnCharCallback(callback CharCallback) {
window.CallCharCallback = callback
}
// OnFileDropCallback implements the OpenGlWindow interface
func (window *AbstractOpenGlWindow) OnFileDropCallback(callback FileDropCallback) {
window.CallFileDropCallback = callback
}