Index: chrome/browser/ui/window_sizer/window_sizer.h |
diff --git a/chrome/browser/ui/window_sizer/window_sizer.h b/chrome/browser/ui/window_sizer/window_sizer.h |
index bbc69aefe8eca40be1264b98be00a8ca544a7e9a..a7a7dd017cd4d91fe66cabab081e71619de170e5 100644 |
--- a/chrome/browser/ui/window_sizer/window_sizer.h |
+++ b/chrome/browser/ui/window_sizer/window_sizer.h |
@@ -32,14 +32,18 @@ class Screen; |
class WindowSizer { |
public: |
class StateProvider; |
+ class TargetDisplayProvider; |
- // WindowSizer owns |state_provider| and will create a default |
- // MonitorInfoProvider using the physical screen. |
- WindowSizer(StateProvider* state_provider, const Browser* browser); |
+ // WindowSizer owns |state_provider| and |target_display_provider|, |
+ // and will use the platforms's gfx::Screen. |
+ WindowSizer(scoped_ptr<StateProvider> state_provider, |
+ scoped_ptr<TargetDisplayProvider> target_display_provider, |
+ const Browser* browser); |
- // WindowSizer owns |state_provider| and will use the supplied |screen|. |
- // Used only for testing. |
- WindowSizer(StateProvider* state_provider, |
+ // WindowSizer owns |state_provider| and |target_display_provider|, |
+ // and will use the supplied |screen|. Used only for testing. |
+ WindowSizer(scoped_ptr<StateProvider> state_provider, |
+ scoped_ptr<TargetDisplayProvider> target_display_provider, |
gfx::Screen* screen, |
const Browser* browser); |
@@ -69,6 +73,15 @@ class WindowSizer { |
ui::WindowShowState* show_state) const = 0; |
}; |
+ // An interface implemented by an object to identify on which |
+ // display a new window should be located. |
+ class TargetDisplayProvider { |
+ public: |
+ virtual ~TargetDisplayProvider() {} |
+ virtual gfx::Display GetTargetDisplay(const gfx::Screen* screen, |
+ const gfx::Rect& bounds) const = 0; |
+ }; |
+ |
// Determines the position and size for a window as it is created as well |
// as the initial state. This function uses several strategies to figure out |
// optimal size and placement, first looking for an existing active window, |
@@ -106,12 +119,12 @@ class WindowSizer { |
// The edge of the screen to check for out-of-bounds. |
enum Edge { TOP, LEFT, BOTTOM, RIGHT }; |
- // Gets the size and placement of the last window. Returns true if this data |
- // is valid, false if there is no last window and the application should |
+ // Gets the size and placement of the last active window. Returns true if this |
+ // data is valid, false if there is no last window and the application should |
// restore saved state from preferences using RestoreWindowPosition. |
// |show_state| will only be changed if it was set to SHOW_STATE_DEFAULT. |
- bool GetLastWindowBounds(gfx::Rect* bounds, |
- ui::WindowShowState* show_state) const; |
+ bool GetLastActiveWindowBounds(gfx::Rect* bounds, |
+ ui::WindowShowState* show_state) const; |
// Gets the size and placement of the last window in the last session, saved |
// in local state preferences. Returns true if local state exists containing |
@@ -129,18 +142,23 @@ class WindowSizer { |
gfx::Rect* default_bounds) const; |
// Adjusts |bounds| to be visible on-screen, biased toward the work area of |
- // the monitor containing |other_bounds|. Despite the name, this doesn't |
- // guarantee the bounds are fully contained within this monitor's work rect; |
+ // the |display|. Despite the name, this doesn't |
+ // guarantee the bounds are fully contained within this display's work rect; |
// it just tried to ensure the edges are visible on _some_ work rect. |
// If |saved_work_area| is non-empty, it is used to determine whether the |
// monitor configuration has changed. If it has, bounds are repositioned and |
// resized if necessary to make them completely contained in the current work |
// area. |
- void AdjustBoundsToBeVisibleOnMonitorContaining( |
- const gfx::Rect& other_bounds, |
+ void AdjustBoundsToBeVisibleOnDisplay( |
+ const gfx::Display& display, |
const gfx::Rect& saved_work_area, |
gfx::Rect* bounds) const; |
+ // Determine the target display for a new window based on |
+ // |bounds|. On ash environment, this returns the display containing |
+ // ash's the target root window. |
+ gfx::Display GetTargetDisplay(const gfx::Rect& bounds) const; |
+ |
#if defined(USE_ASH) |
// Determines the position and size for a tabbed browser window in |
// ash as it gets created. This will be called before other standard |
@@ -161,6 +179,7 @@ class WindowSizer { |
// Providers for persistent storage and monitor metrics. |
scoped_ptr<StateProvider> state_provider_; |
+ scoped_ptr<TargetDisplayProvider> target_display_provider_; |
gfx::Screen* screen_; // not owned. |
// Note that this browser handle might be NULL. |