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

Side by Side Diff: chrome/browser/resources/shared/js/cr/ui/repeating_button.js

Issue 8340002: Enable brightness controls for all ChromeOS builds. Make brightness controls auto-repeat. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove trailing blank line. Created 9 years, 1 month 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
(Empty)
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
3 // found in the LICENSE file.
4
5 cr.define('cr.ui', function() {
6
7 /**
8 * Creates a new button element. The repeating button behaves like a
9 * keyboard button, which auto-repeats if held. This button is designed
10 * for use with controls such as brightness and volume adjustment buttons.
11 * @constructor
12 * @extends {HTMLButtonElement}
13 */
14 var RepeatingButton = cr.ui.define('button');
15
16 RepeatingButton.prototype = {
17 __proto__: HTMLButtonElement.prototype,
18
19 /**
20 * Delay in milliseconds before the first repeat trigger of the button
21 * held action.
22 * @type {number}
23 */
24 holdDelayTime: 500,
25
26 /**
27 * Delay in milliseconds between triggers of the button held action.
28 * @type {number}
29 */
30 holdRepeatIntervalTime: 50,
31
32 /**
33 * Callback function when repeated intervals trigger. Initialized when the
34 * button is held for an initial delay period and cleared when the button
35 * is released.
36 * @type {function}
37 */
38 intervalCallback: undefined,
39
40 /**
41 * Callback function to arm the repeat timer. Initialized when the button
42 * is pressed and cleared when the interval timer is set or the button is
43 * released.
44 * @type {function}
45 */
46 armRepeaterCallback: undefined,
47
48 /**
49 * Initializes the button.
50 */
51 decorate: function() {
52 this.onmousedown = this.buttonDown.bind(this);
53 this.onmouseup = this.buttonUp.bind(this);
54 this.onmouseout = this.buttonUp.bind(this);
55 this.ontouchstart = this.touchStart.bind(this);
56 this.ontouchend = this.buttonUp.bind(this);
57 this.ontouchcancel = this.buttonUp.bind(this);
58 },
59
60 /**
61 * Called when the user initiates a touch gesture.
62 * @param {!Event} e The triggered event.
63 */
64 touchStart: function(e) {
65 // Block system level gestures to prevent double tap to zoom. Also,
66 // block following mouse event to prevent double firing of the button
67 // held action in the case of a tap. Otherwise, a single tap action in
68 // webkit generates the following event sequence: touchstart, touchend,
69 // mouseover, mousemove, mousedown, mouseup and click.
70 e.preventDefault();
71 },
72
73 /**
74 * Called when the user presses the button.
75 * @param {!Event} e The triggered event.
76 */
77 buttonDown: function(e) {
78 this.clearTimeout();
79 // Trigger the button held action immediately, after an initial delay and
80 // then repeated based on a fixed time increment. The time intervals are
81 // in agreement with the defaults for the ChromeOS keyboard and virtual
82 // keyboard.
83 this.buttonHeld();
84 var self = this;
85 this.armRepeaterCallback = function() {
86 // In the event of a click/tap operation, the button has already been
87 // released by the time this timeout triggers. Test to ensure that the
88 // button is still being held (i.e. clearTimeout has not been called).
89 if (self.armRepeaterCallback) {
90 self.armRepeaterCallback = undefined;
91 self.intervalCallback = setInterval(self.buttonHeld.bind(self),
92 self.holdRepeatIntervalTime);
93 }
94 };
95 setTimeout(this.armRepeaterCallback, Math.max(0, this.holdDelayTime -
96 this.holdRepeatIntervalTime));
97 },
98
99 /**
100 * Called when the user releases the button.
101 * @param {!Event} e The triggeed event.
cwolfe 2011/10/26 21:03:55 nit typo
kevers 2011/10/26 21:28:33 Fixed.
102 */
103 buttonUp: function(e) {
104 this.clearTimeout();
105 },
106
107 /**
108 * Resets the interval callback.
109 */
110 clearTimeout: function() {
111 if (this.armRepeaterCallback) {
112 clearTimeout(this.armRepeaterCallback);
113 this.armRepeaterCallback = undefined;
114 }
115 if (this.intervalCallback) {
116 clearInterval(this.intervalCallback);
117 this.intervalCallback = undefined;
118 }
119 },
120
121 /**
122 * Dispatches the action associated with keeping the button pressed.
123 */
124 buttonHeld: function() {
125 if (this.onButtonHeldAction)
126 this.onButtonHeldAction();
127 }
128 };
129
130 return {
131 RepeatingButton: RepeatingButton
132 };
133 });
134
OLDNEW
« no previous file with comments | « chrome/browser/resources/options/options.html ('k') | chrome/browser/resources/shared_resources.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698