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

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

Issue 64293008: Wrap CSS length conversion arguments in an object (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: erm.. use DEFINE_STATIC_REF Created 7 years 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 namespace WebCore { 44 namespace WebCore {
45 45
46 TransformBuilder::TransformBuilder() 46 TransformBuilder::TransformBuilder()
47 { 47 {
48 } 48 }
49 49
50 TransformBuilder::~TransformBuilder() 50 TransformBuilder::~TransformBuilder()
51 { 51 {
52 } 52 }
53 53
54 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const Rend erStyle* style, const RenderStyle* rootStyle, double multiplier) 54 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const CSST oLengthConversionData& conversionData)
55 { 55 {
56 return primitiveValue ? primitiveValue->convertToLength<FixedConversion | Pe rcentConversion>(style, rootStyle, multiplier) : Length(Undefined); 56 return primitiveValue ? primitiveValue->convertToLength<FixedConversion | Pe rcentConversion>(conversionData) : Length(Undefined);
57 } 57 }
58 58
59 static TransformOperation::OperationType getTransformOperationType(CSSTransformV alue::TransformOperationType type) 59 static TransformOperation::OperationType getTransformOperationType(CSSTransformV alue::TransformOperationType type)
60 { 60 {
61 switch (type) { 61 switch (type) {
62 case CSSTransformValue::ScaleTransformOperation: return TransformOperation:: Scale; 62 case CSSTransformValue::ScaleTransformOperation: return TransformOperation:: Scale;
63 case CSSTransformValue::ScaleXTransformOperation: return TransformOperation: :ScaleX; 63 case CSSTransformValue::ScaleXTransformOperation: return TransformOperation: :ScaleX;
64 case CSSTransformValue::ScaleYTransformOperation: return TransformOperation: :ScaleY; 64 case CSSTransformValue::ScaleYTransformOperation: return TransformOperation: :ScaleY;
65 case CSSTransformValue::ScaleZTransformOperation: return TransformOperation: :ScaleZ; 65 case CSSTransformValue::ScaleZTransformOperation: return TransformOperation: :ScaleZ;
66 case CSSTransformValue::Scale3DTransformOperation: return TransformOperation ::Scale3D; 66 case CSSTransformValue::Scale3DTransformOperation: return TransformOperation ::Scale3D;
(...skipping 11 matching lines...) Expand all
78 case CSSTransformValue::SkewXTransformOperation: return TransformOperation:: SkewX; 78 case CSSTransformValue::SkewXTransformOperation: return TransformOperation:: SkewX;
79 case CSSTransformValue::SkewYTransformOperation: return TransformOperation:: SkewY; 79 case CSSTransformValue::SkewYTransformOperation: return TransformOperation:: SkewY;
80 case CSSTransformValue::MatrixTransformOperation: return TransformOperation: :Matrix; 80 case CSSTransformValue::MatrixTransformOperation: return TransformOperation: :Matrix;
81 case CSSTransformValue::Matrix3DTransformOperation: return TransformOperatio n::Matrix3D; 81 case CSSTransformValue::Matrix3DTransformOperation: return TransformOperatio n::Matrix3D;
82 case CSSTransformValue::PerspectiveTransformOperation: return TransformOpera tion::Perspective; 82 case CSSTransformValue::PerspectiveTransformOperation: return TransformOpera tion::Perspective;
83 case CSSTransformValue::UnknownTransformOperation: return TransformOperation ::None; 83 case CSSTransformValue::UnknownTransformOperation: return TransformOperation ::None;
84 } 84 }
85 return TransformOperation::None; 85 return TransformOperation::None;
86 } 86 }
87 87
88 bool TransformBuilder::createTransformOperations(CSSValue* inValue, const Render Style* style, const RenderStyle* rootStyle, TransformOperations& outOperations) 88 bool TransformBuilder::createTransformOperations(CSSValue* inValue, const CSSToL engthConversionData& conversionData, TransformOperations& outOperations)
89 { 89 {
90 if (!inValue || !inValue->isValueList()) { 90 if (!inValue || !inValue->isValueList()) {
91 outOperations.clear(); 91 outOperations.clear();
92 return false; 92 return false;
93 } 93 }
94 94
95 float zoomFactor = style ? style->effectiveZoom() : 1; 95 float zoomFactor = conversionData.zoom();
96 TransformOperations operations; 96 TransformOperations operations;
97 for (CSSValueListIterator i = inValue; i.hasMore(); i.advance()) { 97 for (CSSValueListIterator i = inValue; i.hasMore(); i.advance()) {
98 CSSValue* currValue = i.value(); 98 CSSValue* currValue = i.value();
99 99
100 if (!currValue->isTransformValue()) 100 if (!currValue->isTransformValue())
101 continue; 101 continue;
102 102
103 CSSTransformValue* transformValue = toCSSTransformValue(i.value()); 103 CSSTransformValue* transformValue = toCSSTransformValue(i.value());
104 if (!transformValue->length()) 104 if (!transformValue->length())
105 continue; 105 continue;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 } 162 }
163 operations.operations().append(ScaleTransformOperation::create(sx, s y, sz, getTransformOperationType(transformValue->operationType()))); 163 operations.operations().append(ScaleTransformOperation::create(sx, s y, sz, getTransformOperationType(transformValue->operationType())));
164 break; 164 break;
165 } 165 }
166 case CSSTransformValue::TranslateTransformOperation: 166 case CSSTransformValue::TranslateTransformOperation:
167 case CSSTransformValue::TranslateXTransformOperation: 167 case CSSTransformValue::TranslateXTransformOperation:
168 case CSSTransformValue::TranslateYTransformOperation: { 168 case CSSTransformValue::TranslateYTransformOperation: {
169 Length tx = Length(0, Fixed); 169 Length tx = Length(0, Fixed);
170 Length ty = Length(0, Fixed); 170 Length ty = Length(0, Fixed);
171 if (transformValue->operationType() == CSSTransformValue::TranslateY TransformOperation) 171 if (transformValue->operationType() == CSSTransformValue::TranslateY TransformOperation)
172 ty = convertToFloatLength(firstValue, style, rootStyle, zoomFact or); 172 ty = convertToFloatLength(firstValue, conversionData);
173 else { 173 else {
174 tx = convertToFloatLength(firstValue, style, rootStyle, zoomFact or); 174 tx = convertToFloatLength(firstValue, conversionData);
175 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) { 175 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) {
176 if (transformValue->length() > 1) { 176 if (transformValue->length() > 1) {
177 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1)); 177 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1));
178 ty = convertToFloatLength(secondValue, style, rootStyle, zoomFactor); 178 ty = convertToFloatLength(secondValue, conversionData);
179 } 179 }
180 } 180 }
181 } 181 }
182 182
183 if (tx.isUndefined() || ty.isUndefined()) 183 if (tx.isUndefined() || ty.isUndefined())
184 return false; 184 return false;
185 185
186 operations.operations().append(TranslateTransformOperation::create(t x, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType ()))); 186 operations.operations().append(TranslateTransformOperation::create(t x, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType ())));
187 break; 187 break;
188 } 188 }
189 case CSSTransformValue::TranslateZTransformOperation: 189 case CSSTransformValue::TranslateZTransformOperation:
190 case CSSTransformValue::Translate3DTransformOperation: { 190 case CSSTransformValue::Translate3DTransformOperation: {
191 Length tx = Length(0, Fixed); 191 Length tx = Length(0, Fixed);
192 Length ty = Length(0, Fixed); 192 Length ty = Length(0, Fixed);
193 Length tz = Length(0, Fixed); 193 Length tz = Length(0, Fixed);
194 if (transformValue->operationType() == CSSTransformValue::TranslateZ TransformOperation) 194 if (transformValue->operationType() == CSSTransformValue::TranslateZ TransformOperation)
195 tz = convertToFloatLength(firstValue, style, rootStyle, zoomFact or); 195 tz = convertToFloatLength(firstValue, conversionData);
196 else if (transformValue->operationType() == CSSTransformValue::Trans lateYTransformOperation) 196 else if (transformValue->operationType() == CSSTransformValue::Trans lateYTransformOperation)
197 ty = convertToFloatLength(firstValue, style, rootStyle, zoomFact or); 197 ty = convertToFloatLength(firstValue, conversionData);
198 else { 198 else {
199 tx = convertToFloatLength(firstValue, style, rootStyle, zoomFact or); 199 tx = convertToFloatLength(firstValue, conversionData);
200 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) { 200 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) {
201 if (transformValue->length() > 2) { 201 if (transformValue->length() > 2) {
202 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(tran sformValue->itemWithoutBoundsCheck(2)); 202 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(tran sformValue->itemWithoutBoundsCheck(2));
203 tz = convertToFloatLength(thirdValue, style, rootStyle, zoomFactor); 203 tz = convertToFloatLength(thirdValue, conversionData);
204 } 204 }
205 if (transformValue->length() > 1) { 205 if (transformValue->length() > 1) {
206 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1)); 206 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1));
207 ty = convertToFloatLength(secondValue, style, rootStyle, zoomFactor); 207 ty = convertToFloatLength(secondValue, conversionData);
208 } 208 }
209 } 209 }
210 } 210 }
211 211
212 if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined()) 212 if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined())
213 return false; 213 return false;
214 214
215 operations.operations().append(TranslateTransformOperation::create(t x, ty, tz, getTransformOperationType(transformValue->operationType()))); 215 operations.operations().append(TranslateTransformOperation::create(t x, ty, tz, getTransformOperationType(transformValue->operationType())));
216 break; 216 break;
217 } 217 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 zoomFactor * toCSSPrimitiveValue(transformValue->itemWithoutBoun dsCheck(12))->getDoubleValue(), 300 zoomFactor * toCSSPrimitiveValue(transformValue->itemWithoutBoun dsCheck(12))->getDoubleValue(),
301 zoomFactor * toCSSPrimitiveValue(transformValue->itemWithoutBoun dsCheck(13))->getDoubleValue(), 301 zoomFactor * toCSSPrimitiveValue(transformValue->itemWithoutBoun dsCheck(13))->getDoubleValue(),
302 toCSSPrimitiveValue(transformValue->itemWithoutBoundsCheck(14))- >getDoubleValue(), 302 toCSSPrimitiveValue(transformValue->itemWithoutBoundsCheck(14))- >getDoubleValue(),
303 toCSSPrimitiveValue(transformValue->itemWithoutBoundsCheck(15))- >getDoubleValue()); 303 toCSSPrimitiveValue(transformValue->itemWithoutBoundsCheck(15))- >getDoubleValue());
304 operations.operations().append(Matrix3DTransformOperation::create(ma trix)); 304 operations.operations().append(Matrix3DTransformOperation::create(ma trix));
305 break; 305 break;
306 } 306 }
307 case CSSTransformValue::PerspectiveTransformOperation: { 307 case CSSTransformValue::PerspectiveTransformOperation: {
308 Length p = Length(0, Fixed); 308 Length p = Length(0, Fixed);
309 if (firstValue->isLength()) 309 if (firstValue->isLength())
310 p = convertToFloatLength(firstValue, style, rootStyle, zoomFacto r); 310 p = convertToFloatLength(firstValue, conversionData);
311 else { 311 else {
312 // This is a quirk that should go away when 3d transforms are fi nalized. 312 // This is a quirk that should go away when 3d transforms are fi nalized.
313 double val = firstValue->getDoubleValue(); 313 double val = firstValue->getDoubleValue();
314 p = val >= 0 ? Length(clampToPositiveInteger(val), Fixed) : Leng th(Undefined); 314 p = val >= 0 ? Length(clampToPositiveInteger(val), Fixed) : Leng th(Undefined);
315 } 315 }
316 316
317 if (p.isUndefined()) 317 if (p.isUndefined())
318 return false; 318 return false;
319 319
320 operations.operations().append(PerspectiveTransformOperation::create (p)); 320 operations.operations().append(PerspectiveTransformOperation::create (p));
321 break; 321 break;
322 } 322 }
323 case CSSTransformValue::UnknownTransformOperation: 323 case CSSTransformValue::UnknownTransformOperation:
324 ASSERT_NOT_REACHED(); 324 ASSERT_NOT_REACHED();
325 break; 325 break;
326 } 326 }
327 } 327 }
328 328
329 outOperations = operations; 329 outOperations = operations;
330 return true; 330 return true;
331 } 331 }
332 332
333 } // namespace WebCore 333 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698