1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
// 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
};
});
|