841794523c
I mvoed the implementation of the previously-inline amimate function to the .cc file so we don't have to depend on STL includes in the header. Review URL: http://codereview.chromium.org/155170 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20091 0039d316-1c4b-4281-b951-d872f2087c98
106 linhas
3.5 KiB
C++
106 linhas
3.5 KiB
C++
// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
|
|
// source code is governed by a BSD-style license that can be found in the
|
|
// LICENSE file.
|
|
|
|
#ifndef VIEWS_ANIMATOR_H_
|
|
#define VIEWS_ANIMATOR_H_
|
|
|
|
#include "app/animation.h"
|
|
#include "base/gfx/rect.h"
|
|
#include "base/ref_counted.h"
|
|
#include "base/scoped_ptr.h"
|
|
|
|
class SlideAnimation;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// ALERT!
|
|
//
|
|
// This API is preliminary and subject to change. Talk to beng before using it!
|
|
//
|
|
|
|
namespace views {
|
|
|
|
class View;
|
|
|
|
class AnimatorDelegate {
|
|
public:
|
|
// Returns the view in the visual layout whose trailing edge the view that
|
|
// hosts an animator should be clamped to during animations, when
|
|
// ANIMATE_CLAMP is specified in combination with ANIMATE_X or ANIMATE_Y.
|
|
virtual View* GetClampedView(View* host) = 0;
|
|
|
|
// Notifies the delegate that the active animation running for |host| has
|
|
// completed.
|
|
virtual void AnimationCompletedForHost(View* host) = 0;
|
|
};
|
|
|
|
// An animator is an object that can animate actions on a host view. Once
|
|
// created, an Animator is typically owned by its host view.
|
|
class Animator : public AnimationDelegate {
|
|
public:
|
|
enum BoundsChangeFlags {
|
|
ANIMATE_NONE = 0x0, // Don't animate anything... o_O
|
|
ANIMATE_X = 0x1, // Animate the host view's x position
|
|
ANIMATE_Y = 0x2, // Animate the host view's y position
|
|
ANIMATE_WIDTH = 0x4, // Animate the host view's width
|
|
ANIMATE_HEIGHT = 0x8, // Animate the host view's height
|
|
ANIMATE_CLAMP = 0x10 // Clamp the host view's x or y position to the
|
|
// trailing edge of the view returned by
|
|
// AnimatorDelegate::GetClampedView.
|
|
};
|
|
|
|
// Creates the animator for the specified host view. Optionally an
|
|
// AnimationContext can be provided to animate multiple views from a single
|
|
// animation.
|
|
explicit Animator(View* host);
|
|
Animator(View* host, AnimatorDelegate* delegate);
|
|
virtual ~Animator();
|
|
|
|
// Returns true if the animator is currently animating.
|
|
bool IsAnimating() const;
|
|
|
|
// Moves/sizes the host view to the specified bounds. |direction| is a
|
|
// combination of the above flags indicating what aspects of the bounds should
|
|
// be animated.
|
|
void AnimateToBounds(const gfx::Rect& bounds, int direction);
|
|
void AnimateToBounds(int x, int y, int width, int height, int direction);
|
|
|
|
// Overridden from AnimationDelegate:
|
|
virtual void AnimationEnded(const Animation* animation);
|
|
virtual void AnimationProgressed(const Animation* animation);
|
|
virtual void AnimationCanceled(const Animation* animation);
|
|
|
|
private:
|
|
void InitAnimation();
|
|
|
|
// Get the current X/Y position of the host view, clamped to the right edge of
|
|
// the previous view in the visual layout, if applicable (See
|
|
// AnimatorDelegate for more info).
|
|
int GetClampedX() const;
|
|
int GetClampedY() const;
|
|
|
|
// The view that this animator is attached to.
|
|
View* host_;
|
|
|
|
// Start and end bounds for the animation.
|
|
gfx::Rect start_bounds_;
|
|
gfx::Rect target_bounds_;
|
|
|
|
// The animation used by this animator.
|
|
scoped_ptr<SlideAnimation> animation_;
|
|
|
|
// A delegate object that provides information about surrounding views.
|
|
// Will be NULL during this class' destructor.
|
|
AnimatorDelegate* delegate_;
|
|
|
|
// Some combination of BoundsChangeFlags indicating the type of bounds change
|
|
// the host view is subject to.
|
|
int direction_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(Animator);
|
|
};
|
|
|
|
} // namespace views
|
|
|
|
#endif // #ifndef VIEWS_ANIMATOR_H_
|