Chromium Code Reviews| Index: chrome/browser/resources/print_preview/margins_ui.js |
| diff --git a/chrome/browser/resources/print_preview/margins_ui.js b/chrome/browser/resources/print_preview/margins_ui.js |
| index 443f8fdb226fc98f53b4bdc56ca9dbc4e0158e4a..c0ca7102cee5fcbe3686b144e9c132c9bfc33c80 100644 |
| --- a/chrome/browser/resources/print_preview/margins_ui.js |
| +++ b/chrome/browser/resources/print_preview/margins_ui.js |
| @@ -5,59 +5,51 @@ |
| cr.define('print_preview', function() { |
| 'strict'; |
| - /** |
| - * @constructor |
| - * This class represents a margin line and a textbox corresponding to that |
| - * margin. |
| - */ |
| - function MarginsUIPair(groupName) { |
| - this.line_ = new print_preview.MarginLine(groupName); |
| - this.box_ = new print_preview.MarginTextbox(groupName); |
| - } |
| - |
| - MarginsUIPair.prototype = { |
| - __proto__: MarginsUIPair.prototype, |
| - |
| - /** |
| - * Updates the state. |
| - */ |
| - update: function(marginsRectangle, value, valueLimit, keepDisplayedValue) { |
| - this.line_.update(marginsRectangle); |
| - this.box_.update(marginsRectangle, value, valueLimit, keepDisplayedValue); |
| - }, |
| - |
| - /** |
| - * Draws |this| based on the state. |
| - */ |
| - draw: function() { |
| - this.line_.draw(); |
| - this.box_.draw(); |
| - } |
| - }; |
| - |
| - function MarginsUI(parentNode) { |
| + function MarginsUI() { |
| var marginsUI = document.createElement('div'); |
| marginsUI.__proto__ = MarginsUI.prototype; |
| marginsUI.id = 'customized-margins'; |
| - marginsUI.topPair_ = new MarginsUIPair( |
| + // @type {print_preview.MarginsUIPair} The object corresponding to the top |
| + // margin. |
| + marginsUI.topPair_ = new print_preview.MarginsUIPair( |
| print_preview.MarginSettings.TOP_GROUP); |
| - marginsUI.leftPair_ = new MarginsUIPair( |
| + // @type {print_preview.MarginsUIPair} The object corresponding to the left |
| + // margin. |
| + marginsUI.leftPair_ = new print_preview.MarginsUIPair( |
| print_preview.MarginSettings.LEFT_GROUP); |
| - marginsUI.rightPair_ = new MarginsUIPair( |
| + // @type {print_preview.MarginsUIPair} The object corresponding to the right |
| + // margin. |
| + marginsUI.rightPair_ = new print_preview.MarginsUIPair( |
| print_preview.MarginSettings.RIGHT_GROUP); |
| - marginsUI.bottomPair_ = new MarginsUIPair( |
| + // @type {print_preview.MarginsUIPair} The object corresponding to the |
| + // bottom margin. |
| + marginsUI.bottomPair_ = new print_preview.MarginsUIPair( |
| print_preview.MarginSettings.BOTTOM_GROUP); |
| - parentNode.appendChild(marginsUI); |
| var uiPairs = marginsUI.pairsAsList; |
| - for (var i = 0; i < uiPairs.length; i++) { |
| - marginsUI.appendChild(uiPairs[i].line_); |
| - marginsUI.appendChild(uiPairs[i].box_); |
| - } |
| + for (var i = 0; i < uiPairs.length; i++) |
| + marginsUI.appendChild(uiPairs[i]); |
| + |
| + // @type {print_preview.MarginsUIPair} The object that is being dragged. |
| + marginsUI.lastClickedMarginsUIPair = null; |
| + |
| + marginsUI.addEventListeners(); |
| return marginsUI; |
| } |
| + /** |
| + * @param {print_preview.Point} point The point with respect to the top left |
| + * corner of the webpage. |
| + * @return {print_preview.Point} The point with respect to the top left corner |
| + * of the plugin area. |
| + */ |
| + MarginsUI.convert = function(point) { |
| + var mainview = $('mainview'); |
| + return new print_preview.Point(point.x - mainview.offsetLeft, |
| + point.y - mainview.offsetTop); |
| + } |
| + |
| MarginsUI.prototype = { |
| __proto__: HTMLDivElement.prototype, |
| @@ -86,14 +78,15 @@ cr.define('print_preview', function() { |
| * @param {array} valueLimits |
| */ |
| update: function(marginsRectangle, marginValues, valueLimits, |
| - keepDisplayedValue) { |
| + keepDisplayedValue, valueLimitsInPercent) { |
| var uiPairs = this.pairsAsList; |
| var order = ['top', 'left', 'right', 'bottom']; |
| for (var i = 0; i < uiPairs.length; i++) { |
| uiPairs[i].update(marginsRectangle, |
| marginValues[order[i]], |
| valueLimits[i], |
| - keepDisplayedValue); |
| + keepDisplayedValue, |
| + valueLimitsInPercent[i]); |
| } |
| }, |
| @@ -127,7 +120,70 @@ cr.define('print_preview', function() { |
| var bottom = previewArea.height; |
| var right = previewArea.width; |
| this.style.clip = "rect(0, " + right + "px, " + bottom + "px, 0)"; |
| - } |
| + }, |
| + |
| + /** |
| + * Adds event listeners for various events. |
| + */ |
| + addEventListeners: function() { |
| + var uiPairs = this.pairsAsList; |
| + for (var i = 0; i < uiPairs.length; i++) { |
| + uiPairs[i].addEventListener('MarginsLineMouseDown', |
| + this.onMarginLineMouseDown.bind(this)); |
| + uiPairs[i].addEventListener('MarginsLineMouseUp', |
| + this.onMarginLineMouseUp.bind(this)); |
|
Evan Stade
2011/10/14 19:04:49
I don't think this is necessary. You are double-ha
dpapad
2011/10/14 20:57:58
Removed it since it is not necessary. It was not b
|
| + } |
| + }, |
| + |
| + /** |
| + * Executes when a "MarginLineMouseDown" event occurs. |
| + * @param {cr.Event} e The event that triggered this listener. |
| + */ |
| + onMarginLineMouseDown: function(e) { |
| + this.lastClickedMarginsUIPair = e.target; |
| + this.bringToFront(this.lastClickedMarginsUIPair); |
| + // Note: Capturing mouse events at a higher level in the DOM than |this|, |
| + // so that the plugin can still receive mouse events. |
| + window.document.onmousemove = this.onMouseMove_.bind(this); |
|
Evan Stade
2011/10/14 19:04:49
use addEventListener
dpapad
2011/10/14 20:57:58
Done.
|
| + // After snapping to min/max the MarginUIPair might not receive the |
| + // mouseup event since it is not under the mouse pointer, so it is handled |
| + // here. |
| + window.document.onmouseup = this.onMarginLineMouseUp.bind(this); |
| + }, |
| + |
| + /** |
| + * Executes when a "MarginLineMouseUp" event occurs. |
| + * @param {cr.Event} e The event that triggered this listener. |
| + */ |
| + onMarginLineMouseUp: function(e) { |
| + this.lastClickedMarginsUIPair.box_.onBlur_(); |
|
Evan Stade
2011/10/14 19:04:49
don't do this -- it's a hack. Make a helper functi
dpapad
2011/10/14 20:57:58
Working on removing this hack. I had in mind to do
|
| + this.lastClickedMarginsUIPair = null; |
| + window.document.onmousemove = null; |
|
Evan Stade
2011/10/14 19:04:49
instead of attaching and detaching, always leave t
dpapad
2011/10/14 20:57:58
I changed this for onmouseup only. Having the onmo
Evan Stade
2011/10/14 21:58:36
this will not measurably impact performance
|
| + window.document.onmouseup = null; |
| + }, |
| + |
| + /** |
| + * Brings |uiPair| in front of the other pairs. |
| + * @param {print_preview.MarginsUIPair} uiPair The pair to bring in front. |
| + */ |
| + bringToFront: function(uiPair) { |
| + this.pairsAsList.forEach(function(pair) { pair.style.zIndex = 0; }); |
| + uiPair.style.zIndex = 10; |
| + }, |
| + |
| + /** |
| + * Executes when a mousemove event occurs. |
| + * @param {MouseEvent} e The event that triggered this listener. |
| + */ |
| + onMouseMove_: function(e) { |
| + var point = MarginsUI.convert(new print_preview.Point(e.x, e.y)); |
| + |
| + var dragEvent = new cr.Event('DragEvent'); |
| + dragEvent.dragDelta = |
| + this.lastClickedMarginsUIPair.getDragDistanceFrom(point); |
| + dragEvent.destinationPoint = point; |
| + this.dispatchEvent(dragEvent); |
| + }, |
| }; |
| return { |