Index: ash/wm/workspace/multi_window_resize_controller.cc |
diff --git a/ash/wm/workspace/multi_window_resize_controller.cc b/ash/wm/workspace/multi_window_resize_controller.cc |
index a94da55e2f04f09c14f817439960cec1d86f9849..aa23b1674d72d54256a932af53e139c9dda96c7e 100644 |
--- a/ash/wm/workspace/multi_window_resize_controller.cc |
+++ b/ash/wm/workspace/multi_window_resize_controller.cc |
@@ -4,12 +4,14 @@ |
#include "ash/wm/workspace/multi_window_resize_controller.h" |
+#include "ash/screen_ash.h" |
#include "ash/shell.h" |
#include "ash/shell_window_ids.h" |
#include "ash/wm/window_animations.h" |
#include "ash/wm/workspace/workspace_event_filter.h" |
#include "ash/wm/workspace/workspace_window_resizer.h" |
#include "grit/ui_resources.h" |
+#include "ui/aura/client/screen_position_client.h" |
#include "ui/aura/event_filter.h" |
#include "ui/aura/root_window.h" |
#include "ui/aura/shared/compound_event_filter.h" |
@@ -118,9 +120,9 @@ class MultiWindowResizeController::ResizeMouseWatcherHost : |
ResizeMouseWatcherHost(MultiWindowResizeController* host) : host_(host) {} |
// MouseWatcherHost overrides: |
- virtual bool Contains(const gfx::Point& screen_point, |
+ virtual bool Contains(const gfx::Point& point_in_screen, |
MouseEventType type) OVERRIDE { |
- return host_->IsOverWindows(screen_point); |
+ return host_->IsOverWindows(point_in_screen); |
} |
private: |
@@ -156,7 +158,7 @@ MultiWindowResizeController::~MultiWindowResizeController() { |
void MultiWindowResizeController::Show(Window* window, |
int component, |
- const gfx::Point& point) { |
+ const gfx::Point& point_in_window) { |
// When the resize widget is showing we ignore Show() requests. Instead we |
// only care about mouse movements from MouseWatcher. This is necessary as |
// WorkspaceEventFilter only sees mouse movements over the windows, not all |
@@ -164,7 +166,7 @@ void MultiWindowResizeController::Show(Window* window, |
if (resize_widget_) |
return; |
- ResizeWindows windows(DetermineWindows(window, component, point)); |
+ ResizeWindows windows(DetermineWindows(window, component, point_in_window)); |
if (IsShowing()) { |
if (windows_.Equals(windows)) |
return; // Over the same windows. |
@@ -177,8 +179,9 @@ void MultiWindowResizeController::Show(Window* window, |
windows_ = windows; |
windows_.window1->AddObserver(this); |
windows_.window2->AddObserver(this); |
- show_location_ = point; |
- Window::ConvertPointToWindow(window, window->parent(), &show_location_); |
+ show_location_in_parent_ = point_in_window; |
+ Window::ConvertPointToWindow( |
+ window, window->parent(), &show_location_in_parent_); |
if (show_timer_.IsRunning()) |
return; |
show_timer_.Start(FROM_HERE, |
@@ -369,8 +372,10 @@ void MultiWindowResizeController::ShowNow() { |
WINDOW_VISIBILITY_ANIMATION_TYPE_FADE); |
resize_widget_->GetNativeWindow()->SetName("MultiWindowResizeController"); |
resize_widget_->SetContentsView(view); |
- show_bounds_ = CalculateResizeWidgetBounds(show_location_); |
- resize_widget_->SetBounds(show_bounds_); |
+ show_bounds_in_screen_ = ScreenAsh::ConvertRectToScreen( |
+ windows_.window1->parent(), |
+ CalculateResizeWidgetBounds(show_location_in_parent_)); |
+ resize_widget_->SetBounds(show_bounds_in_screen_); |
resize_widget_->Show(); |
mouse_watcher_.reset(new views::MouseWatcher( |
new ResizeMouseWatcherHost(this), |
@@ -385,14 +390,13 @@ bool MultiWindowResizeController::IsShowing() const { |
} |
void MultiWindowResizeController::StartResize( |
- const gfx::Point& screen_location) { |
+ const gfx::Point& location_in_screen) { |
DCHECK(!window_resizer_.get()); |
DCHECK(windows_.is_valid()); |
hide_timer_.Stop(); |
- gfx::Point parent_location(screen_location); |
- aura::Window::ConvertPointToWindow( |
- windows_.window1->GetRootWindow(), windows_.window1->parent(), |
- &parent_location); |
+ gfx::Point location_in_parent(location_in_screen); |
+ aura::client::GetScreenPositionClient(windows_.window2->GetRootWindow())-> |
+ ConvertPointFromScreen(windows_.window2->parent(), &location_in_parent); |
std::vector<aura::Window*> windows; |
windows.push_back(windows_.window2); |
FindWindowsTouching(windows_.window2, windows_.direction, |
@@ -403,21 +407,23 @@ void MultiWindowResizeController::StartResize( |
} |
int component = windows_.direction == LEFT_RIGHT ? HTRIGHT : HTBOTTOM; |
window_resizer_.reset(WorkspaceWindowResizer::Create( |
- windows_.window1, parent_location, component, windows)); |
+ windows_.window1, location_in_parent, component, windows)); |
} |
-void MultiWindowResizeController::Resize(const gfx::Point& screen_location, |
+void MultiWindowResizeController::Resize(const gfx::Point& location_in_screen, |
int event_flags) { |
- gfx::Point parent_location(screen_location); |
- aura::Window::ConvertPointToWindow(windows_.window1->GetRootWindow(), |
- windows_.window1->parent(), |
- &parent_location); |
- window_resizer_->Drag(parent_location, event_flags); |
- gfx::Rect bounds = CalculateResizeWidgetBounds(parent_location); |
+ gfx::Point location_in_parent(location_in_screen); |
+ aura::client::GetScreenPositionClient(windows_.window1->GetRootWindow())-> |
+ ConvertPointFromScreen(windows_.window1->parent(), &location_in_parent); |
+ window_resizer_->Drag(location_in_parent, event_flags); |
+ gfx::Rect bounds = ScreenAsh::ConvertRectToScreen( |
+ windows_.window1->parent(), |
+ CalculateResizeWidgetBounds(location_in_parent)); |
+ |
if (windows_.direction == LEFT_RIGHT) |
- bounds.set_y(show_bounds_.y()); |
+ bounds.set_y(show_bounds_in_screen_.y()); |
else |
- bounds.set_x(show_bounds_.x()); |
+ bounds.set_x(show_bounds_in_screen_.x()); |
resize_widget_->SetBounds(bounds); |
} |
@@ -440,21 +446,21 @@ void MultiWindowResizeController::CancelResize() { |
} |
gfx::Rect MultiWindowResizeController::CalculateResizeWidgetBounds( |
- const gfx::Point& location) const { |
+ const gfx::Point& location_in_parent) const { |
gfx::Size pref = resize_widget_->GetContentsView()->GetPreferredSize(); |
int x = 0, y = 0; |
if (windows_.direction == LEFT_RIGHT) { |
x = windows_.window1->bounds().right() - pref.width() / 2; |
- y = location.y() + kResizeWidgetPadding; |
+ y = location_in_parent.y() + kResizeWidgetPadding; |
if (y + pref.height() / 2 > windows_.window1->bounds().bottom() && |
y + pref.height() / 2 > windows_.window2->bounds().bottom()) { |
- y = location.y() - kResizeWidgetPadding - pref.height(); |
+ y = location_in_parent.y() - kResizeWidgetPadding - pref.height(); |
} |
} else { |
- x = location.x() + kResizeWidgetPadding; |
+ x = location_in_parent.x() + kResizeWidgetPadding; |
if (x + pref.height() / 2 > windows_.window1->bounds().right() && |
x + pref.height() / 2 > windows_.window2->bounds().right()) { |
- x = location.x() - kResizeWidgetPadding - pref.width(); |
+ x = location_in_parent.x() - kResizeWidgetPadding - pref.width(); |
} |
y = windows_.window1->bounds().bottom() - pref.height() / 2; |
} |
@@ -462,11 +468,11 @@ gfx::Rect MultiWindowResizeController::CalculateResizeWidgetBounds( |
} |
bool MultiWindowResizeController::IsOverWindows( |
- const gfx::Point& screen_location) const { |
+ const gfx::Point& location_in_screen) const { |
if (window_resizer_.get()) |
return true; // Ignore hides while actively resizing. |
- if (resize_widget_->GetWindowBoundsInScreen().Contains(screen_location)) |
+ if (resize_widget_->GetWindowBoundsInScreen().Contains(location_in_screen)) |
return true; |
int hit1, hit2; |
@@ -478,18 +484,18 @@ bool MultiWindowResizeController::IsOverWindows( |
hit2 = HTLEFT; |
} |
- return IsOverWindow(windows_.window1, screen_location, hit1) || |
- IsOverWindow(windows_.window2, screen_location, hit2); |
+ return IsOverWindow(windows_.window1, location_in_screen, hit1) || |
+ IsOverWindow(windows_.window2, location_in_screen, hit2); |
} |
bool MultiWindowResizeController::IsOverWindow( |
aura::Window* window, |
- const gfx::Point& screen_location, |
+ const gfx::Point& location_in_screen, |
int component) const { |
if (!window->delegate()) |
return false; |
- gfx::Point window_loc(screen_location); |
+ gfx::Point window_loc(location_in_screen); |
aura::Window::ConvertPointToWindow( |
window->GetRootWindow(), window, &window_loc); |
return window->HitTest(window_loc) && |