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

Unified Diff: ash/wm/immersive_fullscreen_controller.cc

Issue 2265563002: Shuffles around immersive related classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@immersive_pure_virtual
Patch Set: move comment Created 4 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 | « ash/wm/immersive_fullscreen_controller.h ('k') | ash/wm/immersive_fullscreen_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/immersive_fullscreen_controller.cc
diff --git a/ash/wm/immersive_fullscreen_controller.cc b/ash/wm/immersive_fullscreen_controller.cc
deleted file mode 100644
index 231f19969af84d8a087b52d3d78f4dfd89b81085..0000000000000000000000000000000000000000
--- a/ash/wm/immersive_fullscreen_controller.cc
+++ /dev/null
@@ -1,655 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ash/wm/immersive_fullscreen_controller.h"
-
-#include <set>
-
-#include "ash/common/ash_constants.h"
-#include "ash/common/wm/immersive/wm_immersive_fullscreen_controller_delegate.h"
-#include "ash/shared/immersive_context.h"
-#include "ash/shared/immersive_focus_watcher.h"
-#include "ash/shared/immersive_gesture_handler.h"
-#include "ash/wm/immersive_handler_factory.h"
-#include "base/metrics/histogram.h"
-#include "ui/display/display.h"
-#include "ui/display/screen.h"
-#include "ui/events/base_event_utils.h"
-#include "ui/gfx/animation/slide_animation.h"
-#include "ui/gfx/geometry/point.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/views/bubble/bubble_dialog_delegate.h"
-#include "ui/views/view.h"
-#include "ui/views/widget/widget.h"
-
-namespace ash {
-
-namespace {
-
-// Duration for the reveal show/hide slide animation. The slower duration is
-// used for the initial slide out to give the user more change to see what
-// happened.
-const int kRevealSlowAnimationDurationMs = 400;
-const int kRevealFastAnimationDurationMs = 200;
-
-// The delay in milliseconds between the mouse stopping at the top edge of the
-// screen and the top-of-window views revealing.
-const int kMouseRevealDelayMs = 200;
-
-// The maximum amount of pixels that the cursor can move for the cursor to be
-// considered "stopped". This allows the user to reveal the top-of-window views
-// without holding the cursor completely still.
-const int kMouseRevealXThresholdPixels = 3;
-
-// Used to multiply x value of an update in check to determine if gesture is
-// vertical. This is used to make sure that gesture is close to vertical instead
-// of just more vertical then horizontal.
-const int kSwipeVerticalThresholdMultiplier = 3;
-
-// The height in pixels of the region above the top edge of the display which
-// hosts the immersive fullscreen window in which mouse events are ignored
-// (cannot reveal or unreveal the top-of-window views).
-// See ShouldIgnoreMouseEventAtLocation() for more details.
-const int kHeightOfDeadRegionAboveTopContainer = 10;
-
-} // namespace
-
-// The height in pixels of the region below the top edge of the display in which
-// the mouse can trigger revealing the top-of-window views.
-// The height must be greater than 1px because the top pixel is used to trigger
-// moving the cursor between displays if the user has a vertical display layout
-// (primary display above/below secondary display).
-const int ImmersiveFullscreenController::kMouseRevealBoundsHeight = 3;
-
-////////////////////////////////////////////////////////////////////////////////
-
-ImmersiveFullscreenController::ImmersiveFullscreenController()
- : delegate_(NULL),
- top_container_(NULL),
- widget_(NULL),
- observers_enabled_(false),
- enabled_(false),
- reveal_state_(CLOSED),
- revealed_lock_count_(0),
- mouse_x_when_hit_top_in_screen_(-1),
- gesture_begun_(false),
- animation_(new gfx::SlideAnimation(this)),
- animations_disabled_for_test_(false),
- weak_ptr_factory_(this) {}
-
-ImmersiveFullscreenController::~ImmersiveFullscreenController() {
- EnableWindowObservers(false);
-}
-
-void ImmersiveFullscreenController::Init(
- WmImmersiveFullscreenControllerDelegate* delegate,
- views::Widget* widget,
- views::View* top_container) {
- delegate_ = delegate;
- top_container_ = top_container;
- widget_ = widget;
- ImmersiveContext::Get()->InstallResizeHandleWindowTargeter(this);
-}
-
-void ImmersiveFullscreenController::SetEnabled(WindowType window_type,
- bool enabled) {
- if (enabled_ == enabled)
- return;
- enabled_ = enabled;
-
- EnableWindowObservers(enabled_);
-
- ImmersiveContext::Get()->OnEnteringOrExitingImmersive(this, enabled);
-
- if (enabled_) {
- // Animate enabling immersive mode by sliding out the top-of-window views.
- // No animation occurs if a lock is holding the top-of-window views open.
-
- // Do a reveal to set the initial state for the animation. (And any
- // required state in case the animation cannot run because of a lock holding
- // the top-of-window views open.)
- MaybeStartReveal(ANIMATE_NO);
-
- // Reset the located event so that it does not affect whether the
- // top-of-window views are hidden.
- located_event_revealed_lock_.reset();
-
- // Try doing the animation.
- MaybeEndReveal(ANIMATE_SLOW);
-
- if (reveal_state_ == REVEALED) {
- // Reveal was unsuccessful. Reacquire the revealed locks if appropriate.
- UpdateLocatedEventRevealedLock();
- if (immersive_focus_watcher_)
- immersive_focus_watcher_->UpdateFocusRevealedLock();
- }
- } else {
- // Stop cursor-at-top tracking.
- top_edge_hover_timer_.Stop();
- reveal_state_ = CLOSED;
-
- delegate_->OnImmersiveFullscreenExited();
- }
-
- if (enabled_) {
- UMA_HISTOGRAM_ENUMERATION("Ash.ImmersiveFullscreen.WindowType", window_type,
- WINDOW_TYPE_COUNT);
- }
-}
-
-bool ImmersiveFullscreenController::IsEnabled() const {
- return enabled_;
-}
-
-bool ImmersiveFullscreenController::IsRevealed() const {
- return enabled_ && reveal_state_ != CLOSED;
-}
-
-ImmersiveRevealedLock* ImmersiveFullscreenController::GetRevealedLock(
- AnimateReveal animate_reveal) {
- return new ImmersiveRevealedLock(weak_ptr_factory_.GetWeakPtr(),
- animate_reveal);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-void ImmersiveFullscreenController::OnMouseEvent(
- const ui::MouseEvent& event,
- const gfx::Point& location_in_screen,
- views::Widget* target) {
- if (!enabled_)
- return;
-
- if (event.type() != ui::ET_MOUSE_MOVED &&
- event.type() != ui::ET_MOUSE_PRESSED &&
- event.type() != ui::ET_MOUSE_RELEASED &&
- event.type() != ui::ET_MOUSE_CAPTURE_CHANGED) {
- return;
- }
-
- // Mouse hover can initiate revealing the top-of-window views while |widget_|
- // is inactive.
-
- if (reveal_state_ == SLIDING_OPEN || reveal_state_ == REVEALED) {
- top_edge_hover_timer_.Stop();
- UpdateLocatedEventRevealedLock(&event, location_in_screen);
- } else if (event.type() != ui::ET_MOUSE_CAPTURE_CHANGED) {
- // Trigger a reveal if the cursor pauses at the top of the screen for a
- // while.
- UpdateTopEdgeHoverTimer(event, location_in_screen, target);
- }
-}
-
-void ImmersiveFullscreenController::OnTouchEvent(
- const ui::TouchEvent& event,
- const gfx::Point& location_in_screen) {
- if (!enabled_ || event.type() != ui::ET_TOUCH_PRESSED)
- return;
-
- // Touch should not initiate revealing the top-of-window views while |widget_|
- // is inactive.
- if (!widget_->IsActive())
- return;
-
- UpdateLocatedEventRevealedLock(&event, location_in_screen);
-}
-
-void ImmersiveFullscreenController::OnGestureEvent(
- ui::GestureEvent* event,
- const gfx::Point& location_in_screen) {
- if (!enabled_)
- return;
-
- // Touch gestures should not initiate revealing the top-of-window views while
- // |widget_| is inactive.
- if (!widget_->IsActive())
- return;
-
- switch (event->type()) {
- case ui::ET_GESTURE_SCROLL_BEGIN:
- if (ShouldHandleGestureEvent(location_in_screen)) {
- gesture_begun_ = true;
- // Do not consume the event. Otherwise, we end up consuming all
- // ui::ET_GESTURE_SCROLL_BEGIN events in the top-of-window views
- // when the top-of-window views are revealed.
- }
- break;
- case ui::ET_GESTURE_SCROLL_UPDATE:
- if (gesture_begun_) {
- if (UpdateRevealedLocksForSwipe(GetSwipeType(*event)))
- event->SetHandled();
- gesture_begun_ = false;
- }
- break;
- case ui::ET_GESTURE_SCROLL_END:
- case ui::ET_SCROLL_FLING_START:
- gesture_begun_ = false;
- break;
- default:
- break;
- }
-}
-
-void ImmersiveFullscreenController::OnPointerEventObserved(
- const ui::PointerEvent& event,
- const gfx::Point& location_in_screen,
- views::Widget* target) {
- if (event.IsMousePointerEvent()) {
- const ui::MouseEvent mouse_event(event);
- OnMouseEvent(mouse_event, location_in_screen, target);
- } else {
- DCHECK(event.IsTouchPointerEvent());
- const ui::TouchEvent touch_event(event);
- OnTouchEvent(touch_event, location_in_screen);
- }
-}
-
-void ImmersiveFullscreenController::OnMouseCaptureChanged() {
- const ui::MouseEvent event(ui::ET_MOUSE_CAPTURE_CHANGED, gfx::Point(),
- gfx::Point(), ui::EventTimeForNow(), 0, 0);
- OnMouseEvent(event, display::Screen::GetScreen()->GetCursorScreenPoint(),
- nullptr);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// views::WidgetObserver overrides:
-
-void ImmersiveFullscreenController::OnWidgetDestroying(views::Widget* widget) {
- EnableWindowObservers(false);
- widget_window_ = nullptr;
-
- // Set |enabled_| to false such that any calls to MaybeStartReveal() and
- // MaybeEndReveal() have no effect.
- enabled_ = false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// gfx::AnimationDelegate overrides:
-
-void ImmersiveFullscreenController::AnimationEnded(
- const gfx::Animation* animation) {
- if (reveal_state_ == SLIDING_OPEN) {
- OnSlideOpenAnimationCompleted();
- } else if (reveal_state_ == SLIDING_CLOSED) {
- OnSlideClosedAnimationCompleted();
- }
-}
-
-void ImmersiveFullscreenController::AnimationProgressed(
- const gfx::Animation* animation) {
- delegate_->SetVisibleFraction(animation->GetCurrentValue());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ImmersiveRevealedLock::Delegate overrides:
-
-void ImmersiveFullscreenController::LockRevealedState(
- AnimateReveal animate_reveal) {
- ++revealed_lock_count_;
- Animate animate =
- (animate_reveal == ANIMATE_REVEAL_YES) ? ANIMATE_FAST : ANIMATE_NO;
- MaybeStartReveal(animate);
-}
-
-void ImmersiveFullscreenController::UnlockRevealedState() {
- --revealed_lock_count_;
- DCHECK_GE(revealed_lock_count_, 0);
- if (revealed_lock_count_ == 0) {
- // Always animate ending the reveal fast.
- MaybeEndReveal(ANIMATE_FAST);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// private:
-
-void ImmersiveFullscreenController::EnableWindowObservers(bool enable) {
- if (observers_enabled_ == enable)
- return;
- observers_enabled_ = enable;
-
- if (enable) {
- immersive_focus_watcher_ =
- ImmersiveHandlerFactory::Get()->CreateFocusWatcher(this);
- immersive_gesture_handler_ =
- ImmersiveHandlerFactory::Get()->CreateGestureHandler(this);
- widget_->AddObserver(this);
- const bool wants_moves = true;
- ImmersiveContext::Get()->AddPointerWatcher(this, wants_moves);
- } else {
- ImmersiveContext::Get()->RemovePointerWatcher(this);
- widget_->RemoveObserver(this);
- immersive_gesture_handler_.reset();
- immersive_focus_watcher_.reset();
-
- animation_->Stop();
- }
-}
-
-void ImmersiveFullscreenController::UpdateTopEdgeHoverTimer(
- const ui::MouseEvent& event,
- const gfx::Point& location_in_screen,
- views::Widget* target) {
- DCHECK(enabled_);
- DCHECK(reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED);
-
- // Check whether |widget_| is the event target instead of checking for
- // activation. This allows the timer to be started when |widget_| is inactive
- // but prevents starting the timer if the mouse is over a portion of the top
- // edge obscured by an unrelated widget.
- if (!top_edge_hover_timer_.IsRunning() && target != widget_) {
- return;
- }
-
- // Mouse hover should not initiate revealing the top-of-window views while a
- // window has mouse capture.
- if (ImmersiveContext::Get()->DoesAnyWindowHaveCapture())
- return;
-
- if (ShouldIgnoreMouseEventAtLocation(location_in_screen))
- return;
-
- // Stop the timer if the cursor left the top edge or is on a different
- // display.
- gfx::Rect hit_bounds_in_screen = GetDisplayBoundsInScreen();
- hit_bounds_in_screen.set_height(kMouseRevealBoundsHeight);
- if (!hit_bounds_in_screen.Contains(location_in_screen)) {
- top_edge_hover_timer_.Stop();
- return;
- }
-
- // The cursor is now at the top of the screen. Consider the cursor "not
- // moving" even if it moves a little bit because users don't have perfect
- // pointing precision. (The y position is not tested because
- // |hit_bounds_in_screen| is short.)
- if (top_edge_hover_timer_.IsRunning() &&
- abs(location_in_screen.x() - mouse_x_when_hit_top_in_screen_) <=
- kMouseRevealXThresholdPixels)
- return;
-
- // Start the reveal if the cursor doesn't move for some amount of time.
- mouse_x_when_hit_top_in_screen_ = location_in_screen.x();
- top_edge_hover_timer_.Stop();
- // Timer is stopped when |this| is destroyed, hence Unretained() is safe.
- top_edge_hover_timer_.Start(
- FROM_HERE, base::TimeDelta::FromMilliseconds(kMouseRevealDelayMs),
- base::Bind(
- &ImmersiveFullscreenController::AcquireLocatedEventRevealedLock,
- base::Unretained(this)));
-}
-
-void ImmersiveFullscreenController::UpdateLocatedEventRevealedLock(
- const ui::LocatedEvent* event,
- const gfx::Point& location_in_screen) {
- if (!enabled_)
- return;
- DCHECK(!event || event->IsMouseEvent() || event->IsTouchEvent());
-
- // Neither the mouse nor touch can initiate a reveal when the top-of-window
- // views are sliding closed or are closed with the following exceptions:
- // - Hovering at y = 0 which is handled in OnMouseEvent().
- // - Doing a SWIPE_OPEN edge gesture which is handled in OnGestureEvent().
- if (reveal_state_ == CLOSED || reveal_state_ == SLIDING_CLOSED)
- return;
-
- // For the sake of simplicity, ignore |widget_|'s activation in computing
- // whether the top-of-window views should stay revealed. Ideally, the
- // top-of-window views would stay revealed only when the mouse cursor is
- // hovered above a non-obscured portion of the top-of-window views. The
- // top-of-window views may be partially obscured when |widget_| is inactive.
-
- // Ignore all events while a window has capture. This keeps the top-of-window
- // views revealed during a drag.
- if (ImmersiveContext::Get()->DoesAnyWindowHaveCapture())
- return;
-
- if ((!event || event->IsMouseEvent()) &&
- ShouldIgnoreMouseEventAtLocation(location_in_screen)) {
- return;
- }
-
- // The visible bounds of |top_container_| should be contained in
- // |hit_bounds_in_screen|.
- std::vector<gfx::Rect> hit_bounds_in_screen =
- delegate_->GetVisibleBoundsInScreen();
- bool keep_revealed = false;
- for (size_t i = 0; i < hit_bounds_in_screen.size(); ++i) {
- // Allow the cursor to move slightly off the top-of-window views before
- // sliding closed. In the case of ImmersiveModeControllerAsh, this helps
- // when the user is attempting to click on the bookmark bar and overshoots
- // slightly.
- if (event && event->type() == ui::ET_MOUSE_MOVED) {
- const int kBoundsOffsetY = 8;
- hit_bounds_in_screen[i].Inset(0, 0, 0, -kBoundsOffsetY);
- }
-
- if (hit_bounds_in_screen[i].Contains(location_in_screen)) {
- keep_revealed = true;
- break;
- }
- }
-
- if (keep_revealed)
- AcquireLocatedEventRevealedLock();
- else
- located_event_revealed_lock_.reset();
-}
-
-void ImmersiveFullscreenController::UpdateLocatedEventRevealedLock() {
- if (!ImmersiveContext::Get()->IsMouseEventsEnabled()) {
- // If mouse events are disabled, the user's last interaction was probably
- // via touch. Do no do further processing in this case as there is no easy
- // way of retrieving the position of the user's last touch.
- return;
- }
- UpdateLocatedEventRevealedLock(
- nullptr, display::Screen::GetScreen()->GetCursorScreenPoint());
-}
-
-void ImmersiveFullscreenController::AcquireLocatedEventRevealedLock() {
- // CAUTION: Acquiring the lock results in a reentrant call to
- // AcquireLocatedEventRevealedLock() when
- // |ImmersiveFullscreenController::animations_disabled_for_test_| is true.
- if (!located_event_revealed_lock_.get())
- located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES));
-}
-
-bool ImmersiveFullscreenController::UpdateRevealedLocksForSwipe(
- SwipeType swipe_type) {
- if (!enabled_ || swipe_type == SWIPE_NONE)
- return false;
-
- // Swipes while |widget_| is inactive should have been filtered out in
- // OnGestureEvent().
- DCHECK(widget_->IsActive());
-
- if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) {
- if (swipe_type == SWIPE_OPEN && !located_event_revealed_lock_.get()) {
- located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES));
- return true;
- }
- } else {
- if (swipe_type == SWIPE_CLOSE) {
- // Attempt to end the reveal. If other code is holding onto a lock, the
- // attempt will be unsuccessful.
- located_event_revealed_lock_.reset();
- if (immersive_focus_watcher_)
- immersive_focus_watcher_->ReleaseLock();
-
- if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) {
- widget_->GetFocusManager()->ClearFocus();
- return true;
- }
-
- // Ending the reveal was unsuccessful. Reaquire the locks if appropriate.
- UpdateLocatedEventRevealedLock();
- if (immersive_focus_watcher_)
- immersive_focus_watcher_->UpdateFocusRevealedLock();
- }
- }
- return false;
-}
-
-int ImmersiveFullscreenController::GetAnimationDuration(Animate animate) const {
- switch (animate) {
- case ANIMATE_NO:
- return 0;
- case ANIMATE_SLOW:
- return kRevealSlowAnimationDurationMs;
- case ANIMATE_FAST:
- return kRevealFastAnimationDurationMs;
- }
- NOTREACHED();
- return 0;
-}
-
-void ImmersiveFullscreenController::MaybeStartReveal(Animate animate) {
- if (!enabled_)
- return;
-
- if (animations_disabled_for_test_)
- animate = ANIMATE_NO;
-
- // Callers with ANIMATE_NO expect this function to synchronously reveal the
- // top-of-window views.
- if (reveal_state_ == REVEALED ||
- (reveal_state_ == SLIDING_OPEN && animate != ANIMATE_NO)) {
- return;
- }
-
- RevealState previous_reveal_state = reveal_state_;
- reveal_state_ = SLIDING_OPEN;
- if (previous_reveal_state == CLOSED) {
- delegate_->OnImmersiveRevealStarted();
-
- // Do not do any more processing if OnImmersiveRevealStarted() changed
- // |reveal_state_|.
- if (reveal_state_ != SLIDING_OPEN)
- return;
- }
- // Slide in the reveal view.
- if (animate == ANIMATE_NO) {
- animation_->Reset(1);
- OnSlideOpenAnimationCompleted();
- } else {
- animation_->SetSlideDuration(GetAnimationDuration(animate));
- animation_->Show();
- }
-}
-
-void ImmersiveFullscreenController::OnSlideOpenAnimationCompleted() {
- DCHECK_EQ(SLIDING_OPEN, reveal_state_);
- reveal_state_ = REVEALED;
- delegate_->SetVisibleFraction(1);
-
- // The user may not have moved the mouse since the reveal was initiated.
- // Update the revealed lock to reflect the mouse's current state.
- UpdateLocatedEventRevealedLock();
-}
-
-void ImmersiveFullscreenController::MaybeEndReveal(Animate animate) {
- if (!enabled_ || revealed_lock_count_ != 0)
- return;
-
- if (animations_disabled_for_test_)
- animate = ANIMATE_NO;
-
- // Callers with ANIMATE_NO expect this function to synchronously close the
- // top-of-window views.
- if (reveal_state_ == CLOSED ||
- (reveal_state_ == SLIDING_CLOSED && animate != ANIMATE_NO)) {
- return;
- }
-
- reveal_state_ = SLIDING_CLOSED;
- int duration_ms = GetAnimationDuration(animate);
- if (duration_ms > 0) {
- animation_->SetSlideDuration(duration_ms);
- animation_->Hide();
- } else {
- animation_->Reset(0);
- OnSlideClosedAnimationCompleted();
- }
-}
-
-void ImmersiveFullscreenController::OnSlideClosedAnimationCompleted() {
- DCHECK_EQ(SLIDING_CLOSED, reveal_state_);
- reveal_state_ = CLOSED;
- delegate_->OnImmersiveRevealEnded();
-}
-
-ImmersiveFullscreenController::SwipeType
-ImmersiveFullscreenController::GetSwipeType(
- const ui::GestureEvent& event) const {
- if (event.type() != ui::ET_GESTURE_SCROLL_UPDATE)
- return SWIPE_NONE;
- // Make sure that it is a clear vertical gesture.
- if (std::abs(event.details().scroll_y()) <=
- kSwipeVerticalThresholdMultiplier * std::abs(event.details().scroll_x()))
- return SWIPE_NONE;
- if (event.details().scroll_y() < 0)
- return SWIPE_CLOSE;
- if (event.details().scroll_y() > 0)
- return SWIPE_OPEN;
- return SWIPE_NONE;
-}
-
-bool ImmersiveFullscreenController::ShouldIgnoreMouseEventAtLocation(
- const gfx::Point& location) const {
- // Ignore mouse events in the region immediately above the top edge of the
- // display. This is to handle the case of a user with a vertical display
- // layout (primary display above/below secondary display) and the immersive
- // fullscreen window on the bottom display. It is really hard to trigger a
- // reveal in this case because:
- // - It is hard to stop the cursor in the top |kMouseRevealBoundsHeight|
- // pixels of the bottom display.
- // - The cursor is warped to the top display if the cursor gets to the top
- // edge of the bottom display.
- // Mouse events are ignored in the bottom few pixels of the top display
- // (Mouse events in this region cannot start or end a reveal). This allows a
- // user to overshoot the top of the bottom display and still reveal the
- // top-of-window views.
- gfx::Rect dead_region = GetDisplayBoundsInScreen();
- dead_region.set_y(dead_region.y() - kHeightOfDeadRegionAboveTopContainer);
- dead_region.set_height(kHeightOfDeadRegionAboveTopContainer);
- return dead_region.Contains(location);
-}
-
-bool ImmersiveFullscreenController::ShouldHandleGestureEvent(
- const gfx::Point& location) const {
- DCHECK(widget_->IsActive());
- if (reveal_state_ == REVEALED) {
- std::vector<gfx::Rect> hit_bounds_in_screen(
- delegate_->GetVisibleBoundsInScreen());
- for (size_t i = 0; i < hit_bounds_in_screen.size(); ++i) {
- if (hit_bounds_in_screen[i].Contains(location))
- return true;
- }
- return false;
- }
-
- // When the top-of-window views are not fully revealed, handle gestures which
- // start in the top few pixels of the screen.
- gfx::Rect hit_bounds_in_screen(GetDisplayBoundsInScreen());
- hit_bounds_in_screen.set_height(kImmersiveFullscreenTopEdgeInset);
- if (hit_bounds_in_screen.Contains(location))
- return true;
-
- // There may be a bezel sensor off screen logically above
- // |hit_bounds_in_screen|. The check for the event not contained by the
- // closest screen ensures that the event is from a valid bezel (as opposed to
- // another screen in an extended desktop).
- gfx::Rect screen_bounds =
- display::Screen::GetScreen()->GetDisplayNearestPoint(location).bounds();
- return (!screen_bounds.Contains(location) &&
- location.y() < hit_bounds_in_screen.y() &&
- location.x() >= hit_bounds_in_screen.x() &&
- location.x() < hit_bounds_in_screen.right());
-}
-
-gfx::Rect ImmersiveFullscreenController::GetDisplayBoundsInScreen() const {
- return ImmersiveContext::Get()->GetDisplayBoundsInScreen(widget_);
-}
-
-} // namespace ash
« no previous file with comments | « ash/wm/immersive_fullscreen_controller.h ('k') | ash/wm/immersive_fullscreen_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698