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

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

Issue 183893033: Use a sound pool instead of a single audio tag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@consistant-css
Patch Set: Created 6 years, 9 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
« no previous file with comments | « ui/keyboard/resources/elements/kb-key-base.html ('k') | 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 <!-- 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}}" 7 <polymer-element name="kb-keyboard" on-key-over="{{keyOver}}"
8 on-key-up="{{keyUp}}" on-key-down="{{keyDown}}" 8 on-key-up="{{keyUp}}" on-key-down="{{keyDown}}"
9 on-key-longpress="{{keyLongpress}}" on-pointerup="{{up}}" 9 on-key-longpress="{{keyLongpress}}" on-pointerup="{{up}}"
10 on-pointerdown="{{down}}" on-pointerout="{{out}}" 10 on-pointerdown="{{down}}" on-pointerout="{{out}}"
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 327
328 /** 328 /**
329 * Caches the specified sound on the keyboard. 329 * Caches the specified sound on the keyboard.
330 * @param {string} soundId The name of the .wav file in the "sounds" 330 * @param {string} soundId The name of the .wav file in the "sounds"
331 directory. 331 directory.
332 */ 332 */
333 addSound: function(soundId) { 333 addSound: function(soundId) {
334 // Check if already loaded. 334 // Check if already loaded.
335 if (soundId == Sound.NONE || this.sounds[soundId]) 335 if (soundId == Sound.NONE || this.sounds[soundId])
336 return; 336 return;
337 var audio = document.createElement('audio'); 337 var pool = [];
338 audio.preload = "auto"; 338 for (var i = 0; i < SOUND_POOL_SIZE; i++) {
339 audio.id = soundId; 339 var audio = document.createElement('audio');
340 audio.src = "../sounds/" + soundId + ".wav"; 340 audio.preload = "auto";
341 audio.volume = this.volume; 341 audio.id = soundId;
342 this.sounds[soundId] = audio; 342 audio.src = "../sounds/" + soundId + ".wav";
343 audio.volume = this.volume;
344 pool.push(audio);
345 }
346 this.sounds[soundId] = pool;
343 }, 347 },
344 348
345 /** 349 /**
346 * Changes the current keyset. 350 * Changes the current keyset.
347 * @param {Object} detail The detail of the event that called this 351 * @param {Object} detail The detail of the event that called this
348 * function. 352 * function.
349 */ 353 */
350 changeKeyset: function(detail) { 354 changeKeyset: function(detail) {
351 if (detail.relegateToShift && this.shift) { 355 if (detail.relegateToShift && this.shift) {
352 this.keyset = this.shift.textKeyset; 356 this.keyset = this.shift.textKeyset;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 if(this.changeKeyset(detail)) 538 if(this.changeKeyset(detail))
535 return; 539 return;
536 if (detail.repeat) { 540 if (detail.repeat) {
537 this.keyTyped(detail); 541 this.keyTyped(detail);
538 this.onNonControlKeyTyped(); 542 this.onNonControlKeyTyped();
539 repeatKey.key = this.lastPressedKey; 543 repeatKey.key = this.lastPressedKey;
540 var self = this; 544 var self = this;
541 repeatKey.timer = setTimeout(function() { 545 repeatKey.timer = setTimeout(function() {
542 repeatKey.timer = undefined; 546 repeatKey.timer = undefined;
543 repeatKey.interval = setInterval(function() { 547 repeatKey.interval = setInterval(function() {
548 self.playSound(detail.sound);
544 self.keyTyped(detail); 549 self.keyTyped(detail);
545 }, REPEAT_INTERVAL_MSEC); 550 }, REPEAT_INTERVAL_MSEC);
546 }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC)); 551 }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC));
547 } 552 }
548 }, 553 },
549 554
550 /** 555 /**
551 * Handles key-out event that is sent by kb-shift-key. 556 * Handles key-out event that is sent by kb-shift-key.
552 * @param {CustomEvent} event The key-out event dispatched by 557 * @param {CustomEvent} event The key-out event dispatched by
553 * kb-shift-key. 558 * kb-shift-key.
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 } 796 }
792 }, 797 },
793 798
794 /** 799 /**
795 * Plays the specified sound. 800 * Plays the specified sound.
796 * @param {Sound} sound The id of the audio tag. 801 * @param {Sound} sound The id of the audio tag.
797 */ 802 */
798 playSound: function(sound) { 803 playSound: function(sound) {
799 if (!sound || sound == Sound.NONE) 804 if (!sound || sound == Sound.NONE)
800 return; 805 return;
801 var soundElement = this.sounds[sound]; 806 var pool = this.sounds[sound];
802 if (!soundElement) 807 if (!pool) {
803 console.error("Cannot find audio tag: " + sound); 808 console.error("Cannot find audio tag: " + sound);
804 else 809 return;
805 soundElement.play(); 810 }
811 // Search the sound pool for a free resource.
812 for (var i = 0; i < pool.length; i++) {
813 if (pool[i].paused) {
814 pool[i].play();
815 return;
816 }
817 }
806 }, 818 },
807 819
808 /** 820 /**
809 * Whether we should transit to upper case when seeing a space after 821 * Whether we should transit to upper case when seeing a space after
810 * punctuation. 822 * punctuation.
811 * @return {boolean} 823 * @return {boolean}
812 */ 824 */
813 shouldUpperOnSpace: function() { 825 shouldUpperOnSpace: function() {
814 // TODO(rsadam): Add other input types in which we should not 826 // TODO(rsadam): Add other input types in which we should not
815 // transition to upper after a space. 827 // transition to upper after a space.
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 if (this.alt) 916 if (this.alt)
905 this.alt.onNonControlKeyTyped(); 917 this.alt.onNonControlKeyTyped();
906 this.classList.remove('ctrl-active'); 918 this.classList.remove('ctrl-active');
907 this.classList.remove('alt-active'); 919 this.classList.remove('alt-active');
908 }, 920 },
909 921
910 /** 922 /**
911 * Callback function for when volume is changed. 923 * Callback function for when volume is changed.
912 */ 924 */
913 volumeChanged: function() { 925 volumeChanged: function() {
914 var toChange = keys(this.sounds); 926 var toChange = Object.keys(this.sounds);
915 for (var i = 0; i < toChange.length; i++) { 927 for (var i = 0; i < toChange.length; i++) {
916 this.sounds[toChange[i]].volume = this.volume; 928 var pool = this.sounds[toChange[i]];
929 for (var j = 0; j < pool.length; j++) {
930 pool[j].volume = this.volume;
931 }
917 } 932 }
918 }, 933 },
919 934
920 /** 935 /**
921 * Id for the active keyset. 936 * Id for the active keyset.
922 * @type {string} 937 * @type {string}
923 */ 938 */
924 get activeKeysetId() { 939 get activeKeysetId() {
925 return this.layout + '-' + this.keyset; 940 return this.layout + '-' + this.keyset;
926 }, 941 },
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 } 1052 }
1038 } 1053 }
1039 } 1054 }
1040 if (keysetsLoaded) 1055 if (keysetsLoaded)
1041 console.error('No default keyset found for ' + this.layout); 1056 console.error('No default keyset found for ' + this.layout);
1042 return false; 1057 return false;
1043 } 1058 }
1044 }); 1059 });
1045 </script> 1060 </script>
1046 </polymer-element> 1061 </polymer-element>
OLDNEW
« no previous file with comments | « ui/keyboard/resources/elements/kb-key-base.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698