OLD | NEW |
---|---|
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/css/cssom/CSSUnitValue.h" | 5 #include "core/css/cssom/CSSUnitValue.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "core/css/CSSHelper.h" | |
8 #include "platform/wtf/MathExtras.h" | 9 #include "platform/wtf/MathExtras.h" |
9 | 10 |
10 namespace blink { | 11 namespace blink { |
11 | 12 |
12 CSSUnitValue* CSSUnitValue::Create(double value, | 13 CSSUnitValue* CSSUnitValue::Create(double value, |
13 const String& unit_name, | 14 const String& unit_name, |
14 ExceptionState& exception_state) { | 15 ExceptionState& exception_state) { |
15 CSSPrimitiveValue::UnitType unit = UnitFromName(unit_name); | 16 CSSPrimitiveValue::UnitType unit = UnitFromName(unit_name); |
16 if (!IsValidUnit(unit)) { | 17 if (!IsValidUnit(unit)) { |
17 exception_state.ThrowTypeError("Invalid unit: " + unit_name); | 18 exception_state.ThrowTypeError("Invalid unit: " + unit_name); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
77 } | 78 } |
78 | 79 |
79 const CSSValue* CSSUnitValue::ToCSSValue() const { | 80 const CSSValue* CSSUnitValue::ToCSSValue() const { |
80 return CSSPrimitiveValue::Create(value_, unit_); | 81 return CSSPrimitiveValue::Create(value_, unit_); |
81 } | 82 } |
82 | 83 |
83 CSSUnitValue* CSSUnitValue::to(CSSPrimitiveValue::UnitType unit) const { | 84 CSSUnitValue* CSSUnitValue::to(CSSPrimitiveValue::UnitType unit) const { |
84 if (unit_ == unit) | 85 if (unit_ == unit) |
85 return Create(value_, unit_); | 86 return Create(value_, unit_); |
86 | 87 |
87 // TODO(meade): Implement other types. | 88 // TODO(meade): Implement other types. |
Bugs Nash
2017/06/28 23:50:27
how many more types need to be implemented? is it
meade_UTC10
2017/06/29 06:44:09
Done.
| |
89 if (CSSPrimitiveValue::IsLength(unit_) && CSSPrimitiveValue::IsLength(unit)) { | |
90 // Only some kinds of lengths can be converted | |
Bugs Nash
2017/06/28 23:50:27
perhaps 'relative types of lengths cannot be conve
meade_UTC10
2017/06/29 06:44:09
Done.
| |
91 if (CSSPrimitiveValue::IsRelativeUnit(unit_) || | |
92 CSSPrimitiveValue::IsRelativeUnit(unit)) | |
93 return nullptr; | |
94 return Create(ConvertFixedLength(unit), unit); | |
95 } | |
88 if (CSSPrimitiveValue::IsAngle(unit_) && CSSPrimitiveValue::IsAngle(unit)) | 96 if (CSSPrimitiveValue::IsAngle(unit_) && CSSPrimitiveValue::IsAngle(unit)) |
89 return Create(ConvertAngle(unit), unit); | 97 return Create(ConvertAngle(unit), unit); |
90 | 98 |
91 return nullptr; | 99 return nullptr; |
92 } | 100 } |
93 | 101 |
102 double CSSUnitValue::ConvertFixedLength( | |
103 CSSPrimitiveValue::UnitType unit) const { | |
104 switch (unit_) { | |
105 case CSSPrimitiveValue::UnitType::kPixels: | |
106 switch (unit) { | |
107 case CSSPrimitiveValue::UnitType::kCentimeters: | |
108 return value_ / kCssPixelsPerCentimeter; | |
109 case CSSPrimitiveValue::UnitType::kMillimeters: | |
110 return value_ / kCssPixelsPerMillimeter; | |
111 case CSSPrimitiveValue::UnitType::kInches: | |
112 return value_ / kCssPixelsPerInch; | |
113 case CSSPrimitiveValue::UnitType::kPoints: | |
114 return value_ / kCssPixelsPerPoint; | |
115 case CSSPrimitiveValue::UnitType::kPicas: | |
116 return value_ / kCssPixelsPerPica; | |
117 default: | |
118 NOTREACHED(); | |
119 return 0; | |
120 } | |
121 case CSSPrimitiveValue::UnitType::kCentimeters: | |
122 switch (unit) { | |
123 case CSSPrimitiveValue::UnitType::kPixels: | |
124 return value_ * kCssPixelsPerCentimeter; | |
125 case CSSPrimitiveValue::UnitType::kMillimeters: | |
126 return value_ * 10; | |
127 case CSSPrimitiveValue::UnitType::kInches: | |
128 return value_ * (kCssPixelsPerCentimeter / kCssPixelsPerInch); | |
Bugs Nash
2017/06/28 23:50:27
why do the pixels consts need to be used when conv
meade_UTC10
2017/06/29 06:44:09
It was a convenient way to do conversions without
| |
129 case CSSPrimitiveValue::UnitType::kPoints: | |
130 return value_ * (kCssPixelsPerCentimeter / kCssPixelsPerPoint); | |
131 case CSSPrimitiveValue::UnitType::kPicas: | |
132 return value_ * (kCssPixelsPerCentimeter / kCssPixelsPerPica); | |
133 default: | |
134 NOTREACHED(); | |
135 return 0; | |
136 } | |
137 case CSSPrimitiveValue::UnitType::kMillimeters: | |
138 switch (unit) { | |
139 case CSSPrimitiveValue::UnitType::kPixels: | |
140 return value_ * kCssPixelsPerMillimeter; | |
141 case CSSPrimitiveValue::UnitType::kCentimeters: | |
142 return value_ / 10; | |
143 case CSSPrimitiveValue::UnitType::kInches: | |
144 return value_ * (kCssPixelsPerMillimeter / kCssPixelsPerInch); | |
145 case CSSPrimitiveValue::UnitType::kPoints: | |
146 return value_ * (kCssPixelsPerMillimeter / kCssPixelsPerPoint); | |
147 case CSSPrimitiveValue::UnitType::kPicas: | |
148 return value_ * (kCssPixelsPerMillimeter / kCssPixelsPerPica); | |
149 default: | |
150 NOTREACHED(); | |
151 return 0; | |
152 } | |
153 case CSSPrimitiveValue::UnitType::kInches: | |
154 switch (unit) { | |
155 case CSSPrimitiveValue::UnitType::kPixels: | |
156 return value_ * kCssPixelsPerInch; | |
157 case CSSPrimitiveValue::UnitType::kMillimeters: | |
158 return value_ * (kCssPixelsPerInch / kCssPixelsPerMillimeter); | |
159 case CSSPrimitiveValue::UnitType::kCentimeters: | |
160 return value_ * (kCssPixelsPerInch / kCssPixelsPerCentimeter); | |
161 case CSSPrimitiveValue::UnitType::kPoints: | |
162 return value_ * (kCssPixelsPerInch / kCssPixelsPerPoint); | |
163 case CSSPrimitiveValue::UnitType::kPicas: | |
164 return value_ * (kCssPixelsPerInch / kCssPixelsPerPica); | |
165 default: | |
166 NOTREACHED(); | |
167 return 0; | |
168 } | |
169 case CSSPrimitiveValue::UnitType::kPoints: | |
170 switch (unit) { | |
171 case CSSPrimitiveValue::UnitType::kPixels: | |
172 return value_ * kCssPixelsPerPoint; | |
173 case CSSPrimitiveValue::UnitType::kMillimeters: | |
174 return value_ * (kCssPixelsPerPoint / kCssPixelsPerMillimeter); | |
175 case CSSPrimitiveValue::UnitType::kCentimeters: | |
176 return value_ * (kCssPixelsPerPoint / kCssPixelsPerCentimeter); | |
177 case CSSPrimitiveValue::UnitType::kInches: | |
178 return value_ * (kCssPixelsPerPoint / kCssPixelsPerInch); | |
179 case CSSPrimitiveValue::UnitType::kPicas: | |
180 return value_ * (kCssPixelsPerPoint / kCssPixelsPerPica); | |
181 default: | |
182 NOTREACHED(); | |
183 return 0; | |
184 } | |
185 case CSSPrimitiveValue::UnitType::kPicas: | |
186 switch (unit) { | |
187 case CSSPrimitiveValue::UnitType::kPixels: | |
188 return value_ * kCssPixelsPerPica; | |
189 case CSSPrimitiveValue::UnitType::kMillimeters: | |
190 return value_ * (kCssPixelsPerPica / kCssPixelsPerMillimeter); | |
191 case CSSPrimitiveValue::UnitType::kCentimeters: | |
192 return value_ * (kCssPixelsPerPica / kCssPixelsPerCentimeter); | |
193 case CSSPrimitiveValue::UnitType::kInches: | |
194 return value_ * (kCssPixelsPerPica / kCssPixelsPerInch); | |
195 case CSSPrimitiveValue::UnitType::kPoints: | |
196 return value_ * (kCssPixelsPerPica / kCssPixelsPerPoint); | |
197 default: | |
198 NOTREACHED(); | |
199 return 0; | |
200 } | |
201 default: | |
202 NOTREACHED(); | |
203 return 0; | |
204 } | |
205 } | |
206 | |
94 double CSSUnitValue::ConvertAngle(CSSPrimitiveValue::UnitType unit) const { | 207 double CSSUnitValue::ConvertAngle(CSSPrimitiveValue::UnitType unit) const { |
95 switch (unit_) { | 208 switch (unit_) { |
96 case CSSPrimitiveValue::UnitType::kDegrees: | 209 case CSSPrimitiveValue::UnitType::kDegrees: |
97 switch (unit) { | 210 switch (unit) { |
98 case CSSPrimitiveValue::UnitType::kRadians: | 211 case CSSPrimitiveValue::UnitType::kRadians: |
99 return deg2rad(value_); | 212 return deg2rad(value_); |
100 case CSSPrimitiveValue::UnitType::kGradians: | 213 case CSSPrimitiveValue::UnitType::kGradians: |
101 return deg2grad(value_); | 214 return deg2grad(value_); |
102 case CSSPrimitiveValue::UnitType::kTurns: | 215 case CSSPrimitiveValue::UnitType::kTurns: |
103 return deg2turn(value_); | 216 return deg2turn(value_); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
141 NOTREACHED(); | 254 NOTREACHED(); |
142 return 0; | 255 return 0; |
143 } | 256 } |
144 default: | 257 default: |
145 NOTREACHED(); | 258 NOTREACHED(); |
146 return 0; | 259 return 0; |
147 } | 260 } |
148 } | 261 } |
149 | 262 |
150 } // namespace blink | 263 } // namespace blink |
OLD | NEW |