// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. cr.define('print_preview', function() { 'use strict'; /** * Creates a Margins object that holds four margin values in points. * @param {number} top The top margin in pts. * @param {number} right The right margin in pts. * @param {number} bottom The bottom margin in pts. * @param {number} left The left margin in pts. * @constructor */ function Margins(top, right, bottom, left) { /** * Backing store for the margin values in points. * @type {!Object.< * !print_preview.ticket_items.CustomMargins.Orientation, number>} * @private */ this.value_ = {}; this.value_[print_preview.ticket_items.CustomMargins.Orientation.TOP] = top; this.value_[print_preview.ticket_items.CustomMargins.Orientation.RIGHT] = right; this.value_[print_preview.ticket_items.CustomMargins.Orientation.BOTTOM] = bottom; this.value_[print_preview.ticket_items.CustomMargins.Orientation.LEFT] = left; }; /** * Parses a margins object from the given serialized state. * @param {Object} state Serialized representation of the margins created by * the {@code serialize} method. * @return {!print_preview.Margins} New margins instance. */ Margins.parse = function(state) { return new print_preview.Margins( state[print_preview.ticket_items.CustomMargins.Orientation.TOP] || 0, state[print_preview.ticket_items.CustomMargins.Orientation.RIGHT] || 0, state[print_preview.ticket_items.CustomMargins.Orientation.BOTTOM] || 0, state[print_preview.ticket_items.CustomMargins.Orientation.LEFT] || 0); }; Margins.prototype = { /** * @param {!print_preview.ticket_items.CustomMargins.Orientation} * orientation Specifies the margin value to get. * @return {number} Value of the margin of the given orientation. */ get: function(orientation) { return this.value_[orientation]; }, /** * @param {!print_preview.ticket_items.CustomMargins.Orientation} * orientation Specifies the margin to set. * @param {number} value Updated value of the margin in points to modify. * @return {!print_preview.Margins} A new copy of |this| with the * modification made to the specified margin. */ set: function(orientation, value) { var newValue = this.clone_(); newValue[orientation] = value; return new Margins( newValue[print_preview.ticket_items.CustomMargins.Orientation.TOP], newValue[print_preview.ticket_items.CustomMargins.Orientation.RIGHT], newValue[print_preview.ticket_items.CustomMargins.Orientation.BOTTOM], newValue[print_preview.ticket_items.CustomMargins.Orientation.LEFT]); }, /** * @param {print_preview.Margins} other The other margins object to compare * against. * @return {boolean} Whether this margins object is equal to another. */ equals: function(other) { if (other == null) { return false; } for (var orientation in this.value_) { if (this.value_[orientation] != other.value_[orientation]) { return false; } } return true; }, /** @return {Object} A serialized representation of the margins. */ serialize: function() { return this.clone_(); }, /** * @return {Object} Cloned state of the margins. * @private */ clone_: function() { var clone = {}; for (var o in this.value_) { clone[o] = this.value_[o]; } return clone; } }; // Export return { Margins: Margins }; });