@@ -12,7 +12,7 @@ use std::rc::Rc;
12
12
13
13
use wasm_bindgen:: { closure:: Closure , JsCast } ;
14
14
use web_sys:: {
15
- AddEventListenerOptions , Event , FocusEvent , HtmlCanvasElement , KeyboardEvent ,
15
+ AddEventListenerOptions , CompositionEvent , Event , FocusEvent , HtmlCanvasElement , KeyboardEvent ,
16
16
MediaQueryListEvent , MouseEvent , WheelEvent ,
17
17
} ;
18
18
@@ -26,7 +26,7 @@ pub struct Canvas {
26
26
on_blur : Option < EventListenerHandle < dyn FnMut ( FocusEvent ) > > ,
27
27
on_keyboard_release : Option < EventListenerHandle < dyn FnMut ( KeyboardEvent ) > > ,
28
28
on_keyboard_press : Option < EventListenerHandle < dyn FnMut ( KeyboardEvent ) > > ,
29
- on_received_character : Option < EventListenerHandle < dyn FnMut ( KeyboardEvent ) > > ,
29
+ on_composition_end : Option < EventListenerHandle < dyn FnMut ( CompositionEvent ) > > ,
30
30
on_mouse_wheel : Option < EventListenerHandle < dyn FnMut ( WheelEvent ) > > ,
31
31
on_fullscreen_change : Option < EventListenerHandle < dyn FnMut ( Event ) > > ,
32
32
on_dark_mode : Option < MediaQueryListHandle > ,
@@ -82,7 +82,7 @@ impl Canvas {
82
82
on_focus : None ,
83
83
on_keyboard_release : None ,
84
84
on_keyboard_press : None ,
85
- on_received_character : None ,
85
+ on_composition_end : None ,
86
86
on_mouse_wheel : None ,
87
87
on_fullscreen_change : None ,
88
88
on_dark_mode : None ,
@@ -175,17 +175,7 @@ impl Canvas {
175
175
self . on_keyboard_press = Some ( self . common . add_user_event (
176
176
"keydown" ,
177
177
move |event : KeyboardEvent | {
178
- // event.prevent_default() would suppress subsequent on_received_character() calls. That
179
- // supression is correct for key sequences like Tab/Shift-Tab, Ctrl+R, PgUp/Down to
180
- // scroll, etc. We should not do it for key sequences that result in meaningful character
181
- // input though.
182
- let event_key = & event. key ( ) ;
183
- let is_key_string = event_key. len ( ) == 1 || !event_key. is_ascii ( ) ;
184
- let is_shortcut_modifiers =
185
- ( event. ctrl_key ( ) || event. alt_key ( ) ) && !event. get_modifier_state ( "AltGr" ) ;
186
- if !is_key_string || is_shortcut_modifiers {
187
- event. prevent_default ( ) ;
188
- }
178
+ event. prevent_default ( ) ;
189
179
handler (
190
180
event:: key_code ( & event) ,
191
181
event:: key ( & event) ,
@@ -197,24 +187,17 @@ impl Canvas {
197
187
) ) ;
198
188
}
199
189
200
- // pub fn on_received_character<F>(&mut self, mut handler: F)
201
- // where
202
- // F: 'static + FnMut(char),
203
- // {
204
- // // TODO: Use `beforeinput`.
205
- // //
206
- // // The `keypress` event is deprecated, but there does not seem to be a
207
- // // viable/compatible alternative as of now. `beforeinput` is still widely
208
- // // unsupported.
209
- // self.on_received_character = Some(self.common.add_user_event(
210
- // "keypress",
211
- // move |event: KeyboardEvent| {
212
- // // Supress further handling to stop keys like the space key from scrolling the page.
213
- // event.prevent_default();
214
- // handler(event::codepoint(&event));
215
- // },
216
- // ));
217
- // }
190
+ pub fn on_composition_end < F > ( & mut self , mut handler : F )
191
+ where
192
+ F : ' static + FnMut ( Option < String > ) ,
193
+ {
194
+ self . on_composition_end = Some ( self . common . add_user_event (
195
+ "compositionend" ,
196
+ move |event : CompositionEvent | {
197
+ handler ( event. data ( ) ) ;
198
+ } ,
199
+ ) ) ;
200
+ }
218
201
219
202
pub fn on_cursor_leave < F > ( & mut self , handler : F )
220
203
where
@@ -313,7 +296,6 @@ impl Canvas {
313
296
self . on_blur = None ;
314
297
self . on_keyboard_release = None ;
315
298
self . on_keyboard_press = None ;
316
- self . on_received_character = None ;
317
299
self . on_mouse_wheel = None ;
318
300
self . on_fullscreen_change = None ;
319
301
self . on_dark_mode = None ;
0 commit comments