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

Side by Side Diff: chrome/browser/resources/keyboard_overlay.js

Issue 6873045: Fix the problem that releasing a key after pressing multiple modifiers corrupts keyboard overlay (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: remove redandunt functions, variables Created 9 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var BASE_KEYBOARD = { 5 var BASE_KEYBOARD = {
6 top: 0, 6 top: 0,
7 left: 0, 7 left: 0,
8 width: 1237, 8 width: 1237,
9 height: 514 9 height: 514
10 }; 10 };
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 return result; 113 return result;
114 } 114 }
115 115
116 /** 116 /**
117 * Returns a list of modifiers from the key event. 117 * Returns a list of modifiers from the key event.
118 */ 118 */
119 function getModifiers(e) { 119 function getModifiers(e) {
120 if (!e) { 120 if (!e) {
121 return []; 121 return [];
122 } 122 }
123 var modifiers = []; 123 var isKeyDown = (e.type == 'keydown');
124 if (e.keyCode == 16 || e.shiftKey) { 124 var keyCodeToModifier = {16: 'SHIFT', 17: 'CTRL', 18: 'ALT'};
125 modifiers.push('SHIFT'); 125 var modifierWithKeyCode = keyCodeToModifier[e.keyCode];
126 var isPressed = {'SHIFT': e.shiftKey, 'CTRL': e.ctrlKey, 'ALT': e.altKey};
127 // if e.keyCode is one of Shift, Ctrl and Alt, isPressed should
128 // be changed because the key currently pressed
129 // does not affect the values of e.shiftKey, e.ctrlKey and e.altKey
130 if(modifierWithKeyCode){
131 isPressed[modifierWithKeyCode] = isKeyDown;
126 } 132 }
127 if (e.keyCode == 17 || e.ctrlKey) { 133 // make the result array
128 modifiers.push('CTRL'); 134 return ['SHIFT', 'CTRL', 'ALT'].filter(
129 } 135 function(modifier) {
130 if (e.keyCode == 18 || e.altKey) { 136 return isPressed[modifier];
131 modifiers.push('ALT'); 137 }).sort();
132 }
133 return modifiers.sort();
134 } 138 }
135 139
136 /** 140 /**
137 * Returns an ID of the key. 141 * Returns an ID of the key.
138 */ 142 */
139 function keyId(identifier, i) { 143 function keyId(identifier, i) {
140 return identifier + '-key-' + i; 144 return identifier + '-key-' + i;
141 } 145 }
142 146
143 /** 147 /**
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 if (pos && pos.length > 0) { 262 if (pos && pos.length > 0) {
259 chars.push(hex2char(pos)); 263 chars.push(hex2char(pos));
260 } 264 }
261 } 265 }
262 return chars.join(' '); 266 return chars.join(' ');
263 } 267 }
264 268
265 /** 269 /**
266 * Updates the whole keyboard. 270 * Updates the whole keyboard.
267 */ 271 */
268 function update(e) { 272 function update(modifiers) {
269 var modifiers = getModifiers(e);
270 var instructions = document.getElementById('instructions'); 273 var instructions = document.getElementById('instructions');
271 if (modifiers.length == 0) { 274 if (modifiers.length == 0) {
272 instructions.style.visibility = 'visible'; 275 instructions.style.visibility = 'visible';
273 } else { 276 } else {
274 instructions.style.visibility = 'hidden'; 277 instructions.style.visibility = 'hidden';
275 } 278 }
276 279
277 var keyboardGlyphData = getKeyboardGlyphData(); 280 var keyboardGlyphData = getKeyboardGlyphData();
278 var shortcutData = getShortcutData(); 281 var shortcutData = getShortcutData();
279 var layout = getLayouts()[keyboardGlyphData.layoutName]; 282 var layout = getLayouts()[keyboardGlyphData.layoutName];
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 var format = keyData.format; 318 var format = keyData.format;
316 if (format == 'left' || format == 'right') { 319 if (format == 'left' || format == 'right') {
317 shortcutText.style.textAlign = format; 320 shortcutText.style.textAlign = format;
318 keyText.style.textAlign = format; 321 keyText.style.textAlign = format;
319 } 322 }
320 } 323 }
321 } 324 }
322 } 325 }
323 326
324 /** 327 /**
325 * A callback furnction for the onkeydown event. 328 * A callback function for onkeydown and onkeyup events.
326 */ 329 */
327 function keydown(e) { 330 function handleKeyEvent(e){
331 var modifiers = getModifiers(e);
328 if (!getKeyboardOverlayId()) { 332 if (!getKeyboardOverlayId()) {
329 return; 333 return;
330 } 334 }
331 update(e); 335 update(modifiers);
332 } 336 }
333 337
334 /** 338 /**
335 * A callback furnction for the onkeyup event.
336 */
337 function keyup(e) {
338 if (!getKeyboardOverlayId()) {
339 return;
340 }
341 update();
342 }
343
344 /**
345 * Initializes the layout of the keys. 339 * Initializes the layout of the keys.
346 */ 340 */
347 function initLayout() { 341 function initLayout() {
348 var layout = getLayouts()[getKeyboardGlyphData().layoutName]; 342 var layout = getLayouts()[getKeyboardGlyphData().layoutName];
349 var keyboard = document.body; 343 var keyboard = document.body;
350 var minX = window.innerWidth; 344 var minX = window.innerWidth;
351 var maxX = 0; 345 var maxX = 0;
352 var minY = window.innerHeight; 346 var minY = window.innerHeight;
353 var maxY = 0; 347 var maxY = 0;
354 var multiplier = 1.38 * window.innerWidth / BASE_KEYBOARD.width; 348 var multiplier = 1.38 * window.innerWidth / BASE_KEYBOARD.width;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 instructionsHideText.className = 'keyboard-overlay-instructions-hide-text'; 411 instructionsHideText.className = 'keyboard-overlay-instructions-hide-text';
418 instructionsHideText.innerHTML = templateData.keyboardOverlayInstructionsHide; 412 instructionsHideText.innerHTML = templateData.keyboardOverlayInstructionsHide;
419 instructions.appendChild(instructionsHideText); 413 instructions.appendChild(instructionsHideText);
420 keyboard.appendChild(instructions); 414 keyboard.appendChild(instructions);
421 } 415 }
422 416
423 /** 417 /**
424 * A callback function for the onload event of the body element. 418 * A callback function for the onload event of the body element.
425 */ 419 */
426 function init() { 420 function init() {
427 document.addEventListener('keydown', keydown); 421 document.addEventListener('keydown', handleKeyEvent);
428 document.addEventListener('keyup', keyup); 422 document.addEventListener('keyup', handleKeyEvent);
429 chrome.send('getKeyboardOverlayId'); 423 chrome.send('getKeyboardOverlayId');
430 } 424 }
431 425
432 /** 426 /**
433 * Initializes the global keyboad overlay ID and the layout of keys. 427 * Initializes the global keyboad overlay ID and the layout of keys.
434 * Called after sending the 'getKeyboardOverlayId' message. 428 * Called after sending the 'getKeyboardOverlayId' message.
435 */ 429 */
436 function initKeyboardOverlayId(overlayId) { 430 function initKeyboardOverlayId(overlayId) {
437 // Libcros returns an empty string when it cannot find the keyboard overlay ID 431 // Libcros returns an empty string when it cannot find the keyboard overlay ID
438 // corresponding to the current input method. 432 // corresponding to the current input method.
439 // In such a case, fallback to the default ID (en_US). 433 // In such a case, fallback to the default ID (en_US).
440 if (overlayId) { 434 if (overlayId) {
441 keyboardOverlayId = overlayId; 435 keyboardOverlayId = overlayId;
442 } 436 }
443 while(document.body.firstChild) { 437 while(document.body.firstChild) {
444 document.body.removeChild(document.body.firstChild); 438 document.body.removeChild(document.body.firstChild);
445 } 439 }
446 initLayout(); 440 initLayout();
447 update(); 441 update();
448 } 442 }
449 443
450 document.addEventListener('DOMContentLoaded', init); 444 document.addEventListener('DOMContentLoaded', init);
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698