OLD | NEW |
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 CSST
oLengthConversionData& conversionData) | 54 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const CSST
oLengthConversionData& conversionData) |
55 { | 55 { |
56 return primitiveValue ? primitiveValue->convertToLength<FixedConversion | Pe
rcentConversion>(conversionData) : Length(Undefined); | 56 ASSERT(primitiveValue); |
| 57 return primitiveValue->convertToLength<FixedConversion | PercentConversion>(
conversionData); |
57 } | 58 } |
58 | 59 |
59 static TransformOperation::OperationType getTransformOperationType(CSSTransformV
alue::TransformOperationType type) | 60 static TransformOperation::OperationType getTransformOperationType(CSSTransformV
alue::TransformOperationType type) |
60 { | 61 { |
61 switch (type) { | 62 switch (type) { |
62 case CSSTransformValue::ScaleTransformOperation: return TransformOperation::
Scale; | 63 case CSSTransformValue::ScaleTransformOperation: return TransformOperation::
Scale; |
63 case CSSTransformValue::ScaleXTransformOperation: return TransformOperation:
:ScaleX; | 64 case CSSTransformValue::ScaleXTransformOperation: return TransformOperation:
:ScaleX; |
64 case CSSTransformValue::ScaleYTransformOperation: return TransformOperation:
:ScaleY; | 65 case CSSTransformValue::ScaleYTransformOperation: return TransformOperation:
:ScaleY; |
65 case CSSTransformValue::ScaleZTransformOperation: return TransformOperation:
:ScaleZ; | 66 case CSSTransformValue::ScaleZTransformOperation: return TransformOperation:
:ScaleZ; |
66 case CSSTransformValue::Scale3DTransformOperation: return TransformOperation
::Scale3D; | 67 case CSSTransformValue::Scale3DTransformOperation: return TransformOperation
::Scale3D; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 else { | 174 else { |
174 tx = convertToFloatLength(firstValue, conversionData); | 175 tx = convertToFloatLength(firstValue, conversionData); |
175 if (transformValue->operationType() != CSSTransformValue::Transl
ateXTransformOperation) { | 176 if (transformValue->operationType() != CSSTransformValue::Transl
ateXTransformOperation) { |
176 if (transformValue->length() > 1) { | 177 if (transformValue->length() > 1) { |
177 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->itemWithoutBoundsCheck(1)); | 178 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->itemWithoutBoundsCheck(1)); |
178 ty = convertToFloatLength(secondValue, conversionData); | 179 ty = convertToFloatLength(secondValue, conversionData); |
179 } | 180 } |
180 } | 181 } |
181 } | 182 } |
182 | 183 |
183 if (tx.isUndefined() || ty.isUndefined()) | |
184 return false; | |
185 | |
186 operations.operations().append(TranslateTransformOperation::create(t
x, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType
()))); | 184 operations.operations().append(TranslateTransformOperation::create(t
x, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType
()))); |
187 break; | 185 break; |
188 } | 186 } |
189 case CSSTransformValue::TranslateZTransformOperation: | 187 case CSSTransformValue::TranslateZTransformOperation: |
190 case CSSTransformValue::Translate3DTransformOperation: { | 188 case CSSTransformValue::Translate3DTransformOperation: { |
191 Length tx = Length(0, Fixed); | 189 Length tx = Length(0, Fixed); |
192 Length ty = Length(0, Fixed); | 190 Length ty = Length(0, Fixed); |
193 Length tz = Length(0, Fixed); | 191 Length tz = Length(0, Fixed); |
194 if (transformValue->operationType() == CSSTransformValue::TranslateZ
TransformOperation) | 192 if (transformValue->operationType() == CSSTransformValue::TranslateZ
TransformOperation) |
195 tz = convertToFloatLength(firstValue, conversionData); | 193 tz = convertToFloatLength(firstValue, conversionData); |
196 else if (transformValue->operationType() == CSSTransformValue::Trans
lateYTransformOperation) | 194 else if (transformValue->operationType() == CSSTransformValue::Trans
lateYTransformOperation) |
197 ty = convertToFloatLength(firstValue, conversionData); | 195 ty = convertToFloatLength(firstValue, conversionData); |
198 else { | 196 else { |
199 tx = convertToFloatLength(firstValue, conversionData); | 197 tx = convertToFloatLength(firstValue, conversionData); |
200 if (transformValue->operationType() != CSSTransformValue::Transl
ateXTransformOperation) { | 198 if (transformValue->operationType() != CSSTransformValue::Transl
ateXTransformOperation) { |
201 if (transformValue->length() > 2) { | 199 if (transformValue->length() > 2) { |
202 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(tran
sformValue->itemWithoutBoundsCheck(2)); | 200 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(tran
sformValue->itemWithoutBoundsCheck(2)); |
203 tz = convertToFloatLength(thirdValue, conversionData); | 201 tz = convertToFloatLength(thirdValue, conversionData); |
204 } | 202 } |
205 if (transformValue->length() > 1) { | 203 if (transformValue->length() > 1) { |
206 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->itemWithoutBoundsCheck(1)); | 204 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->itemWithoutBoundsCheck(1)); |
207 ty = convertToFloatLength(secondValue, conversionData); | 205 ty = convertToFloatLength(secondValue, conversionData); |
208 } | 206 } |
209 } | 207 } |
210 } | 208 } |
211 | 209 |
212 if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined()) | |
213 return false; | |
214 | |
215 operations.operations().append(TranslateTransformOperation::create(t
x, ty, tz, getTransformOperationType(transformValue->operationType()))); | 210 operations.operations().append(TranslateTransformOperation::create(t
x, ty, tz, getTransformOperationType(transformValue->operationType()))); |
216 break; | 211 break; |
217 } | 212 } |
218 case CSSTransformValue::RotateTransformOperation: { | 213 case CSSTransformValue::RotateTransformOperation: { |
219 double angle = firstValue->computeDegrees(); | 214 double angle = firstValue->computeDegrees(); |
220 operations.operations().append(RotateTransformOperation::create(0, 0
, 1, angle, getTransformOperationType(transformValue->operationType()))); | 215 operations.operations().append(RotateTransformOperation::create(0, 0
, 1, angle, getTransformOperationType(transformValue->operationType()))); |
221 break; | 216 break; |
222 } | 217 } |
223 case CSSTransformValue::RotateXTransformOperation: | 218 case CSSTransformValue::RotateXTransformOperation: |
224 case CSSTransformValue::RotateYTransformOperation: | 219 case CSSTransformValue::RotateYTransformOperation: |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 operations.operations().append(Matrix3DTransformOperation::create(ma
trix)); | 299 operations.operations().append(Matrix3DTransformOperation::create(ma
trix)); |
305 break; | 300 break; |
306 } | 301 } |
307 case CSSTransformValue::PerspectiveTransformOperation: { | 302 case CSSTransformValue::PerspectiveTransformOperation: { |
308 Length p = Length(0, Fixed); | 303 Length p = Length(0, Fixed); |
309 if (firstValue->isLength()) | 304 if (firstValue->isLength()) |
310 p = convertToFloatLength(firstValue, conversionData); | 305 p = convertToFloatLength(firstValue, conversionData); |
311 else { | 306 else { |
312 // This is a quirk that should go away when 3d transforms are fi
nalized. | 307 // This is a quirk that should go away when 3d transforms are fi
nalized. |
313 double val = firstValue->getDoubleValue(); | 308 double val = firstValue->getDoubleValue(); |
314 p = val >= 0 ? Length(clampToPositiveInteger(val), Fixed) : Leng
th(Undefined); | 309 if (val < 0) |
| 310 return false; |
| 311 p = Length(clampToPositiveInteger(val), Fixed); |
315 } | 312 } |
316 | 313 |
317 if (p.isUndefined()) | |
318 return false; | |
319 | |
320 operations.operations().append(PerspectiveTransformOperation::create
(p)); | 314 operations.operations().append(PerspectiveTransformOperation::create
(p)); |
321 break; | 315 break; |
322 } | 316 } |
323 case CSSTransformValue::UnknownTransformOperation: | 317 case CSSTransformValue::UnknownTransformOperation: |
324 ASSERT_NOT_REACHED(); | 318 ASSERT_NOT_REACHED(); |
325 break; | 319 break; |
326 } | 320 } |
327 } | 321 } |
328 | 322 |
329 outOperations = operations; | 323 outOperations = operations; |
330 return true; | 324 return true; |
331 } | 325 } |
332 | 326 |
333 } // namespace WebCore | 327 } // namespace WebCore |
OLD | NEW |