Index: ui/gfx/compositor/layer_animator.cc |
diff --git a/ui/gfx/compositor/layer_animator.cc b/ui/gfx/compositor/layer_animator.cc |
index 91229752f61f81ad3be14adf1b6d7c4ec04dbab3..49b44405628ca0c791a26657d9b9362167e7b88f 100644 |
--- a/ui/gfx/compositor/layer_animator.cc |
+++ b/ui/gfx/compositor/layer_animator.cc |
@@ -13,6 +13,22 @@ |
#include "ui/gfx/transform.h" |
#include "ui/gfx/rect.h" |
+namespace { |
+ |
+void SetMatrixElement(SkMatrix44& matrix, int index, SkMScalar value) { |
+ int row = index / 4; |
+ int col = index % 4; |
+ matrix.set(row, col, value); |
+} |
+ |
+SkMScalar GetMatrixElement(const SkMatrix44& matrix, int index) { |
+ int row = index / 4; |
+ int col = index % 4; |
+ return matrix.get(row, col); |
+} |
+ |
+} // anonymous namespace |
+ |
namespace ui { |
LayerAnimator::LayerAnimator(Layer* layer) |
@@ -51,21 +67,15 @@ void LayerAnimator::AnimateToPoint(const gfx::Point& target) { |
void LayerAnimator::AnimateTransform(const Transform& transform) { |
StopAnimating(TRANSFORM); |
const Transform& layer_transform = layer_->transform(); |
- bool all_equal = true; |
- // TODO: replace with == when we Transform supports ==. |
- for (int i = 0; i < 9; ++i) { |
- if (transform.matrix()[i] != layer_transform.matrix()[i]) { |
- all_equal = false; |
- break; |
- } |
- } |
- if (all_equal) |
+ if (transform == layer_transform) |
return; // Already there. |
Element& element = elements_[TRANSFORM]; |
- for (int i = 0; i < 9; ++i) { |
- element.params.transform.start[i] = layer_transform.matrix()[i]; |
- element.params.transform.target[i] = transform.matrix()[i]; |
+ for (int i = 0; i < 16; ++i) { |
+ element.params.transform.start[i] = |
+ GetMatrixElement(layer_transform.matrix(), i); |
+ element.params.transform.target[i] = |
+ GetMatrixElement(transform.matrix(), i); |
} |
element.animation = CreateAndStartAnimation(); |
} |
@@ -90,10 +100,11 @@ void LayerAnimator::AnimationProgressed(const ui::Animation* animation) { |
case TRANSFORM: { |
Transform transform; |
- for (int i = 0; i < 9; ++i) { |
- transform.matrix()[i] = e->second.animation->CurrentValueBetween( |
- e->second.params.transform.start[i], |
- e->second.params.transform.target[i]); |
+ for (int i = 0; i < 16; ++i) { |
+ SkMScalar value = e->second.animation->CurrentValueBetween( |
+ e->second.params.transform.start[i], |
+ e->second.params.transform.target[i]); |
+ SetMatrixElement(transform.matrix(), i, value); |
} |
layer_->set_transform(transform); |
break; |
@@ -121,8 +132,11 @@ void LayerAnimator::AnimationEnded(const ui::Animation* animation) { |
case TRANSFORM: { |
Transform transform; |
- for (int i = 0; i < 9; ++i) |
- transform.matrix()[i] = e->second.params.transform.target[i]; |
+ for (int i = 0; i < 16; ++i) { |
+ SetMatrixElement(transform.matrix(), |
+ i, |
+ e->second.params.transform.target[i]); |
+ } |
layer_->set_transform(transform); |
break; |
} |