| 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) {
|
|
|