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

Unified Diff: chrome/browser/ui/views/fullscreen_exit_bubble_views.cc

Issue 7549005: Abstract fullscreen exit bubble logic to bring Linux's behaviour in line with (Closed) Base URL: /usr/local/google/chromium2/src@trunk
Patch Set: Rebase attempt #3. Created 9 years, 4 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 | « chrome/browser/ui/views/fullscreen_exit_bubble_views.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/fullscreen_exit_bubble_views.cc
diff --git a/chrome/browser/ui/views/fullscreen_exit_bubble.cc b/chrome/browser/ui/views/fullscreen_exit_bubble_views.cc
similarity index 53%
rename from chrome/browser/ui/views/fullscreen_exit_bubble.cc
rename to chrome/browser/ui/views/fullscreen_exit_bubble_views.cc
index 43bbe78d5f90e1f3b2a7090a976d913822885c63..f327ac3d95137188fdfdd2d90a8c71663580b14b 100644
--- a/chrome/browser/ui/views/fullscreen_exit_bubble.cc
+++ b/chrome/browser/ui/views/fullscreen_exit_bubble_views.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/views/fullscreen_exit_bubble.h"
+#include "chrome/browser/ui/views/fullscreen_exit_bubble_views.h"
#include "base/message_loop.h"
#include "base/utf_string_conversions.h"
@@ -23,9 +23,9 @@
// FullscreenExitView ----------------------------------------------------------
-class FullscreenExitBubble::FullscreenExitView : public views::View {
+class FullscreenExitBubbleViews::FullscreenExitView : public views::View {
public:
- FullscreenExitView(FullscreenExitBubble* bubble,
+ FullscreenExitView(FullscreenExitBubbleViews* bubble,
const std::wstring& accelerator);
virtual ~FullscreenExitView();
@@ -33,8 +33,6 @@ class FullscreenExitBubble::FullscreenExitView : public views::View {
virtual gfx::Size GetPreferredSize();
private:
- static const int kPaddingPixels; // Number of pixels around all sides of link
-
// views::View
virtual void Layout();
virtual void OnPaint(gfx::Canvas* canvas);
@@ -43,10 +41,8 @@ class FullscreenExitBubble::FullscreenExitView : public views::View {
views::Link link_;
};
-const int FullscreenExitBubble::FullscreenExitView::kPaddingPixels = 8;
-
-FullscreenExitBubble::FullscreenExitView::FullscreenExitView(
- FullscreenExitBubble* bubble,
+FullscreenExitBubbleViews::FullscreenExitView::FullscreenExitView(
+ FullscreenExitBubbleViews* bubble,
const std::wstring& accelerator) {
link_.set_parent_owned(false);
#if !defined(OS_CHROMEOS)
@@ -65,26 +61,26 @@ FullscreenExitBubble::FullscreenExitView::FullscreenExitView(
AddChildView(&link_);
}
-FullscreenExitBubble::FullscreenExitView::~FullscreenExitView() {
+FullscreenExitBubbleViews::FullscreenExitView::~FullscreenExitView() {
}
-gfx::Size FullscreenExitBubble::FullscreenExitView::GetPreferredSize() {
+gfx::Size FullscreenExitBubbleViews::FullscreenExitView::GetPreferredSize() {
gfx::Size preferred_size(link_.GetPreferredSize());
- preferred_size.Enlarge(kPaddingPixels * 2, kPaddingPixels * 2);
+ preferred_size.Enlarge(kPaddingPx * 2, kPaddingPx * 2);
return preferred_size;
}
-void FullscreenExitBubble::FullscreenExitView::Layout() {
+void FullscreenExitBubbleViews::FullscreenExitView::Layout() {
gfx::Size link_preferred_size(link_.GetPreferredSize());
- link_.SetBounds(kPaddingPixels,
- height() - kPaddingPixels - link_preferred_size.height(),
+ link_.SetBounds(kPaddingPx,
+ height() - kPaddingPx - link_preferred_size.height(),
link_preferred_size.width(), link_preferred_size.height());
}
-void FullscreenExitBubble::FullscreenExitView::OnPaint(gfx::Canvas* canvas) {
+void FullscreenExitBubbleViews::FullscreenExitView::OnPaint(gfx::Canvas* canvas) {
// Create a round-bottomed rect to fill the whole View.
SkRect rect;
- SkScalar padding = SkIntToScalar(kPaddingPixels);
+ SkScalar padding = SkIntToScalar(kPaddingPx);
// The "-padding" top coordinate ensures that the rect is always tall enough
// to contain the complete rounded corner radius. If we set this to 0, as the
// popup slides offscreen (in reality, squishes to 0 height), the corners will
@@ -102,21 +98,13 @@ void FullscreenExitBubble::FullscreenExitView::OnPaint(gfx::Canvas* canvas) {
canvas->AsCanvasSkia()->drawPath(path, paint);
}
-// FullscreenExitBubble --------------------------------------------------------
-
-const double FullscreenExitBubble::kOpacity = 0.7;
-const int FullscreenExitBubble::kInitialDelayMs = 2300;
-const int FullscreenExitBubble::kIdleTimeMs = 2300;
-const int FullscreenExitBubble::kPositionCheckHz = 10;
-const int FullscreenExitBubble::kSlideInRegionHeightPx = 4;
-const int FullscreenExitBubble::kSlideInDurationMs = 350;
-const int FullscreenExitBubble::kSlideOutDurationMs = 700;
+// FullscreenExitBubbleViews ---------------------------------------------------
-FullscreenExitBubble::FullscreenExitBubble(
+FullscreenExitBubbleViews::FullscreenExitBubbleViews(
views::Widget* frame,
CommandUpdater::CommandUpdaterDelegate* delegate)
- : root_view_(frame->GetRootView()),
- delegate_(delegate),
+ : FullscreenExitBubble(delegate),
+ root_view_(frame->GetRootView()),
popup_(NULL),
size_animation_(new ui::SlideAnimation(this)) {
size_animation_->Reset(1);
@@ -141,18 +129,10 @@ FullscreenExitBubble::FullscreenExitBubble(
popup_->SetOpacity(static_cast<unsigned char>(0xff * kOpacity));
popup_->Show(); // This does not activate the popup.
- // Start the initial delay timer and begin watching the mouse.
- initial_delay_.Start(base::TimeDelta::FromMilliseconds(kInitialDelayMs), this,
- &FullscreenExitBubble::CheckMousePosition);
- gfx::Point cursor_pos = gfx::Screen::GetCursorScreenPoint();
- last_mouse_pos_ = cursor_pos;
- views::View::ConvertPointToView(NULL, root_view_, &last_mouse_pos_);
- mouse_position_checker_.Start(
- base::TimeDelta::FromMilliseconds(1000 / kPositionCheckHz), this,
- &FullscreenExitBubble::CheckMousePosition);
+ StartWatchingMouse();
}
-FullscreenExitBubble::~FullscreenExitBubble() {
+FullscreenExitBubbleViews::~FullscreenExitBubbleViews() {
// This is tricky. We may be in an ATL message handler stack, in which case
// the popup cannot be deleted yet. We also can't set the popup's ownership
// model to NATIVE_WIDGET_OWNS_WIDGET because if the user closed the last tab
@@ -166,11 +146,12 @@ FullscreenExitBubble::~FullscreenExitBubble() {
MessageLoop::current()->DeleteSoon(FROM_HERE, popup_);
}
-void FullscreenExitBubble::LinkClicked(views::Link* source, int event_flags) {
- delegate_->ExecuteCommand(IDC_FULLSCREEN);
+void FullscreenExitBubbleViews::LinkClicked(
+ views::Link* source, int event_flags) {
+ ToggleFullscreen();
}
-void FullscreenExitBubble::AnimationProgressed(
+void FullscreenExitBubbleViews::AnimationProgressed(
const ui::Animation* animation) {
gfx::Rect popup_rect(GetPopupRect(false));
if (popup_rect.IsEmpty()) {
@@ -180,70 +161,41 @@ void FullscreenExitBubble::AnimationProgressed(
popup_->Show();
}
}
-void FullscreenExitBubble::AnimationEnded(
+void FullscreenExitBubbleViews::AnimationEnded(
const ui::Animation* animation) {
AnimationProgressed(animation);
}
-void FullscreenExitBubble::CheckMousePosition() {
- // Desired behavior:
- //
- // +------------+-----------------------------+------------+
- // | _ _ _ _ | Exit full screen mode (F11) | _ _ _ _ | Slide-in region
- // | _ _ _ _ \_____________________________/ _ _ _ _ | Neutral region
- // | | Slide-out region
- // : :
- //
- // * If app is not active, we hide the popup.
- // * If the mouse is offscreen or in the slide-out region, we hide the popup.
- // * If the mouse goes idle, we hide the popup.
- // * If the mouse is in the slide-in-region and not idle, we show the popup.
- // * If the mouse is in the neutral region and not idle, and the popup is
- // currently sliding out, we show it again. This facilitates users
- // correcting us if they try to mouse horizontally towards the popup and
- // unintentionally drop too low.
- // * Otherwise, we do nothing, because the mouse is in the neutral region and
- // either the popup is hidden or the mouse is not idle, so we don't want to
- // change anything's state.
+void FullscreenExitBubbleViews::Hide() {
+ size_animation_->SetSlideDuration(kSlideOutDurationMs);
+ size_animation_->Hide();
+}
- gfx::Point cursor_pos = gfx::Screen::GetCursorScreenPoint();
- gfx::Point transformed_pos(cursor_pos);
- views::View::ConvertPointToView(NULL, root_view_, &transformed_pos);
+void FullscreenExitBubbleViews::Show() {
+ size_animation_->SetSlideDuration(kSlideInDurationMs);
+ size_animation_->Show();
+}
- // Check to see whether the mouse is idle.
- if (transformed_pos != last_mouse_pos_) {
- // The mouse moved; reset the idle timer.
- idle_timeout_.Stop(); // If the timer isn't running, this is a no-op.
- idle_timeout_.Start(base::TimeDelta::FromMilliseconds(kIdleTimeMs), this,
- &FullscreenExitBubble::CheckMousePosition);
- }
- last_mouse_pos_ = transformed_pos;
+bool FullscreenExitBubbleViews::IsAnimating() {
+ return size_animation_->GetCurrentValue() != 0;
+}
- if ((!root_view_->GetWidget()->IsActive()) ||
- !root_view_->HitTest(transformed_pos) ||
- (cursor_pos.y() >= GetPopupRect(true).bottom()) ||
- !idle_timeout_.IsRunning()) {
- // The cursor is offscreen, in the slide-out region, or idle.
- Hide();
- } else if ((cursor_pos.y() < kSlideInRegionHeightPx) ||
- (size_animation_->GetCurrentValue() != 0)) {
- // The cursor is not idle, and either it's in the slide-in region or it's in
- // the neutral region and we're sliding out.
- size_animation_->SetSlideDuration(kSlideInDurationMs);
- size_animation_->Show();
- }
+bool FullscreenExitBubbleViews::IsWindowActive() {
+ return root_view_->GetWidget()->IsActive();
}
-void FullscreenExitBubble::Hide() {
- // Allow the bubble to hide if the window is deactivated or our initial delay
- // finishes.
- if ((!root_view_->GetWidget()->IsActive()) || !initial_delay_.IsRunning()) {
- size_animation_->SetSlideDuration(kSlideOutDurationMs);
- size_animation_->Hide();
- }
+bool FullscreenExitBubbleViews::WindowContainsPoint(gfx::Point pos) {
+ return root_view_->HitTest(pos);
+}
+
+gfx::Point FullscreenExitBubbleViews::GetCursorScreenPoint() {
+ gfx::Point cursor_pos = gfx::Screen::GetCursorScreenPoint();
+ gfx::Point transformed_pos(cursor_pos);
+ views::View::ConvertPointToView(NULL, root_view_, &transformed_pos);
+ return transformed_pos;
}
-gfx::Rect FullscreenExitBubble::GetPopupRect(
+gfx::Rect FullscreenExitBubbleViews::GetPopupRect(
bool ignore_animation_state) const {
gfx::Size size(view_->GetPreferredSize());
if (!ignore_animation_state) {
« no previous file with comments | « chrome/browser/ui/views/fullscreen_exit_bubble_views.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698