1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "views/layer_property_setter.h"
7 #include "base/scoped_ptr.h"
8 #include "ui/gfx/compositor/compositor.h"
9 #include "ui/gfx/compositor/layer.h"
10 #include "ui/gfx/compositor/layer_animator.h"
16 // DefaultSetter ---------------------------------------------------------------
18 class DefaultSetter
: public LayerPropertySetter
{
22 // LayerPropertySetter:
23 virtual void Installed(ui::Layer
* layer
) OVERRIDE
;
24 virtual void Uninstalled(ui::Layer
* layer
) OVERRIDE
;
25 virtual void SetTransform(ui::Layer
* layer
,
26 const ui::Transform
& transform
) OVERRIDE
;
27 virtual void SetBounds(ui::Layer
* layer
, const gfx::Rect
& bounds
) OVERRIDE
;
30 DISALLOW_COPY_AND_ASSIGN(DefaultSetter
);
33 DefaultSetter::DefaultSetter() {
36 void DefaultSetter::Installed(ui::Layer
* layer
) {
39 void DefaultSetter::Uninstalled(ui::Layer
* layer
) {
42 void DefaultSetter::SetTransform(ui::Layer
* layer
,
43 const ui::Transform
& transform
) {
44 layer
->SetTransform(transform
);
47 void DefaultSetter::SetBounds(ui::Layer
* layer
, const gfx::Rect
& bounds
) {
48 layer
->SetBounds(bounds
);
51 // AnimatingSetter -------------------------------------------------------------
53 class AnimatingSetter
: public LayerPropertySetter
{
57 // LayerPropertySetter:
58 virtual void Installed(ui::Layer
* layer
) OVERRIDE
;
59 virtual void Uninstalled(ui::Layer
* layer
) OVERRIDE
;
60 virtual void SetTransform(ui::Layer
* layer
,
61 const ui::Transform
& transform
) OVERRIDE
;
62 virtual void SetBounds(ui::Layer
* layer
, const gfx::Rect
& bounds
) OVERRIDE
;
65 scoped_ptr
<ui::LayerAnimator
> animator_
;
67 DISALLOW_COPY_AND_ASSIGN(AnimatingSetter
);
70 AnimatingSetter::AnimatingSetter() {
73 void AnimatingSetter::Installed(ui::Layer
* layer
) {
74 animator_
.reset(new ui::LayerAnimator(layer
));
77 void AnimatingSetter::Uninstalled(ui::Layer
* layer
) {
81 void AnimatingSetter::SetTransform(ui::Layer
* layer
,
82 const ui::Transform
& transform
) {
83 animator_
->AnimateTransform(transform
);
86 void AnimatingSetter::SetBounds(ui::Layer
* layer
, const gfx::Rect
& bounds
) {
87 if (bounds
.size() == animator_
->layer()->bounds().size())
88 animator_
->AnimateToPoint(bounds
.origin());
90 animator_
->StopAnimatingToPoint();
95 // LayerPropertySetter ---------------------------------------------------------
98 LayerPropertySetter
* LayerPropertySetter::CreateDefaultSetter() {
99 return new DefaultSetter
;
103 LayerPropertySetter
* LayerPropertySetter::CreateAnimatingSetter() {
104 return new AnimatingSetter();