OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/CSSRotation.h" | 5 #include "core/css/cssom/CSSRotation.h" |
6 | 6 |
7 #include "core/css/CSSFunctionValue.h" | 7 #include "core/css/CSSFunctionValue.h" |
8 #include "core/css/CSSPrimitiveValue.h" | 8 #include "core/css/CSSPrimitiveValue.h" |
9 | 9 |
10 namespace blink { | 10 namespace blink { |
11 | 11 |
12 namespace { | 12 namespace { |
13 | 13 |
14 bool IsNumberValue(const CSSValue& value) { | 14 bool IsNumberValue(const CSSValue& value) { |
15 return value.IsPrimitiveValue() && ToCSSPrimitiveValue(value).IsNumber(); | 15 return value.IsPrimitiveValue() && ToCSSPrimitiveValue(value).IsNumber(); |
16 } | 16 } |
17 | 17 |
18 CSSRotation* FromCSSRotate(const CSSFunctionValue& value) { | 18 CSSRotation* FromCSSRotate(const CSSFunctionValue& value) { |
19 DCHECK_EQ(value.length(), 1UL); | 19 DCHECK_EQ(value.length(), 1UL); |
20 const CSSPrimitiveValue& primitive_value = ToCSSPrimitiveValue(value.Item(0)); | 20 const CSSPrimitiveValue& primitive_value = ToCSSPrimitiveValue(value.Item(0)); |
21 if (!primitive_value.IsAngle()) | 21 if (primitive_value.IsCalculated() || !primitive_value.IsAngle()) |
22 return nullptr; | 22 return nullptr; |
23 return CSSRotation::Create(CSSAngleValue::FromCSSValue(primitive_value)); | 23 return CSSRotation::Create(CSSAngleValue::FromCSSValue(primitive_value)); |
24 } | 24 } |
25 | 25 |
26 CSSRotation* FromCSSRotate3d(const CSSFunctionValue& value) { | 26 CSSRotation* FromCSSRotate3d(const CSSFunctionValue& value) { |
27 DCHECK_EQ(value.length(), 4UL); | 27 DCHECK_EQ(value.length(), 4UL); |
28 DCHECK(IsNumberValue(value.Item(0))); | 28 DCHECK(IsNumberValue(value.Item(0))); |
29 DCHECK(IsNumberValue(value.Item(1))); | 29 DCHECK(IsNumberValue(value.Item(1))); |
30 DCHECK(IsNumberValue(value.Item(2))); | 30 DCHECK(IsNumberValue(value.Item(2))); |
31 const CSSPrimitiveValue& angle = ToCSSPrimitiveValue(value.Item(3)); | 31 const CSSPrimitiveValue& angle = ToCSSPrimitiveValue(value.Item(3)); |
32 if (!angle.IsAngle()) | 32 if (angle.IsCalculated() || !angle.IsAngle()) |
33 return nullptr; | 33 return nullptr; |
34 | 34 |
35 double x = ToCSSPrimitiveValue(value.Item(0)).GetDoubleValue(); | 35 double x = ToCSSPrimitiveValue(value.Item(0)).GetDoubleValue(); |
36 double y = ToCSSPrimitiveValue(value.Item(1)).GetDoubleValue(); | 36 double y = ToCSSPrimitiveValue(value.Item(1)).GetDoubleValue(); |
37 double z = ToCSSPrimitiveValue(value.Item(2)).GetDoubleValue(); | 37 double z = ToCSSPrimitiveValue(value.Item(2)).GetDoubleValue(); |
38 | 38 |
39 return CSSRotation::Create(x, y, z, CSSAngleValue::FromCSSValue(angle)); | 39 return CSSRotation::Create(x, y, z, CSSAngleValue::FromCSSValue(angle)); |
40 } | 40 } |
41 | 41 |
42 CSSRotation* FromCSSRotateXYZ(const CSSFunctionValue& value) { | 42 CSSRotation* FromCSSRotateXYZ(const CSSFunctionValue& value) { |
43 DCHECK_EQ(value.length(), 1UL); | 43 DCHECK_EQ(value.length(), 1UL); |
44 | 44 const CSSPrimitiveValue& primitive_value = ToCSSPrimitiveValue(value.Item(0)); |
45 CSSAngleValue* angle = | 45 if (primitive_value.IsCalculated()) |
46 CSSAngleValue::FromCSSValue(ToCSSPrimitiveValue(value.Item(0))); | 46 return nullptr; |
| 47 CSSAngleValue* angle = CSSAngleValue::FromCSSValue(primitive_value); |
47 switch (value.FunctionType()) { | 48 switch (value.FunctionType()) { |
48 case CSSValueRotateX: | 49 case CSSValueRotateX: |
49 return CSSRotation::Create(1, 0, 0, angle); | 50 return CSSRotation::Create(1, 0, 0, angle); |
50 case CSSValueRotateY: | 51 case CSSValueRotateY: |
51 return CSSRotation::Create(0, 1, 0, angle); | 52 return CSSRotation::Create(0, 1, 0, angle); |
52 case CSSValueRotateZ: | 53 case CSSValueRotateZ: |
53 return CSSRotation::Create(0, 0, 1, angle); | 54 return CSSRotation::Create(0, 0, 1, angle); |
54 default: | 55 default: |
55 NOTREACHED(); | 56 NOTREACHED(); |
56 return nullptr; | 57 return nullptr; |
(...skipping 27 matching lines...) Expand all Loading... |
84 result->Append( | 85 result->Append( |
85 *CSSPrimitiveValue::Create(y_, CSSPrimitiveValue::UnitType::kNumber)); | 86 *CSSPrimitiveValue::Create(y_, CSSPrimitiveValue::UnitType::kNumber)); |
86 result->Append( | 87 result->Append( |
87 *CSSPrimitiveValue::Create(z_, CSSPrimitiveValue::UnitType::kNumber)); | 88 *CSSPrimitiveValue::Create(z_, CSSPrimitiveValue::UnitType::kNumber)); |
88 } | 89 } |
89 result->Append(*CSSPrimitiveValue::Create(angle_->Value(), angle_->Unit())); | 90 result->Append(*CSSPrimitiveValue::Create(angle_->Value(), angle_->Unit())); |
90 return result; | 91 return result; |
91 } | 92 } |
92 | 93 |
93 } // namespace blink | 94 } // namespace blink |
OLD | NEW |