1/*
2 * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6#include "ParagraphStyleData.h"
7
8#include <new>
9
10
11ParagraphStyleData::ParagraphStyleData()
12	:
13	fAlignment(ALIGN_LEFT),
14	fJustify(false),
15
16	fFirstLineInset(0.0f),
17	fLineInset(0.0f),
18	fLineSpacing(0.0f),
19
20	fSpacingTop(0.0f),
21	fSpacingBottom(0.0f),
22
23	fBullet()
24{
25}
26
27
28ParagraphStyleData::ParagraphStyleData(const ParagraphStyleData& other)
29	:
30	fAlignment(other.fAlignment),
31	fJustify(other.fJustify),
32
33	fFirstLineInset(other.fFirstLineInset),
34	fLineInset(other.fLineInset),
35	fLineSpacing(other.fLineSpacing),
36
37	fSpacingTop(other.fSpacingTop),
38	fSpacingBottom(other.fSpacingBottom),
39
40	fBullet(other.fBullet)
41{
42}
43
44
45bool
46ParagraphStyleData::operator==(const ParagraphStyleData& other) const
47{
48	if (this == &other)
49		return true;
50
51	return fAlignment == other.fAlignment
52		&& fJustify == other.fJustify
53		&& fFirstLineInset == other.fFirstLineInset
54		&& fLineInset == other.fLineInset
55		&& fLineSpacing == other.fLineSpacing
56		&& fSpacingTop == other.fSpacingTop
57		&& fSpacingBottom == other.fSpacingBottom
58		&& fBullet == other.fBullet;
59}
60
61
62bool
63ParagraphStyleData::operator!=(const ParagraphStyleData& other) const
64{
65	return !(*this == other);
66}
67
68
69ParagraphStyleDataRef
70ParagraphStyleData::SetAlignment(::Alignment alignment)
71{
72	if (fAlignment == alignment)
73		return ParagraphStyleDataRef(this);
74
75	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
76	if (ret == NULL)
77		return ParagraphStyleDataRef(this);
78
79	ret->fAlignment = alignment;
80	return ParagraphStyleDataRef(ret, true);
81}
82
83
84ParagraphStyleDataRef
85ParagraphStyleData::SetJustify(bool justify)
86{
87	if (fJustify == justify)
88		return ParagraphStyleDataRef(this);
89
90	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
91	if (ret == NULL)
92		return ParagraphStyleDataRef(this);
93
94	ret->fJustify = justify;
95	return ParagraphStyleDataRef(ret, true);
96}
97
98
99ParagraphStyleDataRef
100ParagraphStyleData::SetFirstLineInset(float inset)
101{
102	if (fFirstLineInset == inset)
103		return ParagraphStyleDataRef(this);
104
105	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
106	if (ret == NULL)
107		return ParagraphStyleDataRef(this);
108
109	ret->fFirstLineInset = inset;
110	return ParagraphStyleDataRef(ret, true);
111}
112
113
114ParagraphStyleDataRef
115ParagraphStyleData::SetLineInset(float inset)
116{
117	if (fLineInset == inset)
118		return ParagraphStyleDataRef(this);
119
120	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
121	if (ret == NULL)
122		return ParagraphStyleDataRef(this);
123
124	ret->fLineInset = inset;
125	return ParagraphStyleDataRef(ret, true);
126}
127
128
129ParagraphStyleDataRef
130ParagraphStyleData::SetLineSpacing(float spacing)
131{
132	if (fLineSpacing == spacing)
133		return ParagraphStyleDataRef(this);
134
135	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
136	if (ret == NULL)
137		return ParagraphStyleDataRef(this);
138
139	ret->fLineSpacing = spacing;
140	return ParagraphStyleDataRef(ret, true);
141}
142
143
144ParagraphStyleDataRef
145ParagraphStyleData::SetSpacingTop(float spacing)
146{
147	if (fSpacingTop == spacing)
148		return ParagraphStyleDataRef(this);
149
150	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
151	if (ret == NULL)
152		return ParagraphStyleDataRef(this);
153
154	ret->fSpacingTop = spacing;
155	return ParagraphStyleDataRef(ret, true);
156}
157
158
159ParagraphStyleDataRef
160ParagraphStyleData::SetSpacingBottom(float spacing)
161{
162	if (fSpacingBottom == spacing)
163		return ParagraphStyleDataRef(this);
164
165	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
166	if (ret == NULL)
167		return ParagraphStyleDataRef(this);
168
169	ret->fSpacingBottom = spacing;
170	return ParagraphStyleDataRef(ret, true);
171}
172
173
174ParagraphStyleDataRef
175ParagraphStyleData::SetBullet(const ::Bullet& bullet)
176{
177	if (fBullet == bullet)
178		return ParagraphStyleDataRef(this);
179
180	ParagraphStyleData* ret = new(std::nothrow) ParagraphStyleData(*this);
181	if (ret == NULL)
182		return ParagraphStyleDataRef(this);
183
184	ret->fBullet = bullet;
185	return ParagraphStyleDataRef(ret, true);
186}
187
188
189// #pragma mark - private
190
191
192ParagraphStyleData&
193ParagraphStyleData::operator=(const ParagraphStyleData& other)
194{
195	return *this;
196}
197