diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-16 18:24:46 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-16 18:24:46 +0000 |
commit | b7d0812e4f6744e851cf874f2e6354cbfc05d921 (patch) | |
tree | 50ce96a2e4eed94181e035413185928fad04f022 /ash/launcher | |
parent | 2c60c8ac55953d49b59d7595a95a850ddc6ef2e1 (diff) | |
download | chromium_src-b7d0812e4f6744e851cf874f2e6354cbfc05d921.zip chromium_src-b7d0812e4f6744e851cf874f2e6354cbfc05d921.tar.gz chromium_src-b7d0812e4f6744e851cf874f2e6354cbfc05d921.tar.bz2 |
Dim shelf when maximized
BUG=146959
Test=Visual
Review URL: https://codereview.chromium.org/10916321
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157054 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/launcher')
-rw-r--r-- | ash/launcher/launcher.cc | 77 | ||||
-rw-r--r-- | ash/launcher/launcher.h | 8 |
2 files changed, 84 insertions, 1 deletions
diff --git a/ash/launcher/launcher.cc b/ash/launcher/launcher.cc index 73df792..dea2681 100644 --- a/ash/launcher/launcher.cc +++ b/ash/launcher/launcher.cc @@ -29,6 +29,8 @@ namespace { // Size of black border at bottom (or side) of launcher. const int kNumBlackPixels = 3; +// Alpha to paint dimming image with. +const int kDimAlpha = 96; } namespace ash { @@ -78,6 +80,39 @@ class Launcher::DelegateView : public views::WidgetDelegate, DISALLOW_COPY_AND_ASSIGN(DelegateView); }; +// Class used to slightly dim shelf items when maximized and visible. +class DimmerView : public views::View, public views::WidgetDelegate { + public: + DimmerView() {} + ~DimmerView() {} + + // views::WidgetDelegateView overrides: + virtual views::Widget* GetWidget() OVERRIDE { + return View::GetWidget(); + } + virtual const views::Widget* GetWidget() const OVERRIDE { + return View::GetWidget(); + } + + void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE { + SkPaint paint; + static const gfx::ImageSkia* launcher_background = NULL; + if (!launcher_background) { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + launcher_background = + rb.GetImageNamed(IDR_AURA_LAUNCHER_DIMMING).ToImageSkia(); + } + paint.setAlpha(kDimAlpha); + canvas->DrawImageInt( + *launcher_background, + 0, 0, launcher_background->width(), launcher_background->height(), + 0, 0, width(), height(), + false, + paint); + } + DISALLOW_COPY_AND_ASSIGN(DimmerView); +}; + Launcher::DelegateView::DelegateView(Launcher* launcher) : launcher_(launcher), focus_cycler_(NULL), @@ -108,9 +143,9 @@ void Launcher::DelegateView::Layout() { void Launcher::DelegateView::OnPaintBackground(gfx::Canvas* canvas) { if (launcher_->alignment_ == SHELF_ALIGNMENT_BOTTOM) { SkPaint paint; - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); static const gfx::ImageSkia* launcher_background = NULL; if (!launcher_background) { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); launcher_background = rb.GetImageNamed(IDR_AURA_LAUNCHER_BACKGROUND).ToImageSkia(); } @@ -200,6 +235,40 @@ void Launcher::SetPaintsBackground( background_animator_.SetPaintsBackground(value, change_type); } +void Launcher::SetDimsShelf(bool value) { + if (value == (dimmer_.get() != NULL)) + return; + + if (value) { + dimmer_.reset(new views::Widget); + views::Widget::InitParams params( + views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); + params.transparent = true; + params.can_activate = false; + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.parent = Shell::GetContainer( + window_container_->GetRootWindow(), + ash::internal::kShellWindowId_LauncherContainer); + params.accept_events = false; + dimmer_->Init(params); + dimmer_->GetNativeWindow()->SetName("LauncherDimmer"); + gfx::Size pref = + static_cast<views::View*>(launcher_view_)->GetPreferredSize(); + dimmer_->SetBounds(widget_->GetWindowBoundsInScreen()); + // The launcher should not take focus when it is initially shown. + dimmer_->set_focus_on_creation(false); + dimmer_->SetContentsView(new DimmerView); + dimmer_->GetNativeView()->SetName("LauncherDimmerView"); + dimmer_->Show(); + } else { + dimmer_.reset(NULL); + } +} + +bool Launcher::GetDimsShelf() const { + return dimmer_.get() && dimmer_->IsVisible(); +} + void Launcher::SetStatusSize(const gfx::Size& size) { if (status_size_ == size) return; @@ -261,6 +330,12 @@ views::View* Launcher::GetAppListButtonView() const { return launcher_view_->GetAppListButtonView(); } +void Launcher::SetWidgetBounds(const gfx::Rect bounds) { + widget_->SetBounds(bounds); + if (dimmer_.get()) + dimmer_->SetBounds(bounds); +} + internal::LauncherView* Launcher::GetLauncherViewForTest() { return launcher_view_; } diff --git a/ash/launcher/launcher.h b/ash/launcher/launcher.h index d889e61..c9947a7 100644 --- a/ash/launcher/launcher.h +++ b/ash/launcher/launcher.h @@ -60,6 +60,10 @@ class ASH_EXPORT Launcher { return background_animator_.paints_background(); } + // Causes shelf items to be slightly dimmed. + void SetDimsShelf(bool value); + bool GetDimsShelf() const; + // Sets the size of the status area. void SetStatusSize(const gfx::Size& size); const gfx::Size& status_size() const { return status_size_; } @@ -87,6 +91,9 @@ class ASH_EXPORT Launcher { views::View* GetAppListButtonView() const; + // Sets the bounds of the launcher widget, and the dimmer if visible. + void SetWidgetBounds(const gfx::Rect bounds); + // Only to be called for testing. Retrieves the LauncherView. // TODO(sky): remove this! internal::LauncherView* GetLauncherViewForTest(); @@ -105,6 +112,7 @@ class ASH_EXPORT Launcher { // Widget hosting the view. scoped_ptr<views::Widget> widget_; + scoped_ptr<views::Widget> dimmer_; aura::Window* window_container_; |