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

Unified Diff: ash/launcher/launcher.cc

Issue 9764008: Makes the launcher auto-hide for maximized windows. This turned out to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add null checks and cleanup Created 8 years, 9 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/launcher/launcher.h ('k') | ash/screen_ash.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/launcher/launcher.cc
diff --git a/ash/launcher/launcher.cc b/ash/launcher/launcher.cc
index 3c1543fc7a1b6ff6c8eace28635456810666e041..58d8b56670f2ea4bad3195cfdec63f5b8df909ce 100644
--- a/ash/launcher/launcher.cc
+++ b/ash/launcher/launcher.cc
@@ -11,23 +11,35 @@
#include "ash/shell.h"
#include "ash/shell_delegate.h"
#include "ash/shell_window_ids.h"
+#include "ash/wm/shelf_layout_manager.h"
+#include "base/timer.h"
#include "ui/aura/window.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/compositor/layer.h"
#include "ui/gfx/image/image.h"
#include "ui/views/accessible_pane_view.h"
-#include "ui/views/painter.h"
+#include "ui/views/background.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
namespace ash {
+namespace {
+
+// Duration of the background animation.
+const int kBackgroundDurationMS = 1000;
+
+// Delay before showing the launcher after the mouse enters the view.
+const int kShowDelayMS = 300;
+
+}
+
// The contents view of the Widget. This view contains LauncherView and
// sizes it to the width of the widget minus the size of the status area.
class Launcher::DelegateView : public views::WidgetDelegate,
- public views::AccessiblePaneView {
+ public views::AccessiblePaneView{
Ben Goodger (Google) 2012/03/21 05:16:50 you lost a space here
public:
- explicit DelegateView();
+ explicit DelegateView(Launcher* launcher);
virtual ~DelegateView();
void SetStatusWidth(int width);
@@ -40,16 +52,16 @@ class Launcher::DelegateView : public views::WidgetDelegate,
// views::View overrides
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void Layout() OVERRIDE;
+ virtual void OnMouseEntered(const views::MouseEvent& event) OVERRIDE;
+ virtual void OnMouseExited(const views::MouseEvent& event) OVERRIDE;
+ // views::WidgetDelegateView overrides:
virtual views::Widget* GetWidget() OVERRIDE {
return View::GetWidget();
}
-
virtual const views::Widget* GetWidget() const OVERRIDE {
return View::GetWidget();
}
-
- // views::WidgetDelegateView overrides:
virtual bool CanActivate() const OVERRIDE {
// We don't want mouse clicks to activate us, but we need to allow
// activation when the user is using the keyboard (FocusCycler).
@@ -57,24 +69,31 @@ class Launcher::DelegateView : public views::WidgetDelegate,
}
private:
+ // Shows the launcher.
+ void ShowLauncher();
+
+ Launcher* launcher_;
+
+ // Width of the status area.
int status_width_;
+
const internal::FocusCycler* focus_cycler_;
+ base::OneShotTimer<DelegateView> show_timer_;
+
DISALLOW_COPY_AND_ASSIGN(DelegateView);
};
-Launcher::DelegateView::DelegateView()
- : status_width_(0),
+Launcher::DelegateView::DelegateView(Launcher* launcher)
+ : launcher_(launcher),
+ status_width_(0),
focus_cycler_(NULL) {
+ set_notify_enter_exit_on_child(true);
}
Launcher::DelegateView::~DelegateView() {
}
-void Launcher::SetFocusCycler(const internal::FocusCycler* focus_cycler) {
- delegate_view_->set_focus_cycler(focus_cycler);
-}
-
void Launcher::DelegateView::SetStatusWidth(int width) {
if (status_width_ == width)
return;
@@ -93,11 +112,41 @@ void Launcher::DelegateView::Layout() {
child_at(0)->SetBounds(0, 0, std::max(0, width() - status_width_), height());
}
+void Launcher::DelegateView::OnMouseEntered(const views::MouseEvent& event) {
+ if (!show_timer_.IsRunning()) {
+ // The user may be trying to target a button near the bottom of the screen
+ // and accidentally moved into the launcher area. Delay showing.
+ show_timer_.Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(kShowDelayMS),
+ this, &DelegateView::ShowLauncher);
+ }
+}
+
+void Launcher::DelegateView::OnMouseExited(const views::MouseEvent& event) {
+ show_timer_.Stop();
+ internal::ShelfLayoutManager* shelf = Shell::GetInstance()->shelf();
+ shelf->SetState(shelf->visibility_state(),
+ internal::ShelfLayoutManager::AUTO_HIDE_HIDDEN);
+}
+
+void Launcher::DelegateView::ShowLauncher() {
+ show_timer_.Stop();
+ internal::ShelfLayoutManager* shelf = Shell::GetInstance()->shelf();
+ shelf->SetState(shelf->visibility_state(),
+ internal::ShelfLayoutManager::AUTO_HIDE_SHOWN);
+}
+
+
+// Launcher --------------------------------------------------------------------
+
Launcher::Launcher(aura::Window* window_container)
: widget_(NULL),
window_container_(window_container),
delegate_view_(NULL),
- launcher_view_(NULL) {
+ launcher_view_(NULL),
+ ALLOW_THIS_IN_INITIALIZER_LIST(background_animation_(this)),
+ renders_background_(false),
+ background_alpha_(0) {
model_.reset(new LauncherModel);
if (Shell::GetInstance()->delegate()) {
delegate_.reset(
@@ -114,7 +163,7 @@ Launcher::Launcher(aura::Window* window_container)
ash::internal::kShellWindowId_LauncherContainer);
launcher_view_ = new internal::LauncherView(model_.get(), delegate_.get());
launcher_view_->Init();
- delegate_view_ = new DelegateView;
+ delegate_view_ = new DelegateView(this);
delegate_view_->AddChildView(launcher_view_);
params.delegate = delegate_view_;
widget_->Init(params);
@@ -127,11 +176,31 @@ Launcher::Launcher(aura::Window* window_container)
widget_->SetContentsView(delegate_view_);
widget_->Show();
widget_->GetNativeView()->SetName("LauncherView");
+ background_animation_.SetSlideDuration(kBackgroundDurationMS);
}
Launcher::~Launcher() {
}
+void Launcher::SetFocusCycler(const internal::FocusCycler* focus_cycler) {
+ delegate_view_->set_focus_cycler(focus_cycler);
+}
+
+void Launcher::SetRendersBackground(bool value, BackgroundChangeSpeed speed) {
+ if (renders_background_ == value)
+ return;
+ renders_background_ = value;
+ if (speed == CHANGE_IMMEDIATE && !background_animation_.is_animating()) {
+ background_animation_.Reset(value ? 1.0f : 0.0f);
+ AnimationProgressed(&background_animation_);
+ return;
+ }
+ if (renders_background_)
+ background_animation_.Show();
+ else
+ background_animation_.Hide();
+}
+
void Launcher::SetStatusWidth(int width) {
delegate_view_->SetStatusWidth(width);
}
@@ -161,4 +230,19 @@ internal::LauncherView* Launcher::GetLauncherViewForTest() {
return static_cast<internal::LauncherView*>(
widget_->GetContentsView()->child_at(0));
}
+
+void Launcher::AnimationProgressed(const ui::Animation* animation) {
+ int alpha = animation->CurrentValueBetween(0, 128);
Ben Goodger (Google) 2012/03/21 05:16:50 kOnstant
+ if (background_alpha_ == alpha)
+ return;
+ background_alpha_ = alpha;
+ if (alpha == 0) {
+ delegate_view_->set_background(NULL);
+ } else {
+ delegate_view_->set_background(
+ views::Background::CreateSolidBackground(0, 0, 0, alpha));
+ }
+ delegate_view_->SchedulePaint();
+}
+
} // namespace ash
« no previous file with comments | « ash/launcher/launcher.h ('k') | ash/screen_ash.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698