1
- import { Engine } from "../../Engine" ;
2
1
import { DisorderedArray } from "../../DisorderedArray" ;
2
+ import { Engine } from "../../Engine" ;
3
3
import { Platform } from "../../Platform" ;
4
4
import { SystemInfo } from "../../SystemInfo" ;
5
5
import { Keys } from "../enums/Keys" ;
@@ -24,25 +24,20 @@ export class KeyboardManager implements IInput {
24
24
/** @internal */
25
25
_curFrameUpList : DisorderedArray < Keys > = new DisorderedArray ( ) ;
26
26
27
+ // @internal
28
+ _target : EventTarget ;
27
29
private _engine : Engine ;
28
- private _htmlCanvas : HTMLCanvasElement ;
29
30
private _nativeEvents : KeyboardEvent [ ] = [ ] ;
30
- private _hadListener : boolean = false ;
31
31
32
32
/**
33
- * Create a KeyboardManager.
33
+ * @internal
34
34
*/
35
- constructor ( engine : Engine ) {
36
- // @ts -ignore
37
- const htmlCanvas = engine . _canvas . _webCanvas ;
35
+ constructor ( engine : Engine , target : EventTarget ) {
38
36
this . _engine = engine ;
39
- this . _htmlCanvas = htmlCanvas ;
40
- // Need to set tabIndex to make the canvas focus.
41
- htmlCanvas . tabIndex = htmlCanvas . tabIndex ;
37
+ this . _onBlur = this . _onBlur . bind ( this ) ;
42
38
this . _onKeyEvent = this . _onKeyEvent . bind ( this ) ;
43
- htmlCanvas . addEventListener ( "keydown" , this . _onKeyEvent ) ;
44
- htmlCanvas . addEventListener ( "keyup" , this . _onKeyEvent ) ;
45
- this . _hadListener = true ;
39
+ this . _target = target ;
40
+ this . _addEventListener ( ) ;
46
41
}
47
42
48
43
/**
@@ -101,42 +96,11 @@ export class KeyboardManager implements IInput {
101
96
}
102
97
}
103
98
104
- /**
105
- * @internal
106
- */
107
- _onFocus ( ) : void {
108
- if ( ! this . _hadListener ) {
109
- this . _htmlCanvas . addEventListener ( "keydown" , this . _onKeyEvent ) ;
110
- this . _htmlCanvas . addEventListener ( "keyup" , this . _onKeyEvent ) ;
111
- this . _hadListener = true ;
112
- }
113
- }
114
-
115
- /**
116
- * @internal
117
- */
118
- _onBlur ( ) : void {
119
- if ( this . _hadListener ) {
120
- this . _htmlCanvas . removeEventListener ( "keydown" , this . _onKeyEvent ) ;
121
- this . _htmlCanvas . removeEventListener ( "keyup" , this . _onKeyEvent ) ;
122
- this . _curHeldDownKeyToIndexMap . length = 0 ;
123
- this . _curFrameHeldDownList . length = 0 ;
124
- this . _curFrameDownList . length = 0 ;
125
- this . _curFrameUpList . length = 0 ;
126
- this . _nativeEvents . length = 0 ;
127
- this . _hadListener = false ;
128
- }
129
- }
130
-
131
99
/**
132
100
* @internal
133
101
*/
134
102
_destroy ( ) : void {
135
- if ( this . _hadListener ) {
136
- this . _htmlCanvas . removeEventListener ( "keydown" , this . _onKeyEvent ) ;
137
- this . _htmlCanvas . removeEventListener ( "keyup" , this . _onKeyEvent ) ;
138
- this . _hadListener = false ;
139
- }
103
+ this . _removeEventListener ( ) ;
140
104
this . _curHeldDownKeyToIndexMap . length = 0 ;
141
105
this . _curHeldDownKeyToIndexMap = null ;
142
106
this . _upKeyToFrameCountMap . length = 0 ;
@@ -151,11 +115,32 @@ export class KeyboardManager implements IInput {
151
115
this . _curFrameDownList = null ;
152
116
this . _curFrameUpList . length = 0 ;
153
117
this . _curFrameUpList = null ;
154
- this . _htmlCanvas = null ;
155
118
this . _engine = null ;
156
119
}
157
120
121
+ private _onBlur ( ) {
122
+ this . _curHeldDownKeyToIndexMap . length = 0 ;
123
+ this . _curFrameHeldDownList . length = 0 ;
124
+ this . _curFrameDownList . length = 0 ;
125
+ this . _curFrameUpList . length = 0 ;
126
+ this . _nativeEvents . length = 0 ;
127
+ }
128
+
158
129
private _onKeyEvent ( evt : KeyboardEvent ) : void {
159
130
this . _nativeEvents . push ( evt ) ;
160
131
}
132
+
133
+ private _addEventListener ( ) : void {
134
+ const { _target : target } = this ;
135
+ target . addEventListener ( "keydown" , this . _onKeyEvent ) ;
136
+ target . addEventListener ( "keyup" , this . _onKeyEvent ) ;
137
+ target . addEventListener ( "blur" , this . _onBlur ) ;
138
+ }
139
+
140
+ private _removeEventListener ( ) : void {
141
+ const { _target : target } = this ;
142
+ target . removeEventListener ( "keydown" , this . _onKeyEvent ) ;
143
+ target . removeEventListener ( "keyup" , this . _onKeyEvent ) ;
144
+ target . removeEventListener ( "blur" , this . _onBlur ) ;
145
+ }
161
146
}
0 commit comments