Chromium Code Reviews| Index: chrome/browser/resources/print_preview/margin_textbox.js |
| diff --git a/chrome/browser/resources/print_preview/margin_textbox.js b/chrome/browser/resources/print_preview/margin_textbox.js |
| index 5034bbf30b130e44bc2624fdf03e72f07717be34..4602df0be71fdea2a8450f416dc030ee7f0ac937 100644 |
| --- a/chrome/browser/resources/print_preview/margin_textbox.js |
| +++ b/chrome/browser/resources/print_preview/margin_textbox.js |
| @@ -20,8 +20,6 @@ cr.define('print_preview', function() { |
| box.timerId_ = null; |
| // @type {number} The last valid value in points. |
| box.lastValidValueInPoints = 0; |
| - // @type {print_preview.Rect} A rectangle describing the four margins. |
| - box.marginsRectangle_ = null; |
| // @type {number} The upper allowed limit for the corresponding margin. |
| box.valueLimit = null; |
| @@ -40,15 +38,6 @@ cr.define('print_preview', function() { |
| // Keycode for the "Enter" key. |
| MarginTextbox.ENTER_KEYCODE = 13; |
| - MarginTextbox.convertPointsToInchesText = function(toConvert) { |
| - var inInches = convertPointsToInches(toConvert); |
| - return MarginTextbox.convertInchesToInchesText(inInches); |
| - }; |
| - |
| - MarginTextbox.convertInchesToInchesText = function(toConvert) { |
| - return toConvert.toFixed(2) + '"'; |
| - }; |
| - |
| /** |
| * @return {number} The total height of a margin textbox (including padding). |
| */ |
| @@ -68,20 +57,21 @@ cr.define('print_preview', function() { |
| MarginTextbox.prototype = { |
| __proto__: HTMLInputElement.prototype, |
| + get margin() { |
| + return print_preview.extractMarginValue(this.value); |
| + }, |
| + |
| /** |
| * Updates the state of |this|. |
| - * @param {print_preview.Rect} marginsRectangle A rectangle describing the |
| - * margins in percentages. |
| * @param {number} value The margin value in points. |
| * @param {number} valueLimit The upper allowed value for the margin. |
| * @param {boolean} keepDisplayedValue True if the currently displayed value |
| * should not be updated. |
| */ |
| - update: function(marginsRectangle, value, valueLimit, keepDisplayedValue) { |
| - this.marginsRectangle_ = marginsRectangle; |
| + update: function(value, valueLimit, keepDisplayedValue) { |
| this.lastValidValueInPoints = value; |
| if (!keepDisplayedValue) { |
| - this.value = MarginTextbox.convertPointsToInchesText( |
| + this.value = print_preview.convertPointsToInchesText( |
| this.lastValidValueInPoints); |
| } |
| @@ -89,18 +79,47 @@ cr.define('print_preview', function() { |
| this.validate(); |
| }, |
| - get margin() { |
| - return print_preview.extractMarginValue(this.value); |
| + /** |
| + * Updates |this| while dragging is in progress. |
| + * @param {number} dragDeltaInPoints The difference in points between the |
| + * margin value before dragging started and now. |
| + */ |
| + updateWhileDragging: function(dragDeltaInPoints) { |
| + var validity = this.validateDelta(dragDeltaInPoints); |
| + |
| + if (validity == 0) { |
| + this.value = print_preview.convertPointsToInchesText( |
| + this.lastValidValueInPoints + dragDeltaInPoints); |
| + } else if (validity == -1) { |
| + this.value = print_preview.convertPointsToInchesText(0); |
| + } else if (validity == 1) { |
| + this.value = print_preview.convertPointsToInchesText(this.valueLimit); |
| + } |
| + |
| + this.validate(); |
| + this.updateColor(); |
| + }, |
| + |
| + /** |
| + * @param {number} dragDeltaInPoints The difference in points between the |
| + * margin value before dragging started and now. |
| + * @return {number} 0 if applying |dragDeltaInPoints| results in a valid |
| + * margin value, -1 if resulting value is lower than minimum allowed, 1 |
| + * if larger than maximum allowed. |
| + */ |
| + validateDelta: function(dragDeltaInPoints) { |
| + var newValue = this.lastValidValueInPoints + dragDeltaInPoints; |
| + return print_preview.validateMarginValue(newValue, this.valueLimit); |
| }, |
| /** |
| * Updates |this.isValid|. |
| */ |
| validate: function() { |
| - this.isValid = print_preview.isMarginTextValid(this.value, |
| - this.valueLimit); |
| + this.isValid = |
| + print_preview.validateMarginText(this.value, this.valueLimit) == 0; |
| if (this.isValid) |
| - this.value = MarginTextbox.convertInchesToInchesText(this.margin); |
| + this.value = print_preview.convertInchesToInchesText(this.margin); |
| }, |
| /** |
| @@ -118,11 +137,8 @@ cr.define('print_preview', function() { |
| */ |
| draw: function() { |
| var topLeft = this.getCoordinates_(); |
| - var totalWidth = previewArea.pdfPlugin_.offsetWidth; |
| - var totalHeight = previewArea.pdfPlugin_.offsetHeight; |
| - |
| - this.style.left = Math.round(topLeft.x * totalWidth) + 'px'; |
| - this.style.top = Math.round(topLeft.y * totalHeight) + 'px'; |
| + this.style.left = 100 * topLeft.x + '%'; |
| + this.style.top = 100 * topLeft.y + '%'; |
| this.updateColor(); |
| }, |
| @@ -160,33 +176,32 @@ cr.define('print_preview', function() { |
| /** |
| * Calculates the coordinates where |this| should be displayed. |
| - * @return {{x: number, y: number}} The coordinates (in percent) where |
| - * |this| should be drawn relative to the upper left corner of the |
| - * plugin. |
| + * @return {{print_preview.Point} The coordinates (in percent) where |this| |
| + * should be drawn relative to the upper left corner of the plugin. |
| * @private |
| */ |
| getCoordinates_: function() { |
| var x = 0, y = 0; |
| - var totalWidth = previewArea.pdfPlugin_.offsetWidth; |
| - var totalHeight = previewArea.pdfPlugin_.offsetHeight; |
| - var offsetY = (MarginTextbox.totalHeight() / 2) / totalHeight; |
| - var offsetX = (MarginTextbox.totalWidth() / 2) / totalWidth; |
| + var offsetX = MarginTextbox.totalWidth() / |
| + parseInt(this.parentNode.style.width, 10); |
| + var offsetY = MarginTextbox.totalHeight() / |
| + parseInt(this.parentNode.style.height, 10); |
| if (this.isTop_()) { |
| - x = this.marginsRectangle_.middleX - offsetX; |
| - y = this.marginsRectangle_.y; |
| + x = 0.5 - offsetX / 2; |
| + y = 0.5; |
| } else if (this.isBottom_()) { |
| - x = this.marginsRectangle_.middleX - offsetX; |
| - y = this.marginsRectangle_.bottom - 2 * offsetY; |
| + x = 0.5 - offsetX / 2; |
| + y = 0.5 - offsetY; |
|
Evan Stade
2011/10/14 19:04:49
extra space
dpapad
2011/10/14 20:57:58
Done.
|
| } else if (this.isRight_()) { |
| - x = this.marginsRectangle_.right - 2 * offsetX; |
| - y = this.marginsRectangle_.middleY - offsetY; |
| + x = 0.5 - offsetX; |
| + y = 0.5 - offsetY / 2; |
| } else if (this.isLeft_()) { |
| - x = this.marginsRectangle_.x; |
| - y = this.marginsRectangle_.middleY - offsetY; |
| + x = 0.5; |
| + y = 0.5 - offsetY / 2; |
| } |
| - return { x: x, y: y }; |
| + return new print_preview.Point(x, y); |
| }, |
| /** |
| @@ -208,7 +223,7 @@ cr.define('print_preview', function() { |
| clearTimeout(this.timerId_); |
| this.validate(); |
| if (!this.isValid) { |
| - this.value = MarginTextbox.convertPointsToInchesText( |
| + this.value = print_preview.convertPointsToInchesText( |
| this.lastValidValueInPoints); |
| this.validate(); |
| } |
| @@ -239,7 +254,7 @@ cr.define('print_preview', function() { |
| */ |
| onKeyUp_: function(e) { |
| if (e.keyCode == MarginTextbox.ESCAPE_KEYCODE) { |
| - this.value = MarginTextbox.convertPointsToInchesText( |
| + this.value = print_preview.convertPointsToInchesText( |
| this.lastValidValueInPoints); |
| this.validate(); |
| this.updateColor(); |