| OLD | NEW |
| 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 "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "core/css/CSSFunctionValue.h" | 8 #include "core/css/CSSFunctionValue.h" |
| 9 #include "core/css/CSSPrimitiveValue.h" | 9 #include "core/css/CSSPrimitiveValue.h" |
| 10 #include "core/css/cssom/CSSUnitValue.h" |
| 11 #include "core/geometry/DOMMatrix.h" |
| 10 | 12 |
| 11 namespace blink { | 13 namespace blink { |
| 12 | 14 |
| 13 namespace { | 15 namespace { |
| 14 | 16 |
| 15 bool IsNumberValue(const CSSValue& value) { | 17 bool IsNumberValue(const CSSValue& value) { |
| 16 return value.IsPrimitiveValue() && ToCSSPrimitiveValue(value).IsNumber(); | 18 return value.IsPrimitiveValue() && ToCSSPrimitiveValue(value).IsNumber(); |
| 17 } | 19 } |
| 18 | 20 |
| 19 CSSRotation* FromCSSRotate(const CSSFunctionValue& value) { | 21 CSSRotation* FromCSSRotate(const CSSFunctionValue& value) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 exception_state.ThrowTypeError("Must pass an angle to CSSRotation"); | 119 exception_state.ThrowTypeError("Must pass an angle to CSSRotation"); |
| 118 return; | 120 return; |
| 119 } | 121 } |
| 120 if (angle->IsCalculated()) { | 122 if (angle->IsCalculated()) { |
| 121 exception_state.ThrowTypeError("Calculated angles are not supported yet"); | 123 exception_state.ThrowTypeError("Calculated angles are not supported yet"); |
| 122 return; | 124 return; |
| 123 } | 125 } |
| 124 angle_ = angle; | 126 angle_ = angle; |
| 125 } | 127 } |
| 126 | 128 |
| 129 DOMMatrix* CSSRotation::AsMatrix() const { |
| 130 DOMMatrix* matrix = DOMMatrix::Create(); |
| 131 CSSUnitValue* angle = angle_->to(CSSPrimitiveValue::UnitType::kDegrees); |
| 132 if (is2D()) { |
| 133 matrix->rotateAxisAngleSelf(0, 0, 1, angle->value()); |
| 134 } else { |
| 135 matrix->rotateAxisAngleSelf(x_, y_, z_, angle->value()); |
| 136 } |
| 137 return matrix; |
| 138 } |
| 139 |
| 127 CSSFunctionValue* CSSRotation::ToCSSValue() const { | 140 CSSFunctionValue* CSSRotation::ToCSSValue() const { |
| 128 return nullptr; | 141 // TODO(meade): Handle calc angles. |
| 129 // TODO(meade): Re-implement this when we finish rewriting number/length | 142 CSSUnitValue* angle = ToCSSUnitValue(angle_); |
| 130 // types. | 143 CSSFunctionValue* result = |
| 131 // CSSFunctionValue* result = | 144 CSSFunctionValue::Create(is2D() ? CSSValueRotate : CSSValueRotate3d); |
| 132 // CSSFunctionValue::Create(is2D() ? CSSValueRotate : CSSValueRotate3d); | 145 if (!is2D()) { |
| 133 // if (!is2D()) { | 146 result->Append( |
| 134 // result->Append( | 147 *CSSPrimitiveValue::Create(x_, CSSPrimitiveValue::UnitType::kNumber)); |
| 135 // *CSSPrimitiveValue::Create(x_, CSSPrimitiveValue::UnitType::kNumber)); | 148 result->Append( |
| 136 // result->Append( | 149 *CSSPrimitiveValue::Create(y_, CSSPrimitiveValue::UnitType::kNumber)); |
| 137 // *CSSPrimitiveValue::Create(y_, CSSPrimitiveValue::UnitType::kNumber)); | 150 result->Append( |
| 138 // result->Append( | 151 *CSSPrimitiveValue::Create(z_, CSSPrimitiveValue::UnitType::kNumber)); |
| 139 // *CSSPrimitiveValue::Create(z_, CSSPrimitiveValue::UnitType::kNumber)); | 152 } |
| 140 // } | 153 result->Append( |
| 141 // result->Append(*CSSPrimitiveValue::Create(angle_->Value(), | 154 *CSSPrimitiveValue::Create(angle->value(), angle->GetInternalUnit())); |
| 142 // angle_->Unit())); | 155 return result; |
| 143 // return result; | |
| 144 } | 156 } |
| 145 | 157 |
| 146 } // namespace blink | 158 } // namespace blink |
| OLD | NEW |