| Index: ui/app_list/views/folder_background_view.cc
|
| diff --git a/ui/app_list/views/folder_background_view.cc b/ui/app_list/views/folder_background_view.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ebb3c12f4ad9188b3ed41d96c8ce00bc1ecdc9b8
|
| --- /dev/null
|
| +++ b/ui/app_list/views/folder_background_view.cc
|
| @@ -0,0 +1,94 @@
|
| +// Copyright 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.
|
| +
|
| +#include "ui/app_list/views/folder_background_view.h"
|
| +
|
| +#include "ui/app_list/app_list_constants.h"
|
| +#include "ui/app_list/views/app_list_folder_view.h"
|
| +#include "ui/app_list/views/apps_container_view.h"
|
| +#include "ui/compositor/scoped_layer_animation_settings.h"
|
| +#include "ui/gfx/canvas.h"
|
| +#include "ui/gfx/transform_util.h"
|
| +
|
| +namespace app_list {
|
| +
|
| +namespace {
|
| +
|
| +const float kFolderInkBubbleScale = 1.2f;
|
| +const int kBubbleTransitionDurationMs = 200;
|
| +
|
| +} // namespace
|
| +
|
| +FolderBackgroundView::FolderBackgroundView()
|
| + : folder_view_(NULL),
|
| + show_state_(NO_BUBBLE) {
|
| + SetPaintToLayer(true);
|
| + SetFillsBoundsOpaquely(false);
|
| +}
|
| +
|
| +FolderBackgroundView::~FolderBackgroundView() {
|
| +}
|
| +
|
| +void FolderBackgroundView::UpdateFolderContainerBubble(ShowState state) {
|
| + if (show_state_ == state ||
|
| + (state == HIDE_BUBBLE && show_state_ == NO_BUBBLE)) {
|
| + return;
|
| + }
|
| +
|
| + show_state_ = state;
|
| +
|
| + // Set the initial state before the animation starts.
|
| + const gfx::Rect bounds(layer()->bounds().size());
|
| + gfx::Transform transform =
|
| + gfx::GetScaleTransform(bounds.CenterPoint(), kFolderInkBubbleScale);
|
| + if (show_state_ == SHOW_BUBBLE) {
|
| + layer()->SetOpacity(0.0f);
|
| + layer()->SetTransform(transform);
|
| + } else {
|
| + layer()->SetOpacity(1.0f);
|
| + layer()->SetTransform(gfx::Transform());
|
| + }
|
| +
|
| + ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator());
|
| + settings.AddObserver(this);
|
| + settings.SetTransitionDuration(
|
| + base::TimeDelta::FromMilliseconds((kBubbleTransitionDurationMs)));
|
| + if (show_state_ == SHOW_BUBBLE) {
|
| + layer()->SetOpacity(1.0f);
|
| + layer()->SetTransform(gfx::Transform());
|
| + } else {
|
| + layer()->SetOpacity(0.0f);
|
| + layer()->SetTransform(transform);
|
| + }
|
| +
|
| + SchedulePaint();
|
| +}
|
| +
|
| +int FolderBackgroundView::GetFolderContainerBubbleRadius() const {
|
| + return GetContentsBounds().height() / 2;
|
| +}
|
| +
|
| +void FolderBackgroundView::OnPaint(gfx::Canvas* canvas) {
|
| + if (show_state_ == NO_BUBBLE)
|
| + return;
|
| +
|
| + // Draw ink bubble that shows the folder boundary.
|
| + SkPaint paint;
|
| + paint.setStyle(SkPaint::kFill_Style);
|
| + paint.setAntiAlias(true);
|
| + paint.setColor(kFolderBubbleColor);
|
| + canvas->DrawCircle(GetContentsBounds().CenterPoint(),
|
| + GetFolderContainerBubbleRadius(),
|
| + paint);
|
| +}
|
| +
|
| +void FolderBackgroundView::OnImplicitAnimationsCompleted() {
|
| + // Show folder name after the ink bubble disappears.
|
| + if (show_state_ == HIDE_BUBBLE) {
|
| + static_cast<AppsContainerView*>(parent())->app_list_folder_view()->
|
| + UpdateFolderNameVisibility(true);
|
| + }
|
| +}
|
| +
|
| +} // namespace app_list
|
|
|