| Index: ash/display/mouse_cursor_event_filter.h
|
| diff --git a/ash/display/mouse_cursor_event_filter.h b/ash/display/mouse_cursor_event_filter.h
|
| index e7201ed9c32c25a34e7ce25aa308e681cb7dcc0b..3c5304f3475e0668604d699d4145e9745f58b0ef 100644
|
| --- a/ash/display/mouse_cursor_event_filter.h
|
| +++ b/ash/display/mouse_cursor_event_filter.h
|
| @@ -6,6 +6,7 @@
|
| #define ASH_DISPLAY_MOUSE_CURSOR_EVENT_FILTER_H
|
|
|
| #include "ash/ash_export.h"
|
| +#include "ash/display/display_controller.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/gtest_prod_util.h"
|
| #include "base/memory/scoped_ptr.h"
|
| @@ -18,13 +19,15 @@ class Window;
|
| }
|
|
|
| namespace ash {
|
| -class DisplayController;
|
| class SharedDisplayEdgeIndicator;
|
|
|
| // An event filter that controls mouse location in extended desktop
|
| // environment.
|
| -class ASH_EXPORT MouseCursorEventFilter : public ui::EventHandler {
|
| +class ASH_EXPORT MouseCursorEventFilter : public ui::EventHandler,
|
| + public DisplayController::Observer {
|
| public:
|
| + static bool IsMouseWarpInNativeCoordsEnabled();
|
| +
|
| enum MouseWarpMode {
|
| WARP_ALWAYS, // Always warp the mouse when possible.
|
| WARP_DRAG, // Used when dragging a window. Top and bottom
|
| @@ -42,10 +45,14 @@ class ASH_EXPORT MouseCursorEventFilter : public ui::EventHandler {
|
|
|
| // Shows/Hide the indicator for window dragging. The |from|
|
| // is the window where the dragging started.
|
| - void ShowSharedEdgeIndicator(const aura::Window* from);
|
| + void ShowSharedEdgeIndicator(aura::Window* from);
|
| void HideSharedEdgeIndicator();
|
|
|
| - // Overridden from ui::EventHandler:
|
| + // DisplayController::Observer:
|
| + virtual void OnDisplaysInitialized() OVERRIDE;
|
| + virtual void OnDisplayConfigurationChanged() OVERRIDE;
|
| +
|
| + // ui::EventHandler:
|
| virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
|
|
|
| private:
|
| @@ -59,20 +66,39 @@ class ASH_EXPORT MouseCursorEventFilter : public ui::EventHandler {
|
| IndicatorBoundsTestOnLeft);
|
| FRIEND_TEST_ALL_PREFIXES(MouseCursorEventFilterTest,
|
| IndicatorBoundsTestOnTopBottom);
|
| - FRIEND_TEST_ALL_PREFIXES(DragWindowResizerTest, WarpMousePointer);
|
| + FRIEND_TEST_ALL_PREFIXES(MouseCursorEventFilterTest,
|
| + WarpMouseDifferentScaleDisplaysInNative);
|
|
|
| - void reset_was_mouse_warped_for_test() { was_mouse_warped_ = false; }
|
| + FRIEND_TEST_ALL_PREFIXES(DragWindowResizerTest, WarpMousePointer);
|
|
|
| // Warps the mouse cursor to an alternate root window when the
|
| - // |point_in_screen|, which is the location of the mouse cursor,
|
| - // hits or exceeds the edge of the |target_root| and the mouse cursor
|
| - // is considered to be in an alternate display. Returns true if
|
| - // the cursor was moved.
|
| - bool WarpMouseCursorIfNecessary(aura::Window* target_root,
|
| - const gfx::Point& point_in_screen);
|
| + // mouse location in |event|, hits the edge of the event target's root and
|
| + // the mouse cursor is considered to be in an alternate display.
|
| + // Returns true if/ the cursor was moved.
|
| + bool WarpMouseCursorIfNecessary(ui::MouseEvent* event);
|
| +
|
| + bool WarpMouseCursorInNativeCoords(const gfx::Point& point_in_native,
|
| + const gfx::Point& point_in_screen);
|
| + bool WarpMouseCursorInScreenCoords(aura::Window* target_root,
|
| + const gfx::Point& point_in_screen);
|
| +
|
| + // Update the edge/indicator bounds based on the current
|
| + // display configuration.
|
| + void UpdateHorizontalEdgeBounds();
|
| + void UpdateVerticalEdgeBounds();
|
| +
|
| + // Returns the source and destination window. When the
|
| + // mouse_warp_mode_ is WARP_DRAG, src_window is the root window
|
| + // where the drag starts. When the mouse_warp_mode_ is WARP_ALWAYS,
|
| + // the src_window is always the primary root window, because there
|
| + // is no difference between moving src to dst and moving dst to src.
|
| + void GetSrcAndDstRootWindows(aura::Window** src_window,
|
| + aura::Window** dst_window);
|
| +
|
| + void reset_was_mouse_warped_for_test() { was_mouse_warped_ = false; }
|
|
|
| - void UpdateHorizontalIndicatorWindowBounds();
|
| - void UpdateVerticalIndicatorWindowBounds();
|
| + bool WarpMouseCursorIfNecessaryForTest(aura::Window* target_root,
|
| + const gfx::Point& point_in_screen);
|
|
|
| MouseWarpMode mouse_warp_mode_;
|
|
|
| @@ -85,8 +111,11 @@ class ASH_EXPORT MouseCursorEventFilter : public ui::EventHandler {
|
| gfx::Rect src_indicator_bounds_;
|
| gfx::Rect dst_indicator_bounds_;
|
|
|
| + gfx::Rect src_edge_bounds_in_native_;
|
| + gfx::Rect dst_edge_bounds_in_native_;
|
| +
|
| // The root window in which the dragging started.
|
| - const aura::Window* drag_source_root_;
|
| + aura::Window* drag_source_root_;
|
|
|
| float scale_when_drag_started_;
|
|
|
|
|