Chromium Code Reviews| Index: chrome/common/extensions/extension_action.h |
| diff --git a/chrome/common/extensions/extension_action.h b/chrome/common/extensions/extension_action.h |
| index f29066d90274f19f4da24666525a68e1955c2953..1f24a519865e41d180accd2ad1d8f985555382a2 100644 |
| --- a/chrome/common/extensions/extension_action.h |
| +++ b/chrome/common/extensions/extension_action.h |
| @@ -11,16 +11,22 @@ |
| #include <vector> |
| #include "base/basictypes.h" |
| +#include "base/memory/linked_ptr.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "base/observer_list.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| +#include "ui/base/animation/linear_animation.h" |
| + |
| +class GURL; |
| +class SkBitmap; |
| +class SkDevice; |
| namespace gfx { |
| class Canvas; |
| class Rect; |
| } |
| -class GURL; |
| -class SkBitmap; |
| - |
| // ExtensionAction encapsulates the state of a browser action, page action, or |
| // script badge. |
| // Instances can have both global and per-tab state. If a property does not have |
| @@ -38,6 +44,44 @@ class ExtensionAction { |
| TYPE_SCRIPT_BADGE, |
| }; |
| + // A fade-in animation. |
| + class IconAnimation : public ui::LinearAnimation, |
| + public base::SupportsWeakPtr<IconAnimation> { |
| + public: |
| + // Observes changes to icon animation state. |
| + class Observer { |
| + public: |
| + virtual void OnIconChanged(const IconAnimation& animation) = 0; |
| + |
| + protected: |
| + virtual ~Observer() {} |
| + }; |
| + |
| + virtual ~IconAnimation(); |
| + |
| + // Returns the icon derived from the current animation state applied to |
| + // |icon|. Ownership remains with this. |
| + const SkBitmap& Apply(const SkBitmap& icon) const; |
| + |
| + void AddObserver(Observer* observer); |
| + void RemoveObserver(Observer* observer); |
| + |
| + private: |
| + // Construct using ExtensionAction::RunIconAnimation(). |
| + friend class ExtensionAction; |
| + explicit IconAnimation(ui::AnimationDelegate* delegate); |
| + |
| + // ui::LinearAnimation implementation. |
| + virtual void AnimateToState(double state) OVERRIDE; |
| + |
| + // Device we use to paint icons to. |
| + mutable scoped_ptr<SkDevice> device_; |
| + |
| + ObserverList<Observer> observers_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(IconAnimation); |
| + }; |
| + |
| ExtensionAction(const std::string& extension_id, Type action_type); |
| ~ExtensionAction(); |
| @@ -150,6 +194,12 @@ class ExtensionAction { |
| // If the specified tab has a badge, paint it into the provided bounds. |
| void PaintBadge(gfx::Canvas* canvas, const gfx::Rect& bounds, int tab_id); |
| + // Gets the icon animation for a tab. |
|
Yoyo Zhou
2012/06/26 18:38:15
, if it is running?
not at google - send to devlin
2012/06/27 06:26:54
Done.
|
| + base::WeakPtr<IconAnimation> GetIconAnimation(int tab_id) const; |
| + |
| + // Runs an animation on a tab. |
| + void RunIconAnimation(int tab_id); |
| + |
| private: |
| template <class T> |
| struct ValueTraits { |
| @@ -191,6 +241,9 @@ class ExtensionAction { |
| std::map<int, SkColor> badge_text_color_; |
| std::map<int, bool> visible_; |
| + class IconAnimationWrapper; |
| + std::map<int, linked_ptr<IconAnimationWrapper> > icon_animation_; |
| + |
| std::string default_icon_path_; |
| // The id for the ExtensionAction, for example: "RssPageAction". This is |