@@ -71,6 +71,58 @@ func CreateWindow(_, _ int, title string, monitor *Monitor, share *Window) (*Win
71
71
w .Context = gl
72
72
}
73
73
74
+ document .AddEventListener ("keydown" , false , func (event dom.Event ) {
75
+ if w .keyCallback == nil {
76
+ return
77
+ }
78
+ ke := event .(* dom.KeyboardEvent )
79
+
80
+ action := Press
81
+ if ke .Repeat {
82
+ action = Repeat
83
+ }
84
+
85
+ mods := ModifierKey (0 ) // TODO: ke.CtrlKey && !ke.AltKey && !ke.MetaKey && !ke.ShiftKey.
86
+
87
+ switch {
88
+ case ke .KeyCode == 13 : // Enter.
89
+ case ke .KeyCode == 27 : // Escape.
90
+ case ke .KeyCode == 49 :
91
+ w .keyCallback (w , Key1 , - 1 , action , mods )
92
+ case ke .KeyCode == 50 :
93
+ w .keyCallback (w , Key2 , - 1 , action , mods )
94
+ case ke .KeyCode == 51 :
95
+ w .keyCallback (w , Key3 , - 1 , action , mods )
96
+ default :
97
+ fmt .Println ("Unknown KeyCode:" , ke .KeyCode )
98
+ }
99
+
100
+ ke .PreventDefault ()
101
+ })
102
+ document .AddEventListener ("keyup" , false , func (event dom.Event ) {
103
+ if w .keyCallback == nil {
104
+ return
105
+ }
106
+ ke := event .(* dom.KeyboardEvent )
107
+
108
+ mods := ModifierKey (0 ) // TODO: ke.CtrlKey && !ke.AltKey && !ke.MetaKey && !ke.ShiftKey.
109
+
110
+ switch {
111
+ case ke .KeyCode == 13 : // Enter.
112
+ case ke .KeyCode == 27 : // Escape.
113
+ case ke .KeyCode == 49 :
114
+ w .keyCallback (w , Key1 , - 1 , Release , mods )
115
+ case ke .KeyCode == 50 :
116
+ w .keyCallback (w , Key2 , - 1 , Release , mods )
117
+ case ke .KeyCode == 51 :
118
+ w .keyCallback (w , Key3 , - 1 , Release , mods )
119
+ default :
120
+ fmt .Println ("Unknown KeyCode:" , ke .KeyCode )
121
+ }
122
+
123
+ ke .PreventDefault ()
124
+ })
125
+
74
126
document .AddEventListener ("mousedown" , false , func (event dom.Event ) {
75
127
me := event .(* dom.MouseEvent )
76
128
if ! (me .Button >= 0 && me .Button <= 2 ) {
@@ -146,17 +198,24 @@ func CreateWindow(_, _ int, title string, monitor *Monitor, share *Window) (*Win
146
198
return w , nil
147
199
}
148
200
201
+ func SwapInterval (interval int ) error {
202
+ // TODO: Implement.
203
+ return nil
204
+ }
205
+
149
206
type Window struct {
150
207
Context * webgl.Context
151
208
152
209
canvas * dom.HTMLCanvasElement
153
210
211
+ cursorMode int
154
212
cursorPosition [2 ]float64
155
213
mouseButton [3 ]Action
156
214
157
215
cursorPositionCallback CursorPositionCallback
158
216
mouseMovementCallback MouseMovementCallback
159
217
mouseButtonCallback MouseButtonCallback
218
+ keyCallback KeyCallback
160
219
161
220
touches js.Object // Hacky mouse-emulation-via-touch.
162
221
}
@@ -190,6 +249,29 @@ func (w *Window) SetMouseMovementCallback(cbfun MouseMovementCallback) (previous
190
249
return nil , nil
191
250
}
192
251
252
+ type KeyCallback func (w * Window , key Key , scancode int , action Action , mods ModifierKey )
253
+
254
+ func (w * Window ) SetKeyCallback (cbfun KeyCallback ) (previous KeyCallback , err error ) {
255
+ w .keyCallback = cbfun
256
+
257
+ // TODO: Handle previous.
258
+ return nil , nil
259
+ }
260
+
261
+ type CharCallback func (w * Window , char rune )
262
+
263
+ func (w * Window ) SetCharCallback (cbfun CharCallback ) (previous CharCallback , err error ) {
264
+ // TODO.
265
+ return nil , nil
266
+ }
267
+
268
+ type ScrollCallback func (w * Window , xoff float64 , yoff float64 )
269
+
270
+ func (w * Window ) SetScrollCallback (cbfun ScrollCallback ) (previous ScrollCallback , err error ) {
271
+ // TODO.
272
+ return nil , nil
273
+ }
274
+
193
275
type MouseButtonCallback func (w * Window , button MouseButton , action Action , mods ModifierKey )
194
276
195
277
func (w * Window ) SetMouseButtonCallback (cbfun MouseButtonCallback ) (previous MouseButtonCallback , err error ) {
@@ -284,7 +366,12 @@ func (w *Window) GetMouseButton(button MouseButton) (Action, error) {
284
366
}
285
367
286
368
func (w * Window ) GetInputMode (mode InputMode ) (int , error ) {
287
- return 0 , errors .New ("not yet impl" )
369
+ switch mode {
370
+ case Cursor :
371
+ return w .cursorMode , nil
372
+ default :
373
+ return 0 , errors .New ("not yet impl" )
374
+ }
288
375
}
289
376
290
377
var ErrInvalidParameter = errors .New ("invalid parameter" )
@@ -295,14 +382,17 @@ func (w *Window) SetInputMode(mode InputMode, value int) error {
295
382
case Cursor :
296
383
switch value {
297
384
case CursorNormal :
385
+ w .cursorMode = value
298
386
document .Underlying ().Call ("exitPointerLock" )
299
387
w .canvas .Style ().SetProperty ("cursor" , "initial" , "" )
300
388
return nil
301
389
case CursorHidden :
390
+ w .cursorMode = value
302
391
document .Underlying ().Call ("exitPointerLock" )
303
392
w .canvas .Style ().SetProperty ("cursor" , "none" , "" )
304
393
return nil
305
394
case CursorDisabled :
395
+ w .cursorMode = value
306
396
w .canvas .Underlying ().Call ("requestPointerLock" )
307
397
return nil
308
398
default :
@@ -322,6 +412,9 @@ type Key int
322
412
const (
323
413
KeyLeftShift Key = 340
324
414
KeyRightShift Key = 344
415
+ Key1 Key = 49
416
+ Key2 Key = 50
417
+ Key3 Key = 51
325
418
)
326
419
327
420
type MouseButton int
0 commit comments