| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 'use strict'; | |
| 6 | |
| 7 /** | |
| 8 * A stack of overlays that display itself and handle mouse events. | |
| 9 * TODO(kaznacheev) Consider disbanding this class and moving | |
| 10 * the functionality to individual objects that display anything or handle | |
| 11 * mouse events. | |
| 12 * @constructor | |
| 13 */ | |
| 14 function ImageBuffer() { | |
| 15 this.overlays_ = []; | |
| 16 } | |
| 17 | |
| 18 /** | |
| 19 * TODO(JSDOC). | |
| 20 * @param {ImageBuffer.Overlay} overlay // TODO(JSDOC). | |
| 21 */ | |
| 22 ImageBuffer.prototype.addOverlay = function(overlay) { | |
| 23 var zIndex = overlay.getZIndex(); | |
| 24 // Store the overlays in the ascending Z-order. | |
| 25 var i; | |
| 26 for (i = 0; i != this.overlays_.length; i++) { | |
| 27 if (zIndex < this.overlays_[i].getZIndex()) break; | |
| 28 } | |
| 29 this.overlays_.splice(i, 0, overlay); | |
| 30 }; | |
| 31 | |
| 32 /** | |
| 33 * TODO(JSDOC). | |
| 34 * @param {ImageBuffer.Overlay} overlay // TODO(JSDOC). | |
| 35 */ | |
| 36 ImageBuffer.prototype.removeOverlay = function(overlay) { | |
| 37 for (var i = 0; i != this.overlays_.length; i++) { | |
| 38 if (this.overlays_[i] == overlay) { | |
| 39 this.overlays_.splice(i, 1); | |
| 40 return; | |
| 41 } | |
| 42 } | |
| 43 throw new Error('Cannot remove overlay ' + overlay); | |
| 44 }; | |
| 45 | |
| 46 /** | |
| 47 * Draws overlays in the ascending Z-order. | |
| 48 */ | |
| 49 ImageBuffer.prototype.draw = function() { | |
| 50 for (var i = 0; i != this.overlays_.length; i++) { | |
| 51 this.overlays_[i].draw(); | |
| 52 } | |
| 53 }; | |
| 54 | |
| 55 /** | |
| 56 * Searches for a cursor style in the descending Z-order. | |
| 57 * @param {number} x X coordinate for cursor. | |
| 58 * @param {number} y Y coordinate for cursor. | |
| 59 * @param {boolean} mouseDown If mouse button is down. | |
| 60 * @return {string} A value for style.cursor CSS property. | |
| 61 */ | |
| 62 ImageBuffer.prototype.getCursorStyle = function(x, y, mouseDown) { | |
| 63 for (var i = this.overlays_.length - 1; i >= 0; i--) { | |
| 64 var style = this.overlays_[i].getCursorStyle(x, y, mouseDown); | |
| 65 if (style) return style; | |
| 66 } | |
| 67 return 'default'; | |
| 68 }; | |
| 69 | |
| 70 /** | |
| 71 * Searches for a click handler in the descending Z-order. | |
| 72 * @param {number} x X coordinate for click event. | |
| 73 * @param {number} y Y coordinate for click event. | |
| 74 * @return {boolean} True if handled. | |
| 75 */ | |
| 76 ImageBuffer.prototype.onClick = function(x, y) { | |
| 77 for (var i = this.overlays_.length - 1; i >= 0; i--) { | |
| 78 if (this.overlays_[i].onClick(x, y)) return true; | |
| 79 } | |
| 80 return false; | |
| 81 }; | |
| 82 | |
| 83 /** | |
| 84 * Searches for a drag handler in the descending Z-order. | |
| 85 * @param {number} x Event X coordinate. | |
| 86 * @param {number} y Event Y coordinate. | |
| 87 * @param {boolean} touch True if it's a touch event, false if mouse. | |
| 88 * @return {function(number,number)} A function to be called on mouse drag. | |
| 89 */ | |
| 90 ImageBuffer.prototype.getDragHandler = function(x, y, touch) { | |
| 91 for (var i = this.overlays_.length - 1; i >= 0; i--) { | |
| 92 var handler = this.overlays_[i].getDragHandler(x, y, touch); | |
| 93 if (handler) | |
| 94 return handler; | |
| 95 } | |
| 96 return null; | |
| 97 }; | |
| 98 | |
| 99 /** | |
| 100 * Searches for an action for the double tap enumerating | |
| 101 * layers in the descending Z-order. | |
| 102 * @param {number} x X coordinate of the event. | |
| 103 * @param {number} y Y coordinate of the event. | |
| 104 * @return {ImageBuffer.DoubleTapAction} Action to perform as result. | |
| 105 */ | |
| 106 ImageBuffer.prototype.getDoubleTapAction = function(x, y) { | |
| 107 for (var i = this.overlays_.length - 1; i >= 0; i--) { | |
| 108 var action = this.overlays_[i].getDoubleTapAction(x, y); | |
| 109 if (action != ImageBuffer.DoubleTapAction.NOTHING) | |
| 110 return action; | |
| 111 } | |
| 112 return ImageBuffer.DoubleTapAction.NOTHING; | |
| 113 }; | |
| 114 | |
| 115 /** | |
| 116 * Possible double tap actions. | |
| 117 * @enum | |
| 118 */ | |
| 119 ImageBuffer.DoubleTapAction = { | |
| 120 NOTHING: 0, | |
| 121 COMMIT: 1, | |
| 122 CANCEL: 2 | |
| 123 }; | |
| 124 | |
| 125 /** | |
| 126 * ImageBuffer.Overlay is a pluggable extension that modifies the outlook | |
| 127 * and the behavior of the ImageBuffer instance. | |
| 128 * @class | |
| 129 */ | |
| 130 ImageBuffer.Overlay = function() {}; | |
| 131 | |
| 132 /** | |
| 133 * TODO(JSDOC). | |
| 134 * @return {number} // TODO(JSDOC). | |
| 135 */ | |
| 136 ImageBuffer.Overlay.prototype.getZIndex = function() { return 0 }; | |
| 137 | |
| 138 /** | |
| 139 * TODO(JSDOC). | |
| 140 */ | |
| 141 ImageBuffer.Overlay.prototype.draw = function() {}; | |
| 142 | |
| 143 /** | |
| 144 * TODO(JSDOC). | |
| 145 * @param {number} x X coordinate for cursor. | |
| 146 * @param {number} y Y coordinate for cursor. | |
| 147 * @param {boolean} mouseDown If mouse button is down. | |
| 148 * @return {?string} A value for style.cursor CSS property or null for | |
| 149 * default. | |
| 150 */ | |
| 151 ImageBuffer.Overlay.prototype.getCursorStyle = function(x, y, mouseDown) { | |
| 152 return null; | |
| 153 }; | |
| 154 | |
| 155 /** | |
| 156 * TODO(JSDOC). | |
| 157 * @param {number} x // TODO(JSDOC). | |
| 158 * @param {number} y // TODO(JSDOC). | |
| 159 * @return {boolean} // TODO(JSDOC). | |
| 160 */ | |
| 161 ImageBuffer.Overlay.prototype.onClick = function(x, y) { | |
| 162 return false; | |
| 163 }; | |
| 164 | |
| 165 /** | |
| 166 * TODO(JSDOC). | |
| 167 * @param {number} x Event X coordinate. | |
| 168 * @param {number} y Event Y coordinate. | |
| 169 * @param {boolean} touch True if it's a touch event, false if mouse. | |
| 170 * @return {function(number,number)} A function to be called on mouse drag. | |
| 171 */ | |
| 172 ImageBuffer.Overlay.prototype.getDragHandler = function(x, y, touch) { | |
| 173 return null; | |
| 174 }; | |
| 175 | |
| 176 /** | |
| 177 * TODO(JSDOC). | |
| 178 * @param {number} x // TODO(JSDOC). | |
| 179 * @param {number} y // TODO(JSDOC). | |
| 180 * @return {ImageBuffer.DoubleTapAction} // TODO(JSDOC). | |
| 181 */ | |
| 182 ImageBuffer.Overlay.prototype.getDoubleTapAction = function(x, y) { | |
| 183 return ImageBuffer.DoubleTapAction.NOTHING; | |
| 184 }; | |
| OLD | NEW |