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

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: 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 isKeyDown = (e.type == 'keydown');
124 var modifierToKeyCode = {'SHIFT': 16, 'CTRL': 17, 'ALT': 18};
123 var modifiers = []; 125 var modifiers = [];
mazda 2011/04/18 11:00:20 Please move the declaration right before line 137.
124 if (e.keyCode == 16 || e.shiftKey) { 126 var modifier;
mazda 2011/04/18 11:00:20 How about moving modifier to for-loop? for (var m
125 modifiers.push('SHIFT'); 127 var pressed = {'SHIFT': e.shiftKey, 'CTRL': e.ctrlKey, 'ALT': e.altKey};
128 // if e.keyCode is one of Shift, Ctrl and Alt, pressed should
129 // be changed because the key currently pressed
130 // does not affect the values of e.shiftKey, e.ctrlKey and e.altKey
131 for (modifier in modifierToKeyCode) {
132 if (e.keyCode == modifierToKeyCode[modifier]) {
133 pressed[modifier] = isKeyDown;
134 }
126 } 135 }
127 if (e.keyCode == 17 || e.ctrlKey) { 136 // make the result array
128 modifiers.push('CTRL'); 137 for (modifier in pressed) {
129 } 138 if (pressed[modifier]) {
130 if (e.keyCode == 18 || e.altKey) { 139 modifiers.push(modifier);
131 modifiers.push('ALT'); 140 }
132 } 141 }
133 return modifiers.sort(); 142 return modifiers.sort();
134 } 143 }
135 144
136 /** 145 /**
137 * Returns an ID of the key. 146 * Returns an ID of the key.
138 */ 147 */
139 function keyId(identifier, i) { 148 function keyId(identifier, i) {
140 return identifier + '-key-' + i; 149 return identifier + '-key-' + i;
141 } 150 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 if (pos && pos.length > 0) { 267 if (pos && pos.length > 0) {
259 chars.push(hex2char(pos)); 268 chars.push(hex2char(pos));
260 } 269 }
261 } 270 }
262 return chars.join(' '); 271 return chars.join(' ');
263 } 272 }
264 273
265 /** 274 /**
266 * Updates the whole keyboard. 275 * Updates the whole keyboard.
267 */ 276 */
268 function update(e) { 277 function update(modifiers) {
269 var modifiers = getModifiers(e);
270 var instructions = document.getElementById('instructions'); 278 var instructions = document.getElementById('instructions');
271 if (modifiers.length == 0) { 279 if (modifiers.length == 0) {
272 instructions.style.visibility = 'visible'; 280 instructions.style.visibility = 'visible';
273 } else { 281 } else {
274 instructions.style.visibility = 'hidden'; 282 instructions.style.visibility = 'hidden';
275 } 283 }
276 284
277 var keyboardGlyphData = getKeyboardGlyphData(); 285 var keyboardGlyphData = getKeyboardGlyphData();
278 var shortcutData = getShortcutData(); 286 var shortcutData = getShortcutData();
279 var layout = getLayouts()[keyboardGlyphData.layoutName]; 287 var layout = getLayouts()[keyboardGlyphData.layoutName];
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 keyText.style.textAlign = format; 326 keyText.style.textAlign = format;
319 } 327 }
320 } 328 }
321 } 329 }
322 } 330 }
323 331
324 /** 332 /**
325 * A callback furnction for the onkeydown event. 333 * A callback furnction for the onkeydown event.
326 */ 334 */
327 function keydown(e) { 335 function keydown(e) {
336 var modifiers = getModifiers(e);
328 if (!getKeyboardOverlayId()) { 337 if (!getKeyboardOverlayId()) {
329 return; 338 return;
330 } 339 }
331 update(e); 340 update(modifiers);
332 } 341 }
333 342
334 /** 343 /**
335 * A callback furnction for the onkeyup event. 344 * A callback furnction for the onkeyup event.
336 */ 345 */
337 function keyup(e) { 346 function keyup(e) {
mazda 2011/04/18 11:00:20 How about merging this function into keydown?
347 var modifiers = getModifiers(e);
338 if (!getKeyboardOverlayId()) { 348 if (!getKeyboardOverlayId()) {
339 return; 349 return;
340 } 350 }
341 update(); 351 update(modifiers);
342 } 352 }
343 353
344 /** 354 /**
345 * Initializes the layout of the keys. 355 * Initializes the layout of the keys.
346 */ 356 */
347 function initLayout() { 357 function initLayout() {
348 var layout = getLayouts()[getKeyboardGlyphData().layoutName]; 358 var layout = getLayouts()[getKeyboardGlyphData().layoutName];
349 var keyboard = document.body; 359 var keyboard = document.body;
350 var minX = window.innerWidth; 360 var minX = window.innerWidth;
351 var maxX = 0; 361 var maxX = 0;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 keyboardOverlayId = overlayId; 451 keyboardOverlayId = overlayId;
442 } 452 }
443 while(document.body.firstChild) { 453 while(document.body.firstChild) {
444 document.body.removeChild(document.body.firstChild); 454 document.body.removeChild(document.body.firstChild);
445 } 455 }
446 initLayout(); 456 initLayout();
447 update(); 457 update();
448 } 458 }
449 459
450 document.addEventListener('DOMContentLoaded', init); 460 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