summaryrefslogtreecommitdiffstats
path: root/ash/launcher/launcher.cc
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-24 21:59:20 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-24 21:59:20 +0000
commitf4851aca1640208ba647b0f34cf94ef634ac7d32 (patch)
treecd41e410ea5ae467213485be8768dfc20c6a2309 /ash/launcher/launcher.cc
parentb24b68a97679a58fc7f12e9bb3897fef77ee081e (diff)
downloadchromium_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.cc90
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 {