| 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 |