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

Unified Diff: ash/shelf/shelf_widget.cc

Issue 18637004: Sets the background color of shelf is opaque black when maximized (2nd) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove log Created 7 years, 5 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 | « ash/shelf/shelf_widget.h ('k') | ash/wm/workspace/workspace_layout_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_widget.cc
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc
index ad11e7d792c6841833853db4be23664b894bf092..1f83de44270ca079ad94f1d2ce72629f84b9455c 100644
--- a/ash/shelf/shelf_widget.cc
+++ b/ash/shelf/shelf_widget.cc
@@ -27,6 +27,7 @@
#include "ui/base/events/event_constants.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/compositor/layer.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia_operations.h"
@@ -44,6 +45,7 @@ const int kDimAlpha = 128;
// The time to dim and un-dim.
const int kTimeToDimMs = 3000; // Slow in dimming.
const int kTimeToUnDimMs = 200; // Fast in activating.
+const int kTimeToSwitchBackgroundMs = 1000;
// Class used to slightly dim shelf items when maximized and visible.
class DimmerView : public views::View,
@@ -246,6 +248,8 @@ class ShelfWidget::DelegateView : public views::WidgetDelegate,
return focus_cycler_;
}
+ ui::Layer* opaque_background() { return &opaque_background_; }
+
// Set if the shelf area is dimmed (eg when a window is maximized).
void SetDimmed(bool dimmed);
bool GetDimmed() const;
@@ -253,6 +257,8 @@ class ShelfWidget::DelegateView : public views::WidgetDelegate,
// Set the bounds of the widget.
void SetWidgetBounds(const gfx::Rect bounds);
+ void SetParentLayer(ui::Layer* layer);
+
// views::View overrides:
virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE;
@@ -266,6 +272,8 @@ class ShelfWidget::DelegateView : public views::WidgetDelegate,
virtual bool CanActivate() const OVERRIDE;
virtual void Layout() OVERRIDE;
+ virtual void ReorderChildLayers(ui::Layer* parent_layer) OVERRIDE;
+ virtual void OnBoundsChanged(const gfx::Rect& old_bounds) OVERRIDE;
// BackgroundAnimatorDelegate overrides:
virtual void UpdateBackground(int alpha) OVERRIDE;
@@ -292,6 +300,7 @@ class ShelfWidget::DelegateView : public views::WidgetDelegate,
scoped_ptr<views::Widget> dimmer_;
internal::FocusCycler* focus_cycler_;
int alpha_;
+ ui::Layer opaque_background_;
// The view which does the dimming.
DimmerView* dimmer_view_;
@@ -306,9 +315,13 @@ ShelfWidget::DelegateView::DelegateView(ShelfWidget* shelf)
: shelf_(shelf),
focus_cycler_(NULL),
alpha_(0),
+ opaque_background_(ui::LAYER_SOLID_COLOR),
dimmer_view_(NULL),
disable_dimming_animations_for_test_(false) {
set_allow_deactivate_on_esc(true);
+ opaque_background_.SetColor(SK_ColorBLACK);
+ opaque_background_.SetBounds(GetLocalBounds());
+ opaque_background_.SetOpacity(0.0f);
}
ShelfWidget::DelegateView::~DelegateView() {
@@ -351,6 +364,11 @@ void ShelfWidget::DelegateView::SetWidgetBounds(const gfx::Rect bounds) {
dimmer_->SetBounds(bounds);
}
+void ShelfWidget::DelegateView::SetParentLayer(ui::Layer* layer) {
+ layer->Add(&opaque_background_);
+ ReorderLayers();
+}
+
void ShelfWidget::DelegateView::OnPaintBackground(gfx::Canvas* canvas) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
gfx::ImageSkia launcher_background =
@@ -405,6 +423,15 @@ void ShelfWidget::DelegateView::Layout() {
}
}
+void ShelfWidget::DelegateView::ReorderChildLayers(ui::Layer* parent_layer) {
+ views::View::ReorderChildLayers(parent_layer);
+ parent_layer->StackAtBottom(&opaque_background_);
+}
+
+void ShelfWidget::DelegateView::OnBoundsChanged(const gfx::Rect& old_bounds) {
+ opaque_background_.SetBounds(GetLocalBounds());
+}
+
void ShelfWidget::DelegateView::ForceUndimming(bool force) {
if (GetDimmed())
dimmer_view_->ForceUndimming(force);
@@ -445,6 +472,7 @@ ShelfWidget::ShelfWidget(aura::Window* shelf_container,
// The shelf should not take focus when initially shown.
set_focus_on_creation(false);
SetContentsView(delegate_view_);
+ delegate_view_->SetParentLayer(GetLayer());
status_area_widget_ = new internal::StatusAreaWidget(status_container);
status_area_widget_->CreateTrayViews();
@@ -471,9 +499,34 @@ ShelfWidget::~ShelfWidget() {
}
void ShelfWidget::SetPaintsBackground(
- bool value,
+ ShelfBackgroundType background_type,
internal::BackgroundAnimator::ChangeType change_type) {
- background_animator_.SetPaintsBackground(value, change_type);
+ ui::Layer* opaque_background = delegate_view_->opaque_background();
+ float target_opacity =
+ (background_type == SHELF_BACKGROUND_MAXIMIZED) ? 1.0f : 0.0f;
+ scoped_ptr<ui::ScopedLayerAnimationSettings> opaque_background_animation;
+ if (change_type != internal::BackgroundAnimator::CHANGE_IMMEDIATE) {
+ opaque_background_animation.reset(new ui::ScopedLayerAnimationSettings(
+ opaque_background->GetAnimator()));
+ opaque_background_animation->SetTransitionDuration(
+ base::TimeDelta::FromMilliseconds(kTimeToSwitchBackgroundMs));
+ }
+ opaque_background->SetOpacity(target_opacity);
+
+ // TODO(mukai): use ui::Layer on both opaque_background and normal background
+ // retire background_animator_ at all. It would be simpler.
+ background_animator_.SetPaintsBackground(
+ background_type != SHELF_BACKGROUND_DEFAULT,
+ change_type);
+}
+
+ShelfBackgroundType ShelfWidget::GetBackgroundType() const {
+ if (delegate_view_->opaque_background()->GetTargetOpacity() == 1.0f)
+ return SHELF_BACKGROUND_MAXIMIZED;
+ if (background_animator_.paints_background())
+ return SHELF_BACKGROUND_OVERLAP;
+
+ return SHELF_BACKGROUND_DEFAULT;
}
ShelfAlignment ShelfWidget::GetAlignment() const {
« no previous file with comments | « ash/shelf/shelf_widget.h ('k') | ash/wm/workspace/workspace_layout_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698