| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/animation/transform_operations.h" | 5 #include "cc/animation/transform_operations.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "ui/gfx/animation/tween.h" | 9 #include "ui/gfx/animation/tween.h" |
| 10 #include "ui/gfx/geometry/box_f.h" | 10 #include "ui/gfx/geometry/box_f.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 &bounds_for_operation)) | 78 &bounds_for_operation)) |
| 79 return false; | 79 return false; |
| 80 *bounds = bounds_for_operation; | 80 *bounds = bounds_for_operation; |
| 81 } | 81 } |
| 82 | 82 |
| 83 return true; | 83 return true; |
| 84 } | 84 } |
| 85 | 85 |
| 86 bool TransformOperations::AffectsScale() const { | 86 bool TransformOperations::AffectsScale() const { |
| 87 for (size_t i = 0; i < operations_.size(); ++i) { | 87 for (size_t i = 0; i < operations_.size(); ++i) { |
| 88 if (operations_[i].type == TransformOperation::TRANSFORM_OPERATION_SCALE) | 88 if (operations_[i].type == TransformOperation::TransformOperationScale) |
| 89 return true; | 89 return true; |
| 90 if (operations_[i].type == TransformOperation::TRANSFORM_OPERATION_MATRIX && | 90 if (operations_[i].type == TransformOperation::TransformOperationMatrix && |
| 91 !operations_[i].matrix.IsIdentityOrTranslation()) | 91 !operations_[i].matrix.IsIdentityOrTranslation()) |
| 92 return true; | 92 return true; |
| 93 } | 93 } |
| 94 return false; | 94 return false; |
| 95 } | 95 } |
| 96 | 96 |
| 97 bool TransformOperations::PreservesAxisAlignment() const { | 97 bool TransformOperations::PreservesAxisAlignment() const { |
| 98 for (size_t i = 0; i < operations_.size(); ++i) { | 98 for (size_t i = 0; i < operations_.size(); ++i) { |
| 99 switch (operations_[i].type) { | 99 switch (operations_[i].type) { |
| 100 case TransformOperation::TRANSFORM_OPERATION_IDENTITY: | 100 case TransformOperation::TransformOperationIdentity: |
| 101 case TransformOperation::TRANSFORM_OPERATION_TRANSLATE: | 101 case TransformOperation::TransformOperationTranslate: |
| 102 case TransformOperation::TRANSFORM_OPERATION_SCALE: | 102 case TransformOperation::TransformOperationScale: |
| 103 continue; | 103 continue; |
| 104 case TransformOperation::TRANSFORM_OPERATION_MATRIX: | 104 case TransformOperation::TransformOperationMatrix: |
| 105 if (!operations_[i].matrix.IsIdentity() && | 105 if (!operations_[i].matrix.IsIdentity() && |
| 106 !operations_[i].matrix.IsScaleOrTranslation()) | 106 !operations_[i].matrix.IsScaleOrTranslation()) |
| 107 return false; | 107 return false; |
| 108 continue; | 108 continue; |
| 109 case TransformOperation::TRANSFORM_OPERATION_ROTATE: | 109 case TransformOperation::TransformOperationRotate: |
| 110 case TransformOperation::TRANSFORM_OPERATION_SKEW: | 110 case TransformOperation::TransformOperationSkew: |
| 111 case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE: | 111 case TransformOperation::TransformOperationPerspective: |
| 112 return false; | 112 return false; |
| 113 } | 113 } |
| 114 } | 114 } |
| 115 return true; | 115 return true; |
| 116 } | 116 } |
| 117 | 117 |
| 118 bool TransformOperations::IsTranslation() const { | 118 bool TransformOperations::IsTranslation() const { |
| 119 for (size_t i = 0; i < operations_.size(); ++i) { | 119 for (size_t i = 0; i < operations_.size(); ++i) { |
| 120 switch (operations_[i].type) { | 120 switch (operations_[i].type) { |
| 121 case TransformOperation::TRANSFORM_OPERATION_IDENTITY: | 121 case TransformOperation::TransformOperationIdentity: |
| 122 case TransformOperation::TRANSFORM_OPERATION_TRANSLATE: | 122 case TransformOperation::TransformOperationTranslate: |
| 123 continue; | 123 continue; |
| 124 case TransformOperation::TRANSFORM_OPERATION_MATRIX: | 124 case TransformOperation::TransformOperationMatrix: |
| 125 if (!operations_[i].matrix.IsIdentityOrTranslation()) | 125 if (!operations_[i].matrix.IsIdentityOrTranslation()) |
| 126 return false; | 126 return false; |
| 127 continue; | 127 continue; |
| 128 case TransformOperation::TRANSFORM_OPERATION_ROTATE: | 128 case TransformOperation::TransformOperationRotate: |
| 129 case TransformOperation::TRANSFORM_OPERATION_SCALE: | 129 case TransformOperation::TransformOperationScale: |
| 130 case TransformOperation::TRANSFORM_OPERATION_SKEW: | 130 case TransformOperation::TransformOperationSkew: |
| 131 case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE: | 131 case TransformOperation::TransformOperationPerspective: |
| 132 return false; | 132 return false; |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 return true; | 135 return true; |
| 136 } | 136 } |
| 137 | 137 |
| 138 bool TransformOperations::ScaleComponent(gfx::Vector3dF* scale) const { | 138 bool TransformOperations::ScaleComponent(gfx::Vector3dF* scale) const { |
| 139 *scale = gfx::Vector3dF(1.f, 1.f, 1.f); | 139 *scale = gfx::Vector3dF(1.f, 1.f, 1.f); |
| 140 bool has_scale_component = false; | 140 bool has_scale_component = false; |
| 141 for (size_t i = 0; i < operations_.size(); ++i) { | 141 for (size_t i = 0; i < operations_.size(); ++i) { |
| 142 switch (operations_[i].type) { | 142 switch (operations_[i].type) { |
| 143 case TransformOperation::TRANSFORM_OPERATION_IDENTITY: | 143 case TransformOperation::TransformOperationIdentity: |
| 144 case TransformOperation::TRANSFORM_OPERATION_TRANSLATE: | 144 case TransformOperation::TransformOperationTranslate: |
| 145 continue; | 145 continue; |
| 146 case TransformOperation::TRANSFORM_OPERATION_MATRIX: | 146 case TransformOperation::TransformOperationMatrix: |
| 147 if (!operations_[i].matrix.IsIdentityOrTranslation()) | 147 if (!operations_[i].matrix.IsIdentityOrTranslation()) |
| 148 return false; | 148 return false; |
| 149 continue; | 149 continue; |
| 150 case TransformOperation::TRANSFORM_OPERATION_ROTATE: | 150 case TransformOperation::TransformOperationRotate: |
| 151 case TransformOperation::TRANSFORM_OPERATION_SKEW: | 151 case TransformOperation::TransformOperationSkew: |
| 152 case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE: | 152 case TransformOperation::TransformOperationPerspective: |
| 153 return false; | 153 return false; |
| 154 case TransformOperation::TRANSFORM_OPERATION_SCALE: | 154 case TransformOperation::TransformOperationScale: |
| 155 if (has_scale_component) | 155 if (has_scale_component) |
| 156 return false; | 156 return false; |
| 157 has_scale_component = true; | 157 has_scale_component = true; |
| 158 scale->Scale(operations_[i].scale.x, | 158 scale->Scale(operations_[i].scale.x, |
| 159 operations_[i].scale.y, | 159 operations_[i].scale.y, |
| 160 operations_[i].scale.z); | 160 operations_[i].scale.z); |
| 161 } | 161 } |
| 162 } | 162 } |
| 163 return true; | 163 return true; |
| 164 } | 164 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 184 const TransformOperations& other) const { | 184 const TransformOperations& other) const { |
| 185 gfx::Transform dummy; | 185 gfx::Transform dummy; |
| 186 return BlendInternal(other, 0.5, &dummy); | 186 return BlendInternal(other, 0.5, &dummy); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void TransformOperations::AppendTranslate(SkMScalar x, | 189 void TransformOperations::AppendTranslate(SkMScalar x, |
| 190 SkMScalar y, | 190 SkMScalar y, |
| 191 SkMScalar z) { | 191 SkMScalar z) { |
| 192 TransformOperation to_add; | 192 TransformOperation to_add; |
| 193 to_add.matrix.Translate3d(x, y, z); | 193 to_add.matrix.Translate3d(x, y, z); |
| 194 to_add.type = TransformOperation::TRANSFORM_OPERATION_TRANSLATE; | 194 to_add.type = TransformOperation::TransformOperationTranslate; |
| 195 to_add.translate.x = x; | 195 to_add.translate.x = x; |
| 196 to_add.translate.y = y; | 196 to_add.translate.y = y; |
| 197 to_add.translate.z = z; | 197 to_add.translate.z = z; |
| 198 operations_.push_back(to_add); | 198 operations_.push_back(to_add); |
| 199 decomposed_transform_dirty_ = true; | 199 decomposed_transform_dirty_ = true; |
| 200 } | 200 } |
| 201 | 201 |
| 202 void TransformOperations::AppendRotate(SkMScalar x, | 202 void TransformOperations::AppendRotate(SkMScalar x, |
| 203 SkMScalar y, | 203 SkMScalar y, |
| 204 SkMScalar z, | 204 SkMScalar z, |
| 205 SkMScalar degrees) { | 205 SkMScalar degrees) { |
| 206 TransformOperation to_add; | 206 TransformOperation to_add; |
| 207 to_add.matrix.RotateAbout(gfx::Vector3dF(x, y, z), degrees); | 207 to_add.matrix.RotateAbout(gfx::Vector3dF(x, y, z), degrees); |
| 208 to_add.type = TransformOperation::TRANSFORM_OPERATION_ROTATE; | 208 to_add.type = TransformOperation::TransformOperationRotate; |
| 209 to_add.rotate.axis.x = x; | 209 to_add.rotate.axis.x = x; |
| 210 to_add.rotate.axis.y = y; | 210 to_add.rotate.axis.y = y; |
| 211 to_add.rotate.axis.z = z; | 211 to_add.rotate.axis.z = z; |
| 212 to_add.rotate.angle = degrees; | 212 to_add.rotate.angle = degrees; |
| 213 operations_.push_back(to_add); | 213 operations_.push_back(to_add); |
| 214 decomposed_transform_dirty_ = true; | 214 decomposed_transform_dirty_ = true; |
| 215 } | 215 } |
| 216 | 216 |
| 217 void TransformOperations::AppendScale(SkMScalar x, SkMScalar y, SkMScalar z) { | 217 void TransformOperations::AppendScale(SkMScalar x, SkMScalar y, SkMScalar z) { |
| 218 TransformOperation to_add; | 218 TransformOperation to_add; |
| 219 to_add.matrix.Scale3d(x, y, z); | 219 to_add.matrix.Scale3d(x, y, z); |
| 220 to_add.type = TransformOperation::TRANSFORM_OPERATION_SCALE; | 220 to_add.type = TransformOperation::TransformOperationScale; |
| 221 to_add.scale.x = x; | 221 to_add.scale.x = x; |
| 222 to_add.scale.y = y; | 222 to_add.scale.y = y; |
| 223 to_add.scale.z = z; | 223 to_add.scale.z = z; |
| 224 operations_.push_back(to_add); | 224 operations_.push_back(to_add); |
| 225 decomposed_transform_dirty_ = true; | 225 decomposed_transform_dirty_ = true; |
| 226 } | 226 } |
| 227 | 227 |
| 228 void TransformOperations::AppendSkew(SkMScalar x, SkMScalar y) { | 228 void TransformOperations::AppendSkew(SkMScalar x, SkMScalar y) { |
| 229 TransformOperation to_add; | 229 TransformOperation to_add; |
| 230 to_add.matrix.SkewX(x); | 230 to_add.matrix.SkewX(x); |
| 231 to_add.matrix.SkewY(y); | 231 to_add.matrix.SkewY(y); |
| 232 to_add.type = TransformOperation::TRANSFORM_OPERATION_SKEW; | 232 to_add.type = TransformOperation::TransformOperationSkew; |
| 233 to_add.skew.x = x; | 233 to_add.skew.x = x; |
| 234 to_add.skew.y = y; | 234 to_add.skew.y = y; |
| 235 operations_.push_back(to_add); | 235 operations_.push_back(to_add); |
| 236 decomposed_transform_dirty_ = true; | 236 decomposed_transform_dirty_ = true; |
| 237 } | 237 } |
| 238 | 238 |
| 239 void TransformOperations::AppendPerspective(SkMScalar depth) { | 239 void TransformOperations::AppendPerspective(SkMScalar depth) { |
| 240 TransformOperation to_add; | 240 TransformOperation to_add; |
| 241 to_add.matrix.ApplyPerspectiveDepth(depth); | 241 to_add.matrix.ApplyPerspectiveDepth(depth); |
| 242 to_add.type = TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE; | 242 to_add.type = TransformOperation::TransformOperationPerspective; |
| 243 to_add.perspective_depth = depth; | 243 to_add.perspective_depth = depth; |
| 244 operations_.push_back(to_add); | 244 operations_.push_back(to_add); |
| 245 decomposed_transform_dirty_ = true; | 245 decomposed_transform_dirty_ = true; |
| 246 } | 246 } |
| 247 | 247 |
| 248 void TransformOperations::AppendMatrix(const gfx::Transform& matrix) { | 248 void TransformOperations::AppendMatrix(const gfx::Transform& matrix) { |
| 249 TransformOperation to_add; | 249 TransformOperation to_add; |
| 250 to_add.matrix = matrix; | 250 to_add.matrix = matrix; |
| 251 to_add.type = TransformOperation::TRANSFORM_OPERATION_MATRIX; | 251 to_add.type = TransformOperation::TransformOperationMatrix; |
| 252 operations_.push_back(to_add); | 252 operations_.push_back(to_add); |
| 253 decomposed_transform_dirty_ = true; | 253 decomposed_transform_dirty_ = true; |
| 254 } | 254 } |
| 255 | 255 |
| 256 void TransformOperations::AppendIdentity() { | 256 void TransformOperations::AppendIdentity() { |
| 257 operations_.push_back(TransformOperation()); | 257 operations_.push_back(TransformOperation()); |
| 258 } | 258 } |
| 259 | 259 |
| 260 bool TransformOperations::IsIdentity() const { | 260 bool TransformOperations::IsIdentity() const { |
| 261 for (size_t i = 0; i < operations_.size(); ++i) { | 261 for (size_t i = 0; i < operations_.size(); ++i) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 decomposed_transform_.reset(new gfx::DecomposedTransform()); | 310 decomposed_transform_.reset(new gfx::DecomposedTransform()); |
| 311 gfx::Transform transform = Apply(); | 311 gfx::Transform transform = Apply(); |
| 312 if (!gfx::DecomposeTransform(decomposed_transform_.get(), transform)) | 312 if (!gfx::DecomposeTransform(decomposed_transform_.get(), transform)) |
| 313 return false; | 313 return false; |
| 314 decomposed_transform_dirty_ = false; | 314 decomposed_transform_dirty_ = false; |
| 315 } | 315 } |
| 316 return true; | 316 return true; |
| 317 } | 317 } |
| 318 | 318 |
| 319 } // namespace cc | 319 } // namespace cc |
| OLD | NEW |