Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(324)

Side by Side Diff: third_party/WebKit/Source/core/css/cssom/CSSRotation.cpp

Issue 2813583002: Support calc(...) in ConsumeAngleOrPercent / for conic-gradient (Closed)
Patch Set: TypedOM CSSRotation fixup Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698