Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Unified Diff: ui/app_list/views/app_list_folder_view.cc

Issue 140203003: Implement animation UI for opening/closing an app list folder. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address code review comments. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/app_list/views/app_list_folder_view.h ('k') | ui/app_list/views/app_list_item_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/views/app_list_folder_view.cc
diff --git a/ui/app_list/views/app_list_folder_view.cc b/ui/app_list/views/app_list_folder_view.cc
index 10171ffa8b44950d7a06df2b33f552989d5d7605..69fa7619879fe0a77987d913b991cdaa118a69b3 100644
--- a/ui/app_list/views/app_list_folder_view.cc
+++ b/ui/app_list/views/app_list_folder_view.cc
@@ -10,11 +10,13 @@
#include "ui/app_list/app_list_folder_item.h"
#include "ui/app_list/app_list_model.h"
#include "ui/app_list/pagination_model.h"
+#include "ui/app_list/views/app_list_item_view.h"
#include "ui/app_list/views/app_list_main_view.h"
#include "ui/app_list/views/apps_container_view.h"
#include "ui/app_list/views/apps_grid_view.h"
#include "ui/app_list/views/contents_view.h"
#include "ui/app_list/views/folder_header_view.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/events/event.h"
#include "ui/views/view_model.h"
#include "ui/views/view_model_utils.h"
@@ -50,6 +52,11 @@ AppListFolderView::AppListFolderView(AppsContainerView* container_view,
items_grid_view_->SetModel(model);
AddChildView(items_grid_view_);
view_model_->Add(items_grid_view_, kIndexChildItems);
+
+#if defined(USE_AURA)
+ SetPaintToLayer(true);
+ SetFillsBoundsOpaquely(false);
+#endif
}
AppListFolderView::~AppListFolderView() {
@@ -63,6 +70,27 @@ void AppListFolderView::SetAppListFolderItem(AppListFolderItem* folder) {
folder_header_view_->SetFolderItem(folder_item_);
}
+void AppListFolderView::ScheduleShowHideAnimation(bool show) {
+ // Stop any previous animation.
+ layer()->GetAnimator()->StopAnimating();
+
+ // Hide the top items temporarily if showing the view for opening the folder.
+ if (show)
+ items_grid_view_->SetTopItemViewsVisible(false);
+
+ // Set initial state.
+ SetVisible(true);
+ layer()->SetOpacity(show ? 0.0f : 1.0f);
+
+ ui::ScopedLayerAnimationSettings animation(layer()->GetAnimator());
+ animation.SetTweenType(gfx::Tween::EASE_IN_2);
+ animation.AddObserver(this);
+ animation.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
+ show ? kFolderTransitionInDurationMs : kFolderTransitionOutDurationMs));
+
+ layer()->SetOpacity(show ? 1.0f : 0.0f);
+}
+
gfx::Size AppListFolderView::GetPreferredSize() {
const gfx::Size header_size = folder_header_view_->GetPreferredSize();
const gfx::Size grid_size = items_grid_view_->GetPreferredSize();
@@ -80,6 +108,15 @@ bool AppListFolderView::OnKeyPressed(const ui::KeyEvent& event) {
return items_grid_view_->OnKeyPressed(event);
}
+void AppListFolderView::OnImplicitAnimationsCompleted() {
+ // Show the top items when the opening folder animation is done.
+ if (layer()->opacity() == 1.0f)
+ items_grid_view_->SetTopItemViewsVisible(true);
+
+ if (layer()->opacity() == 0.0f)
+ SetVisible(false);
+}
+
void AppListFolderView::CalculateIdealBounds() {
gfx::Rect rect(GetContentsBounds());
if (rect.IsEmpty())
@@ -95,9 +132,24 @@ void AppListFolderView::CalculateIdealBounds() {
view_model_->set_ideal_bounds(kIndexChildItems, grid_frame);
}
+gfx::Rect AppListFolderView::GetItemIconBoundsAt(int index) {
+ AppListItemView* item_view = items_grid_view_->GetItemViewAt(index);
+ // Icon bounds relative to AppListItemView.
+ const gfx::Rect icon_bounds = item_view->GetIconBounds();
+ gfx::Rect to_apps_grid_view = item_view->ConvertRectToParent(icon_bounds);
+ gfx::Rect to_folder =
+ items_grid_view_->ConvertRectToParent(to_apps_grid_view);
+
+ // Get the icon image's bound.
+ to_folder.ClampToCenteredSize(
+ gfx::Size(kPreferredIconDimension, kPreferredIconDimension));
+
+ return to_folder;
+}
+
void AppListFolderView::NavigateBack(AppListFolderItem* item,
const ui::Event& event_flags) {
- container_view_->ShowApps();
+ container_view_->ShowApps(item);
}
} // namespace app_list
« no previous file with comments | « ui/app_list/views/app_list_folder_view.h ('k') | ui/app_list/views/app_list_item_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698