diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-24 21:59:20 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-24 21:59:20 +0000 |
commit | f4851aca1640208ba647b0f34cf94ef634ac7d32 (patch) | |
tree | cd41e410ea5ae467213485be8768dfc20c6a2309 /ash/launcher/launcher.cc | |
parent | b24b68a97679a58fc7f12e9bb3897fef77ee081e (diff) | |
download | chromium_src-f4851aca1640208ba647b0f34cf94ef634ac7d32.zip chromium_src-f4851aca1640208ba647b0f34cf94ef634ac7d32.tar.gz chromium_src-f4851aca1640208ba647b0f34cf94ef634ac7d32.tar.bz2 |
ash: Make sure the shelf-dimmer widget always has the correct size.
At the end of a drag-gesture, the size of the shelf may be different from
its normal size. For these cases, the shelf will usually animate to the new
size. Make sure the dimmer also resizes itself when that happens.
BUG=151959
Review URL: https://codereview.chromium.org/10958082
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158410 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/launcher/launcher.cc')
-rw-r--r-- | ash/launcher/launcher.cc | 90 |
1 files changed, 55 insertions, 35 deletions
diff --git a/ash/launcher/launcher.cc b/ash/launcher/launcher.cc index 80f5827..b21681f 100644 --- a/ash/launcher/launcher.cc +++ b/ash/launcher/launcher.cc @@ -19,6 +19,7 @@ #include "ash/wm/window_properties.h" #include "grit/ash_resources.h" #include "ui/aura/window.h" +#include "ui/aura/window_observer.h" #include "ui/base/resource/resource_bundle.h" #include "ui/compositor/layer.h" #include "ui/gfx/canvas.h" @@ -81,21 +82,25 @@ 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 { +// Class used to slightly dim shelf items when maximized and visible. It also +// makes sure the widget changes size to always be of the same size as the +// shelf. +class DimmerView : public views::WidgetDelegateView, + public aura::WindowObserver { public: - DimmerView() {} - ~DimmerView() {} - - // views::WidgetDelegateView overrides: - virtual views::Widget* GetWidget() OVERRIDE { - return View::GetWidget(); + explicit DimmerView(views::Widget* launcher) + : launcher_(launcher) { + launcher_->GetNativeWindow()->AddObserver(this); } - virtual const views::Widget* GetWidget() const OVERRIDE { - return View::GetWidget(); + + ~DimmerView() { + if (launcher_) + launcher_->GetNativeWindow()->RemoveObserver(this); } - void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE { + private: + // views::View overrides: + virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE { SkPaint paint; static const gfx::ImageSkia* launcher_background = NULL; if (!launcher_background) { @@ -111,7 +116,23 @@ class DimmerView : public views::View, public views::WidgetDelegate { false, paint); } - DISALLOW_COPY_AND_ASSIGN(DimmerView); + + // aura::WindowObserver overrides: + virtual void OnWindowBoundsChanged(aura::Window* window, + const gfx::Rect& old_bounds, + const gfx::Rect& new_bounds) OVERRIDE { + CHECK_EQ(window, launcher_->GetNativeWindow()); + GetWidget()->SetBounds(launcher_->GetWindowBoundsInScreen()); + } + + virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { + CHECK_EQ(window, launcher_->GetNativeWindow()); + launcher_->GetNativeWindow()->RemoveObserver(this); + launcher_ = NULL; + } + + views::Widget* launcher_; + DISALLOW_COPY_AND_ASSIGN(DimmerView); }; Launcher::DelegateView::DelegateView(Launcher* launcher) @@ -242,30 +263,29 @@ 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); + if (!value) { + dimmer_.reset(); + return; } + + 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"); + 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(widget_.get())); + dimmer_->GetNativeView()->SetName("LauncherDimmerView"); + dimmer_->Show(); } bool Launcher::GetDimsShelf() const { |