Commit ac1a8082 authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

aura: changes when WindowPort::OnDidChangeTransform() is called

This calls it from OnLayerTransform(). That way, if the transform is
changed outside of Window::SetTransform, everything still works.

BUG=822917
TEST=covered by tests

Change-Id: I27acb266c4a4993df0a71457af8aa3b4c2cde5d1
Reviewed-on: https://chromium-review.googlesource.com/967841Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543974}
parent 098fd104
......@@ -276,7 +276,6 @@ void Window::SetTransform(const gfx::Transform& transform) {
observer.OnWindowTargetTransformChanging(this, transform);
gfx::Transform old_transform = layer()->transform();
layer()->SetTransform(transform);
port_->OnDidChangeTransform(old_transform, transform);
}
void Window::SetLayoutManager(LayoutManager* layout_manager) {
......@@ -1173,7 +1172,9 @@ void Window::OnLayerOpacityChanged(ui::PropertyChangeReason reason) {
observer.OnWindowOpacitySet(this, reason);
}
void Window::OnLayerTransformed(ui::PropertyChangeReason reason) {
void Window::OnLayerTransformed(const gfx::Transform& old_transform,
ui::PropertyChangeReason reason) {
port_->OnDidChangeTransform(old_transform, layer()->transform());
WindowOcclusionTracker::ScopedPauseOcclusionTracking pause_occlusion_tracking;
for (WindowObserver& observer : observers_)
observer.OnWindowTransformed(this, reason);
......
......@@ -531,7 +531,8 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
void OnPaintLayer(const ui::PaintContext& context) override;
void OnLayerBoundsChanged(const gfx::Rect& old_bounds,
ui::PropertyChangeReason reason) override;
void OnLayerTransformed(ui::PropertyChangeReason reason) override;
void OnLayerTransformed(const gfx::Transform& old_transform,
ui::PropertyChangeReason reason) override;
void OnLayerOpacityChanged(ui::PropertyChangeReason reason) override;
// Overridden from ui::EventTarget:
......
......@@ -1140,9 +1140,10 @@ void Layer::SetBoundsFromAnimation(const gfx::Rect& bounds,
void Layer::SetTransformFromAnimation(const gfx::Transform& transform,
PropertyChangeReason reason) {
const gfx::Transform old_transform = this->transform();
cc_layer_->SetTransform(transform);
if (delegate_)
delegate_->OnLayerTransformed(reason);
delegate_->OnLayerTransformed(old_transform, reason);
}
void Layer::SetOpacityFromAnimation(float opacity,
......
......@@ -9,7 +9,8 @@ namespace ui {
void LayerDelegate::OnLayerBoundsChanged(const gfx::Rect& old_bounds,
PropertyChangeReason reason) {}
void LayerDelegate::OnLayerTransformed(PropertyChangeReason reason) {}
void LayerDelegate::OnLayerTransformed(const gfx::Transform& old_transform,
PropertyChangeReason reason) {}
void LayerDelegate::OnLayerOpacityChanged(PropertyChangeReason reason) {}
......
......@@ -10,6 +10,7 @@
namespace gfx {
class Rect;
class Transform;
}
namespace ui {
......@@ -35,7 +36,8 @@ class COMPOSITOR_EXPORT LayerDelegate {
// the property was set directly or by an animation. This will be called
// before the first frame of an animation is rendered and when the animation
// ends, but not necessarily at every frame of the animation.
virtual void OnLayerTransformed(PropertyChangeReason reason);
virtual void OnLayerTransformed(const gfx::Transform& old_transform,
PropertyChangeReason reason);
virtual void OnLayerOpacityChanged(PropertyChangeReason reason);
protected:
......
......@@ -315,7 +315,8 @@ class TestLayerDelegate : public LayerDelegate {
MOCK_METHOD2(OnLayerBoundsChanged,
void(const gfx::Rect&, PropertyChangeReason));
MOCK_METHOD1(OnLayerTransformed, void(PropertyChangeReason));
MOCK_METHOD2(OnLayerTransformed,
void(const gfx::Transform&, PropertyChangeReason));
MOCK_METHOD1(OnLayerOpacityChanged, void(PropertyChangeReason));
void reset() {
......@@ -2399,16 +2400,32 @@ TEST(LayerDelegateTest, OnLayerTransformed) {
auto layer = std::make_unique<Layer>(LAYER_TEXTURED);
testing::StrictMock<TestLayerDelegate> delegate;
layer->set_delegate(&delegate);
gfx::Transform target_transform;
target_transform.Skew(10.0f, 5.0f);
gfx::Transform target_transform1;
target_transform1.Skew(10.0f, 5.0f);
{
EXPECT_CALL(delegate,
OnLayerTransformed(gfx::Transform(),
PropertyChangeReason::NOT_FROM_ANIMATION))
.WillOnce(testing::Invoke(
[&](const gfx::Transform& old_transform, PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when
// the delegate is notified.
EXPECT_EQ(target_transform1, layer->transform());
}));
layer->SetTransform(target_transform1);
}
gfx::Transform target_transform2;
target_transform2.Skew(10.0f, 5.0f);
EXPECT_CALL(delegate,
OnLayerTransformed(PropertyChangeReason::NOT_FROM_ANIMATION))
.WillOnce(testing::Invoke([&](PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when the
// delegate is notified.
EXPECT_EQ(layer->transform(), target_transform);
}));
layer->SetTransform(target_transform);
OnLayerTransformed(target_transform1,
PropertyChangeReason::NOT_FROM_ANIMATION))
.WillOnce(testing::Invoke(
[&](const gfx::Transform& old_transform, PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when
// the delegate is notified.
EXPECT_EQ(target_transform2, layer->transform());
}));
layer->SetTransform(target_transform2);
}
// Verify that LayerDelegate::OnLayerTransformed() is called at every step of a
......@@ -2442,8 +2459,10 @@ TEST(LayerDelegateTest, OnLayerTransformedNonThreadedAnimation) {
ASSERT_FALSE(element->IsThreaded(layer.get()));
LayerAnimationElement* element_raw = element.get();
EXPECT_CALL(delegate,
OnLayerTransformed(PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](PropertyChangeReason) {
OnLayerTransformed(gfx::Transform(),
PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](const gfx::Transform& old_transform,
PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when the
// delegate is notified.
EXPECT_EQ(layer->transform(), initial_transform);
......@@ -2455,19 +2474,23 @@ TEST(LayerDelegateTest, OnLayerTransformedNonThreadedAnimation) {
// Progress the animation.
EXPECT_CALL(delegate,
OnLayerTransformed(PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when the
// delegate is notified.
EXPECT_EQ(layer->transform(), step_transform);
}));
OnLayerTransformed(initial_transform,
PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke(
[&](const gfx::Transform& old_transform, PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when
// the delegate is notified.
EXPECT_EQ(layer->transform(), step_transform);
}));
test_controller.Step(element_raw->duration() / 2);
testing::Mock::VerifyAndClear(&delegate);
// End the animation.
EXPECT_CALL(delegate,
OnLayerTransformed(PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](PropertyChangeReason) {
EXPECT_CALL(
delegate,
OnLayerTransformed(step_transform, PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](const gfx::Transform& old_transform,
PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when the
// delegate is notified.
EXPECT_EQ(layer->transform(), target_transform);
......@@ -2502,8 +2525,10 @@ TEST(LayerDelegateTest, OnLayerTransformedThreadedAnimation) {
ASSERT_TRUE(element->IsThreaded(layer.get()));
LayerAnimationElement* element_raw = element.get();
EXPECT_CALL(delegate,
OnLayerTransformed(PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](PropertyChangeReason) {
OnLayerTransformed(gfx::Transform(),
PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](const gfx::Transform& old_transform,
PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when the
// delegate is notified.
EXPECT_EQ(layer->transform(), initial_transform);
......@@ -2516,8 +2541,10 @@ TEST(LayerDelegateTest, OnLayerTransformedThreadedAnimation) {
// End the animation.
EXPECT_CALL(delegate,
OnLayerTransformed(PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](PropertyChangeReason) {
OnLayerTransformed(initial_transform,
PropertyChangeReason::FROM_ANIMATION))
.WillOnce(testing::Invoke([&](const gfx::Transform& old_transform,
PropertyChangeReason) {
// Verify that |layer->transform()| returns the correct value when the
// delegate is notified.
EXPECT_EQ(layer->transform(), target_transform);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment