Chromium Code Reviews| Index: ui/app_list/views/top_icon_animation_view.h |
| diff --git a/ui/app_list/views/top_icon_animation_view.h b/ui/app_list/views/top_icon_animation_view.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6837420f8744edfbc413774249e7acec46828c5f |
| --- /dev/null |
| +++ b/ui/app_list/views/top_icon_animation_view.h |
| @@ -0,0 +1,79 @@ |
| +// Copyright (c) 2014 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 UI_APP_LIST_VIEWS_TOP_ICON_ANIMATION_VIEW_H |
| +#define UI_APP_LIST_VIEWS_TOP_ICON_ANIMATION_VIEW_H |
| + |
| +#include "ui/compositor/layer_animation_observer.h" |
| +#include "ui/views/view.h" |
| + |
| +namespace views { |
| +class ImageView; |
| +} |
| + |
| +namespace app_list { |
| + |
| +// Observer for top icon animation completion. |
| +class TopIconAnimationObserver { |
| + public: |
| + // Called when top icon animation completes. |
| + virtual void OnTopIconAnimationsComplete(views::View* icon_view) {} |
| + |
| + protected: |
| + TopIconAnimationObserver() {} |
| + virtual ~TopIconAnimationObserver() {} |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(TopIconAnimationObserver); |
| +}; |
| + |
| +// Transitional view used for top item icons animation when opening or closing |
| +// a folder. |
| +class TopIconAnimationView : public views::View, |
| + public ui::ImplicitAnimationObserver { |
| + public: |
| + // |icon|: The icon image of the item icon of full scale size. |
| + // |scaled_rect|: Bounds of the small icon inside folder icon. |
| + // |open_folder|: Specify open/close folder animation to perform. |
| + // |self_clean|: True if the view should be cleaned by the end of animation. |
| + TopIconAnimationView(const gfx::ImageSkia& icon, |
| + const gfx::Rect& scaled_rect, |
| + bool open_folder, |
| + bool self_clean); |
| + virtual ~TopIconAnimationView(); |
| + |
| + void AddObserver(TopIconAnimationObserver* observer); |
| + void RemoveObserver(TopIconAnimationObserver* observer); |
| + |
| + // When opening a folder, transform the top item icon from the small icon |
| + // inside folder icon to the full scale icon at the target location. |
| + // When closing a folder, transform the full scale item icon from its |
| + // location to the small icon inside the folder icon. |
| + void TransformView(); |
| + |
| + private: |
| + // views::View overrides: |
| + virtual gfx::Size GetPreferredSize() OVERRIDE; |
| + virtual void Layout() OVERRIDE; |
| + |
| + // ui::ImplicitAnimationObserver overrides: |
| + virtual void OnImplicitAnimationsCompleted() OVERRIDE; |
| + |
| + gfx::Size icon_size_; |
| + views::ImageView* icon_; // Owned by views hierarchy. |
| + // Rect of the scaled down top item icon inside folder icon's ink bubble. |
| + gfx::Rect scaled_rect_; |
| + // true: opening folder; false: closing folder. |
| + bool open_folder_; |
| + // If true, delete the object by the end of the animation. |
| + bool self_clean_; |
| + |
| + ObserverList<TopIconAnimationObserver> observers_; |
|
xiyuan
2014/02/06 22:45:12
nit: #include "base/observer_list.h"
jennyz
2014/02/07 00:03:10
Done.
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(TopIconAnimationView); |
| +}; |
| + |
| +} // namespace app_list |
| + |
| +#endif // UI_APP_LIST_VIEWS_TOP_ICON_ANIMATION_VIEW_H |