Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(623)

Side by Side Diff: ui/keyboard/resources/elements/kb-keyboard.html

Issue 20145004: Switch from text insertion to key press and release events on the virtual k… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code cleanup. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 <!-- 1 <!--
2 -- Copyright 2013 The Chromium Authors. All rights reserved. 2 -- Copyright 2013 The Chromium Authors. All rights reserved.
3 -- Use of this source code is governed by a BSD-style license that can be 3 -- Use of this source code is governed by a BSD-style license that can be
4 -- found in the LICENSE file. 4 -- found in the LICENSE file.
5 --> 5 -->
6 6
7 <polymer-element name="kb-keyboard" on-key-over="keyOver" on-key-up="keyUp" 7 <polymer-element name="kb-keyboard" on-key-over="keyOver" on-key-up="keyUp"
8 on-key-down="keyDown" on-key-longpress="keyLongpress" on-pointerup="up" 8 on-key-down="keyDown" on-key-longpress="keyLongpress" on-pointerup="up"
9 on-pointerdown="down" on-enable-sel="enableSel" 9 on-pointerdown="down" on-enable-sel="enableSel"
10 on-enable-dbl="enableDbl" attributes="keyset layout rows"> 10 on-enable-dbl="enableDbl" attributes="keyset layout rows">
11 <template> 11 <template>
12 <style> 12 <style>
13 @host { 13 @host {
14 * { 14 * {
15 position: relative; 15 position: relative;
16 } 16 }
17 } 17 }
18 </style> 18 </style>
19 <!-- The ID for a keyset follows the naming convention of combining the 19 <!-- The ID for a keyset follows the naming convention of combining the
20 -- layout name with a base keyset name. This convention is used to 20 -- layout name with a base keyset name. This convention is used to
21 -- allow multiple layouts to be loaded (enablign fast switching) while 21 -- allow multiple layouts to be loaded (enablign fast switching) while
22 -- allowing the shift and spacebar keys to be common across multiple 22 -- allowing the shift and spacebar keys to be common across multiple
23 -- keyboard layouts. 23 -- keyboard layouts.
24 --> 24 -->
25 <content select="#{{layout}}-{{keyset}}"></content> 25 <content select="#{{layout}}-{{keyset}}"></content>
26 <kb-key-codes id="keyCodeMetadata"></kb-key-codes>
26 </template> 27 </template>
27 <script> 28 <script>
28 /** 29 /**
29 * The repeat delay in milliseconds before a key starts repeating. Use the 30 * The repeat delay in milliseconds before a key starts repeating. Use the
30 * same rate as Chromebook. 31 * same rate as Chromebook.
31 * (See chrome/browser/chromeos/language_preferences.cc) 32 * (See chrome/browser/chromeos/language_preferences.cc)
32 * @const 33 * @const
33 * @type {number} 34 * @type {number}
34 */ 35 */
35 var REPEAT_DELAY_MSEC = 500; 36 var REPEAT_DELAY_MSEC = 500;
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 repeatKey.cancel(); 292 repeatKey.cancel();
292 var toKeyset = detail.toKeyset; 293 var toKeyset = detail.toKeyset;
293 if (toKeyset) { 294 if (toKeyset) {
294 this.keyset = toKeyset; 295 this.keyset = toKeyset;
295 this.querySelector('#' + this.layout + '-' + this.keyset).nextKeyset = 296 this.querySelector('#' + this.layout + '-' + this.keyset).nextKeyset =
296 detail.nextKeyset; 297 detail.nextKeyset;
297 return; 298 return;
298 } 299 }
299 300
300 if (detail.repeat) { 301 if (detail.repeat) {
301 insertText(detail.char); 302 this.keyTyped(detail);
302 repeatKey.key = this.lastPressedKey; 303 repeatKey.key = this.lastPressedKey;
304 var self = this;
303 repeatKey.timer = setTimeout(function() { 305 repeatKey.timer = setTimeout(function() {
304 repeatKey.timer = undefined; 306 repeatKey.timer = undefined;
305 repeatKey.interval = setInterval(function() { 307 repeatKey.interval = setInterval(function() {
306 insertText(detail.char); 308 self.keyTyped(detail);
307 }, REPEAT_INTERVAL_MSEC); 309 }, REPEAT_INTERVAL_MSEC);
308 }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC)); 310 }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC));
309 } 311 }
310 }, 312 },
311 313
312 /** 314 /**
313 * Enable/start double click/tap event recognition. 315 * Enable/start double click/tap event recognition.
314 * @param {CustomEvent} event The enable-dbl event dispatched by 316 * @param {CustomEvent} event The enable-dbl event dispatched by
315 * kb-shift-key. 317 * kb-shift-key.
316 * @param {Object} detail The detail of pressed kb-shift-key. 318 * @param {Object} detail The detail of pressed kb-shift-key.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 this.voiceInput_.onDown(); 431 this.voiceInput_.onDown();
430 return; 432 return;
431 case '.': 433 case '.':
432 case '?': 434 case '?':
433 case '!': 435 case '!':
434 enterUpperOnSpace = true; 436 enterUpperOnSpace = true;
435 break; 437 break;
436 default: 438 default:
437 break; 439 break;
438 } 440 }
439 insertText(char); 441 if (char.length == 1)
442 this.keyTyped(detail);
443 else
444 insertText(char);
440 }, 445 },
441 446
442 /* 447 /*
443 * Handles key-longpress event that is sent by kb-key-base. 448 * Handles key-longpress event that is sent by kb-key-base.
444 * @param {CustomEvent} event The key-longpress event dispatched by 449 * @param {CustomEvent} event The key-longpress event dispatched by
445 * kb-key-base. 450 * kb-key-base.
446 * @param {Object} detail The detail of pressed key. 451 * @param {Object} detail The detail of pressed key.
447 */ 452 */
448 keyLongpress: function(event, detail) { 453 keyLongpress: function(event, detail) {
449 // If the gesture is long press, remove the pointermove listener. 454 // If the gesture is long press, remove the pointermove listener.
(...skipping 24 matching lines...) Expand all
474 if (keysets) { 479 if (keysets) {
475 keyboard.appendChild(flattenKeysets(keysets.content)); 480 keyboard.appendChild(flattenKeysets(keysets.content));
476 this.selectDefaultKeyset(); 481 this.selectDefaultKeyset();
477 } else { 482 } else {
478 console.error('Unable to find layout ' + this.layout); 483 console.error('Unable to find layout ' + this.layout);
479 } 484 }
480 } 485 }
481 }, 486 },
482 487
483 /** 488 /**
489 * Generates fabricated key events to simulate typing on a
490 * physical keyboard.
491 * @param {Object} detail Attributes of the key being typed.
492 */
493 keyTyped: function(detail) {
494 var builder = this.$.keyCodeMetadata;
495 sendKeyEvent(builder.CreateVirtualKeyEvent(detail, "keydown"));
496 sendKeyEvent(builder.CreateVirtualKeyEvent(detail, "keyup"));
497 },
498
499 /**
484 * Selects the default keyset for a layout. 500 * Selects the default keyset for a layout.
485 * @return {boolean} True if successful. This method can fail if the 501 * @return {boolean} True if successful. This method can fail if the
486 * keysets corresponding to the layout have not been injected. 502 * keysets corresponding to the layout have not been injected.
487 */ 503 */
488 selectDefaultKeyset: function() { 504 selectDefaultKeyset: function() {
489 var keysets = this.querySelectorAll('kb-keyset'); 505 var keysets = this.querySelectorAll('kb-keyset');
490 // Full name of the keyset is of the form 'layout-keyset'. 506 // Full name of the keyset is of the form 'layout-keyset'.
491 var regex = new RegExp('^' + this.layout + '-(.+)'); 507 var regex = new RegExp('^' + this.layout + '-(.+)');
492 var keysetsLoaded = false; 508 var keysetsLoaded = false;
493 for (var i = 0; i < keysets.length; i++) { 509 for (var i = 0; i < keysets.length; i++) {
494 var matches = keysets[i].id.match(regex); 510 var matches = keysets[i].id.match(regex);
495 if (matches && matches.length == REGEX_MATCH_COUNT) { 511 if (matches && matches.length == REGEX_MATCH_COUNT) {
496 keysetsLoaded = true; 512 keysetsLoaded = true;
497 if (keysets[i].isDefault) { 513 if (keysets[i].isDefault) {
498 this.keyset = matches[REGEX_KEYSET_INDEX]; 514 this.keyset = matches[REGEX_KEYSET_INDEX];
499 return true; 515 return true;
500 } 516 }
501 } 517 }
502 } 518 }
503 if (keysetsLoaded) 519 if (keysetsLoaded)
504 console.error('No default keyset found for ' + this.layout); 520 console.error('No default keyset found for ' + this.layout);
505 return false; 521 return false;
506 } 522 }
507 }); 523 });
508 </script> 524 </script>
509 </polymer-element> 525 </polymer-element>
510 526
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698