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

Side by Side Diff: Source/core/css/resolver/TransformBuilder.cpp

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 4 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 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 25 matching lines...) Expand all
36 #include "platform/transforms/MatrixTransformOperation.h" 36 #include "platform/transforms/MatrixTransformOperation.h"
37 #include "platform/transforms/PerspectiveTransformOperation.h" 37 #include "platform/transforms/PerspectiveTransformOperation.h"
38 #include "platform/transforms/RotateTransformOperation.h" 38 #include "platform/transforms/RotateTransformOperation.h"
39 #include "platform/transforms/ScaleTransformOperation.h" 39 #include "platform/transforms/ScaleTransformOperation.h"
40 #include "platform/transforms/SkewTransformOperation.h" 40 #include "platform/transforms/SkewTransformOperation.h"
41 #include "platform/transforms/TransformationMatrix.h" 41 #include "platform/transforms/TransformationMatrix.h"
42 #include "platform/transforms/TranslateTransformOperation.h" 42 #include "platform/transforms/TranslateTransformOperation.h"
43 43
44 namespace blink { 44 namespace blink {
45 45
46 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const CSST oLengthConversionData& conversionData) 46 static Length convertToFloatLength(CSSPrimitiveValue& primitiveValue, const CSST oLengthConversionData& conversionData)
47 { 47 {
48 ASSERT(primitiveValue); 48 return primitiveValue.convertToLength(conversionData);
49 return primitiveValue->convertToLength(conversionData);
50 } 49 }
51 50
52 static TransformOperation::OperationType getTransformOperationType(CSSValueID ty pe) 51 static TransformOperation::OperationType getTransformOperationType(CSSValueID ty pe)
53 { 52 {
54 switch (type) { 53 switch (type) {
55 case CSSValueScale: return TransformOperation::Scale; 54 case CSSValueScale: return TransformOperation::Scale;
56 case CSSValueScaleX: return TransformOperation::ScaleX; 55 case CSSValueScaleX: return TransformOperation::ScaleX;
57 case CSSValueScaleY: return TransformOperation::ScaleY; 56 case CSSValueScaleY: return TransformOperation::ScaleY;
58 case CSSValueScaleZ: return TransformOperation::ScaleZ; 57 case CSSValueScaleZ: return TransformOperation::ScaleZ;
59 case CSSValueScale3d: return TransformOperation::Scale3D; 58 case CSSValueScale3d: return TransformOperation::Scale3D;
(...skipping 23 matching lines...) Expand all
83 void TransformBuilder::createTransformOperations(CSSValue& inValue, const CSSToL engthConversionData& conversionData, TransformOperations& outOperations) 82 void TransformBuilder::createTransformOperations(CSSValue& inValue, const CSSToL engthConversionData& conversionData, TransformOperations& outOperations)
84 { 83 {
85 ASSERT(!outOperations.size()); 84 ASSERT(!outOperations.size());
86 if (!inValue.isValueList()) { 85 if (!inValue.isValueList()) {
87 ASSERT(inValue.isPrimitiveValue() && toCSSPrimitiveValue(inValue).getVal ueID() == CSSValueNone); 86 ASSERT(inValue.isPrimitiveValue() && toCSSPrimitiveValue(inValue).getVal ueID() == CSSValueNone);
88 return; 87 return;
89 } 88 }
90 89
91 float zoomFactor = conversionData.zoom(); 90 float zoomFactor = conversionData.zoom();
92 for (auto& value : toCSSValueList(inValue)) { 91 for (auto& value : toCSSValueList(inValue)) {
93 CSSFunctionValue* transformValue = toCSSFunctionValue(value.get()); 92 CSSFunctionValue& transformValue = toCSSFunctionValue(value);
94 TransformOperation::OperationType transformType = getTransformOperationT ype(transformValue->functionType()); 93 TransformOperation::OperationType transformType = getTransformOperationT ype(transformValue.functionType());
95 94
96 CSSPrimitiveValue* firstValue = toCSSPrimitiveValue(transformValue->item (0)); 95 CSSPrimitiveValue& firstValue = toCSSPrimitiveValue(transformValue.item( 0));
97 96
98 switch (transformType) { 97 switch (transformType) {
99 case TransformOperation::Scale: 98 case TransformOperation::Scale:
100 case TransformOperation::ScaleX: 99 case TransformOperation::ScaleX:
101 case TransformOperation::ScaleY: { 100 case TransformOperation::ScaleY: {
102 double sx = 1.0; 101 double sx = 1.0;
103 double sy = 1.0; 102 double sy = 1.0;
104 if (transformType == TransformOperation::ScaleY) { 103 if (transformType == TransformOperation::ScaleY) {
105 sy = firstValue->getDoubleValue(); 104 sy = firstValue.getDoubleValue();
106 } else { 105 } else {
107 sx = firstValue->getDoubleValue(); 106 sx = firstValue.getDoubleValue();
108 if (transformType != TransformOperation::ScaleX) { 107 if (transformType != TransformOperation::ScaleX) {
109 if (transformValue->length() > 1) { 108 if (transformValue.length() > 1) {
110 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->item(1)); 109 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(tra nsformValue.item(1));
111 sy = secondValue->getDoubleValue(); 110 sy = secondValue.getDoubleValue();
112 } else { 111 } else {
113 sy = sx; 112 sy = sx;
114 } 113 }
115 } 114 }
116 } 115 }
117 outOperations.operations().append(ScaleTransformOperation::create(sx , sy, 1.0, transformType)); 116 outOperations.operations().append(ScaleTransformOperation::create(sx , sy, 1.0, transformType));
118 break; 117 break;
119 } 118 }
120 case TransformOperation::ScaleZ: 119 case TransformOperation::ScaleZ:
121 case TransformOperation::Scale3D: { 120 case TransformOperation::Scale3D: {
122 double sx = 1.0; 121 double sx = 1.0;
123 double sy = 1.0; 122 double sy = 1.0;
124 double sz = 1.0; 123 double sz = 1.0;
125 if (transformType == TransformOperation::ScaleZ) { 124 if (transformType == TransformOperation::ScaleZ) {
126 sz = firstValue->getDoubleValue(); 125 sz = firstValue.getDoubleValue();
127 } else { 126 } else {
128 sx = firstValue->getDoubleValue(); 127 sx = firstValue.getDoubleValue();
129 sy = toCSSPrimitiveValue(transformValue->item(1))->getDoubleValu e(); 128 sy = toCSSPrimitiveValue(transformValue.item(1)).getDoubleValue( );
130 sz = toCSSPrimitiveValue(transformValue->item(2))->getDoubleValu e(); 129 sz = toCSSPrimitiveValue(transformValue.item(2)).getDoubleValue( );
131 } 130 }
132 outOperations.operations().append(ScaleTransformOperation::create(sx , sy, sz, transformType)); 131 outOperations.operations().append(ScaleTransformOperation::create(sx , sy, sz, transformType));
133 break; 132 break;
134 } 133 }
135 case TransformOperation::Translate: 134 case TransformOperation::Translate:
136 case TransformOperation::TranslateX: 135 case TransformOperation::TranslateX:
137 case TransformOperation::TranslateY: { 136 case TransformOperation::TranslateY: {
138 Length tx = Length(0, Fixed); 137 Length tx = Length(0, Fixed);
139 Length ty = Length(0, Fixed); 138 Length ty = Length(0, Fixed);
140 if (transformType == TransformOperation::TranslateY) 139 if (transformType == TransformOperation::TranslateY)
141 ty = convertToFloatLength(firstValue, conversionData); 140 ty = convertToFloatLength(firstValue, conversionData);
142 else { 141 else {
143 tx = convertToFloatLength(firstValue, conversionData); 142 tx = convertToFloatLength(firstValue, conversionData);
144 if (transformType != TransformOperation::TranslateX) { 143 if (transformType != TransformOperation::TranslateX) {
145 if (transformValue->length() > 1) { 144 if (transformValue.length() > 1) {
146 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->item(1)); 145 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(tra nsformValue.item(1));
147 ty = convertToFloatLength(secondValue, conversionData); 146 ty = convertToFloatLength(secondValue, conversionData);
148 } 147 }
149 } 148 }
150 } 149 }
151 150
152 outOperations.operations().append(TranslateTransformOperation::creat e(tx, ty, 0, transformType)); 151 outOperations.operations().append(TranslateTransformOperation::creat e(tx, ty, 0, transformType));
153 break; 152 break;
154 } 153 }
155 case TransformOperation::TranslateZ: 154 case TransformOperation::TranslateZ:
156 case TransformOperation::Translate3D: { 155 case TransformOperation::Translate3D: {
157 Length tx = Length(0, Fixed); 156 Length tx = Length(0, Fixed);
158 Length ty = Length(0, Fixed); 157 Length ty = Length(0, Fixed);
159 double tz = 0; 158 double tz = 0;
160 if (transformType == TransformOperation::TranslateZ) { 159 if (transformType == TransformOperation::TranslateZ) {
161 tz = firstValue->computeLength<double>(conversionData); 160 tz = firstValue.computeLength<double>(conversionData);
162 } else { 161 } else {
163 tx = convertToFloatLength(firstValue, conversionData); 162 tx = convertToFloatLength(firstValue, conversionData);
164 ty = convertToFloatLength(toCSSPrimitiveValue(transformValue->it em(1)), conversionData); 163 ty = convertToFloatLength(toCSSPrimitiveValue(transformValue.ite m(1)), conversionData);
165 tz = toCSSPrimitiveValue(transformValue->item(2))->computeLength <double>(conversionData); 164 tz = toCSSPrimitiveValue(transformValue.item(2)).computeLength<d ouble>(conversionData);
166 } 165 }
167 166
168 outOperations.operations().append(TranslateTransformOperation::creat e(tx, ty, tz, transformType)); 167 outOperations.operations().append(TranslateTransformOperation::creat e(tx, ty, tz, transformType));
169 break; 168 break;
170 } 169 }
171 case TransformOperation::RotateX: 170 case TransformOperation::RotateX:
172 case TransformOperation::RotateY: 171 case TransformOperation::RotateY:
173 case TransformOperation::RotateZ: { 172 case TransformOperation::RotateZ: {
174 double angle = firstValue->computeDegrees(); 173 double angle = firstValue.computeDegrees();
175 double x = transformType == TransformOperation::RotateX; 174 double x = transformType == TransformOperation::RotateX;
176 double y = transformType == TransformOperation::RotateY; 175 double y = transformType == TransformOperation::RotateY;
177 double z = transformType == TransformOperation::RotateZ; 176 double z = transformType == TransformOperation::RotateZ;
178 outOperations.operations().append(RotateTransformOperation::create(x , y, z, angle, transformType)); 177 outOperations.operations().append(RotateTransformOperation::create(x , y, z, angle, transformType));
179 break; 178 break;
180 } 179 }
181 case TransformOperation::Rotate3D: { 180 case TransformOperation::Rotate3D: {
182 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(transformValue- >item(1)); 181 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(transformValue. item(1));
183 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(transformValue-> item(2)); 182 CSSPrimitiveValue& thirdValue = toCSSPrimitiveValue(transformValue.i tem(2));
184 CSSPrimitiveValue* fourthValue = toCSSPrimitiveValue(transformValue- >item(3)); 183 CSSPrimitiveValue& fourthValue = toCSSPrimitiveValue(transformValue. item(3));
185 double x = firstValue->getDoubleValue(); 184 double x = firstValue.getDoubleValue();
186 double y = secondValue->getDoubleValue(); 185 double y = secondValue.getDoubleValue();
187 double z = thirdValue->getDoubleValue(); 186 double z = thirdValue.getDoubleValue();
188 double angle = fourthValue->computeDegrees(); 187 double angle = fourthValue.computeDegrees();
189 outOperations.operations().append(RotateTransformOperation::create(x , y, z, angle, transformType)); 188 outOperations.operations().append(RotateTransformOperation::create(x , y, z, angle, transformType));
190 break; 189 break;
191 } 190 }
192 case TransformOperation::Skew: 191 case TransformOperation::Skew:
193 case TransformOperation::SkewX: 192 case TransformOperation::SkewX:
194 case TransformOperation::SkewY: { 193 case TransformOperation::SkewY: {
195 double angleX = 0; 194 double angleX = 0;
196 double angleY = 0; 195 double angleY = 0;
197 double angle = firstValue->computeDegrees(); 196 double angle = firstValue.computeDegrees();
198 if (transformType == TransformOperation::SkewY) 197 if (transformType == TransformOperation::SkewY)
199 angleY = angle; 198 angleY = angle;
200 else { 199 else {
201 angleX = angle; 200 angleX = angle;
202 if (transformType == TransformOperation::Skew) { 201 if (transformType == TransformOperation::Skew) {
203 if (transformValue->length() > 1) { 202 if (transformValue.length() > 1) {
204 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->item(1)); 203 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(tra nsformValue.item(1));
205 angleY = secondValue->computeDegrees(); 204 angleY = secondValue.computeDegrees();
206 } 205 }
207 } 206 }
208 } 207 }
209 outOperations.operations().append(SkewTransformOperation::create(ang leX, angleY, transformType)); 208 outOperations.operations().append(SkewTransformOperation::create(ang leX, angleY, transformType));
210 break; 209 break;
211 } 210 }
212 case TransformOperation::Matrix: { 211 case TransformOperation::Matrix: {
213 double a = firstValue->getDoubleValue(); 212 double a = firstValue.getDoubleValue();
214 double b = toCSSPrimitiveValue(transformValue->item(1))->getDoubleVa lue(); 213 double b = toCSSPrimitiveValue(transformValue.item(1)).getDoubleValu e();
215 double c = toCSSPrimitiveValue(transformValue->item(2))->getDoubleVa lue(); 214 double c = toCSSPrimitiveValue(transformValue.item(2)).getDoubleValu e();
216 double d = toCSSPrimitiveValue(transformValue->item(3))->getDoubleVa lue(); 215 double d = toCSSPrimitiveValue(transformValue.item(3)).getDoubleValu e();
217 double e = zoomFactor * toCSSPrimitiveValue(transformValue->item(4)) ->getDoubleValue(); 216 double e = zoomFactor * toCSSPrimitiveValue(transformValue.item(4)). getDoubleValue();
218 double f = zoomFactor * toCSSPrimitiveValue(transformValue->item(5)) ->getDoubleValue(); 217 double f = zoomFactor * toCSSPrimitiveValue(transformValue.item(5)). getDoubleValue();
219 outOperations.operations().append(MatrixTransformOperation::create(a , b, c, d, e, f)); 218 outOperations.operations().append(MatrixTransformOperation::create(a , b, c, d, e, f));
220 break; 219 break;
221 } 220 }
222 case TransformOperation::Matrix3D: { 221 case TransformOperation::Matrix3D: {
223 TransformationMatrix matrix(toCSSPrimitiveValue(transformValue->item (0))->getDoubleValue(), 222 TransformationMatrix matrix(toCSSPrimitiveValue(transformValue.item( 0)).getDoubleValue(),
224 toCSSPrimitiveValue(transformValue->item(1))->getDoubleValue(), 223 toCSSPrimitiveValue(transformValue.item(1)).getDoubleValue(),
225 toCSSPrimitiveValue(transformValue->item(2))->getDoubleValue(), 224 toCSSPrimitiveValue(transformValue.item(2)).getDoubleValue(),
226 toCSSPrimitiveValue(transformValue->item(3))->getDoubleValue(), 225 toCSSPrimitiveValue(transformValue.item(3)).getDoubleValue(),
227 toCSSPrimitiveValue(transformValue->item(4))->getDoubleValue(), 226 toCSSPrimitiveValue(transformValue.item(4)).getDoubleValue(),
228 toCSSPrimitiveValue(transformValue->item(5))->getDoubleValue(), 227 toCSSPrimitiveValue(transformValue.item(5)).getDoubleValue(),
229 toCSSPrimitiveValue(transformValue->item(6))->getDoubleValue(), 228 toCSSPrimitiveValue(transformValue.item(6)).getDoubleValue(),
230 toCSSPrimitiveValue(transformValue->item(7))->getDoubleValue(), 229 toCSSPrimitiveValue(transformValue.item(7)).getDoubleValue(),
231 toCSSPrimitiveValue(transformValue->item(8))->getDoubleValue(), 230 toCSSPrimitiveValue(transformValue.item(8)).getDoubleValue(),
232 toCSSPrimitiveValue(transformValue->item(9))->getDoubleValue(), 231 toCSSPrimitiveValue(transformValue.item(9)).getDoubleValue(),
233 toCSSPrimitiveValue(transformValue->item(10))->getDoubleValue(), 232 toCSSPrimitiveValue(transformValue.item(10)).getDoubleValue(),
234 toCSSPrimitiveValue(transformValue->item(11))->getDoubleValue(), 233 toCSSPrimitiveValue(transformValue.item(11)).getDoubleValue(),
235 zoomFactor * toCSSPrimitiveValue(transformValue->item(12))->getD oubleValue(), 234 zoomFactor * toCSSPrimitiveValue(transformValue.item(12)).getDou bleValue(),
236 zoomFactor * toCSSPrimitiveValue(transformValue->item(13))->getD oubleValue(), 235 zoomFactor * toCSSPrimitiveValue(transformValue.item(13)).getDou bleValue(),
237 toCSSPrimitiveValue(transformValue->item(14))->getDoubleValue(), 236 toCSSPrimitiveValue(transformValue.item(14)).getDoubleValue(),
238 toCSSPrimitiveValue(transformValue->item(15))->getDoubleValue()) ; 237 toCSSPrimitiveValue(transformValue.item(15)).getDoubleValue());
239 outOperations.operations().append(Matrix3DTransformOperation::create (matrix)); 238 outOperations.operations().append(Matrix3DTransformOperation::create (matrix));
240 break; 239 break;
241 } 240 }
242 case TransformOperation::Perspective: { 241 case TransformOperation::Perspective: {
243 double p = firstValue->computeLength<double>(conversionData); 242 double p = firstValue.computeLength<double>(conversionData);
244 ASSERT(p >= 0); 243 ASSERT(p >= 0);
245 outOperations.operations().append(PerspectiveTransformOperation::cre ate(p)); 244 outOperations.operations().append(PerspectiveTransformOperation::cre ate(p));
246 break; 245 break;
247 } 246 }
248 default: 247 default:
249 ASSERT_NOT_REACHED(); 248 ASSERT_NOT_REACHED();
250 break; 249 break;
251 } 250 }
252 } 251 }
253 } 252 }
254 253
255 } // namespace blink 254 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleResolverState.h ('k') | Source/core/css/resolver/ViewportStyleResolver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698