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

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: Merge with trunk. 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 capsLocked"> 10 on-enable-dbl="enableDbl" attributes="keyset layout rows capsLocked">
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 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 repeatKey.cancel(); 291 repeatKey.cancel();
291 var toKeyset = detail.toKeyset; 292 var toKeyset = detail.toKeyset;
292 if (toKeyset) { 293 if (toKeyset) {
293 this.keyset = toKeyset; 294 this.keyset = toKeyset;
294 this.querySelector('#' + this.layout + '-' + this.keyset).nextKeyset = 295 this.querySelector('#' + this.layout + '-' + this.keyset).nextKeyset =
295 detail.nextKeyset; 296 detail.nextKeyset;
296 return; 297 return;
297 } 298 }
298 299
299 if (detail.repeat) { 300 if (detail.repeat) {
300 insertText(detail.char); 301 this.keyTyped(detail);
301 repeatKey.key = this.lastPressedKey; 302 repeatKey.key = this.lastPressedKey;
303 var self = this;
302 repeatKey.timer = setTimeout(function() { 304 repeatKey.timer = setTimeout(function() {
303 repeatKey.timer = undefined; 305 repeatKey.timer = undefined;
304 repeatKey.interval = setInterval(function() { 306 repeatKey.interval = setInterval(function() {
305 insertText(detail.char); 307 self.keyTyped(detail);
306 }, REPEAT_INTERVAL_MSEC); 308 }, REPEAT_INTERVAL_MSEC);
307 }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC)); 309 }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC));
308 } 310 }
309 }, 311 },
310 312
311 /** 313 /**
312 * Enable/start double click/tap event recognition. 314 * Enable/start double click/tap event recognition.
313 * @param {CustomEvent} event The enable-dbl event dispatched by 315 * @param {CustomEvent} event The enable-dbl event dispatched by
314 * kb-shift-key. 316 * kb-shift-key.
315 * @param {Object} detail The detail of pressed kb-shift-key. 317 * @param {Object} detail The detail of pressed kb-shift-key.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 this.voiceInput_.onDown(); 430 this.voiceInput_.onDown();
429 return; 431 return;
430 case '.': 432 case '.':
431 case '?': 433 case '?':
432 case '!': 434 case '!':
433 enterUpperOnSpace = true; 435 enterUpperOnSpace = true;
434 break; 436 break;
435 default: 437 default:
436 break; 438 break;
437 } 439 }
438 insertText(char); 440 if (char.length == 1)
441 this.keyTyped(detail);
442 else
443 insertText(char);
439 }, 444 },
440 445
441 /* 446 /*
442 * Handles key-longpress event that is sent by kb-key-base. 447 * Handles key-longpress event that is sent by kb-key-base.
443 * @param {CustomEvent} event The key-longpress event dispatched by 448 * @param {CustomEvent} event The key-longpress event dispatched by
444 * kb-key-base. 449 * kb-key-base.
445 * @param {Object} detail The detail of pressed key. 450 * @param {Object} detail The detail of pressed key.
446 */ 451 */
447 keyLongpress: function(event, detail) { 452 keyLongpress: function(event, detail) {
448 // If the gesture is long press, remove the pointermove listener. 453 // If the gesture is long press, remove the pointermove listener.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 cacheCapsLock: function() { 492 cacheCapsLock: function() {
488 var shift = this.querySelector('kb-shift-key'); 493 var shift = this.querySelector('kb-shift-key');
489 if (shift) { 494 if (shift) {
490 this.capsLock = { 'lockedCase' : shift.lockedCase, 495 this.capsLock = { 'lockedCase' : shift.lockedCase,
491 'unlockedCase' : shift.unlockedCase 496 'unlockedCase' : shift.unlockedCase
492 }; 497 };
493 } 498 }
494 }, 499 },
495 500
496 /** 501 /**
502 * Generates fabricated key events to simulate typing on a
503 * physical keyboard.
504 * @param {Object} detail Attributes of the key being typed.
505 */
506 keyTyped: function(detail) {
507 var builder = this.$.keyCodeMetadata;
508 sendKeyEvent(builder.createVirtualKeyEvent(detail, "keydown"));
509 sendKeyEvent(builder.createVirtualKeyEvent(detail, "keyup"));
510 },
511
512 /**
497 * Selects the default keyset for a layout. 513 * Selects the default keyset for a layout.
498 * @return {boolean} True if successful. This method can fail if the 514 * @return {boolean} True if successful. This method can fail if the
499 * keysets corresponding to the layout have not been injected. 515 * keysets corresponding to the layout have not been injected.
500 */ 516 */
501 selectDefaultKeyset: function() { 517 selectDefaultKeyset: function() {
502 var keysets = this.querySelectorAll('kb-keyset'); 518 var keysets = this.querySelectorAll('kb-keyset');
503 // Full name of the keyset is of the form 'layout-keyset'. 519 // Full name of the keyset is of the form 'layout-keyset'.
504 var regex = new RegExp('^' + this.layout + '-(.+)'); 520 var regex = new RegExp('^' + this.layout + '-(.+)');
505 var keysetsLoaded = false; 521 var keysetsLoaded = false;
506 for (var i = 0; i < keysets.length; i++) { 522 for (var i = 0; i < keysets.length; i++) {
507 var matches = keysets[i].id.match(regex); 523 var matches = keysets[i].id.match(regex);
508 if (matches && matches.length == REGEX_MATCH_COUNT) { 524 if (matches && matches.length == REGEX_MATCH_COUNT) {
509 keysetsLoaded = true; 525 keysetsLoaded = true;
510 if (keysets[i].isDefault) { 526 if (keysets[i].isDefault) {
511 this.keyset = matches[REGEX_KEYSET_INDEX]; 527 this.keyset = matches[REGEX_KEYSET_INDEX];
512 return true; 528 return true;
513 } 529 }
514 } 530 }
515 } 531 }
516 if (keysetsLoaded) 532 if (keysetsLoaded)
517 console.error('No default keyset found for ' + this.layout); 533 console.error('No default keyset found for ' + this.layout);
518 return false; 534 return false;
519 } 535 }
520 }); 536 });
521 </script> 537 </script>
522 </polymer-element> 538 </polymer-element>
523 539
OLDNEW
« no previous file with comments | « ui/keyboard/resources/elements/kb-key-codes.html ('k') | ui/keyboard/resources/webui/api_adapter.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698