Chromium Code Reviews| Index: ash/wm/window_resizer.cc |
| diff --git a/ash/wm/window_resizer.cc b/ash/wm/window_resizer.cc |
| index 1609c3d41e1eb3cdee17d0df91a893c394243d6f..16748027cba9500ec90ae9d745580ca8ea1a3900 100644 |
| --- a/ash/wm/window_resizer.cc |
| +++ b/ash/wm/window_resizer.cc |
| @@ -8,11 +8,14 @@ |
| #include "ash/wm/window_positioning_utils.h" |
| #include "ash/wm/window_state.h" |
| #include "ash/wm_window.h" |
| +#include "ui/aura/window.h" |
| +#include "ui/aura/window_delegate.h" |
| #include "ui/base/hit_test.h" |
| #include "ui/base/ui_base_types.h" |
| #include "ui/display/display.h" |
| #include "ui/display/screen.h" |
| #include "ui/gfx/geometry/rect.h" |
| +#include "ui/wm/core/coordinate_conversion.h" |
| namespace ash { |
| @@ -103,6 +106,10 @@ int WindowResizer::GetPositionChangeDirectionForWindowComponent( |
| return pos_change_direction; |
| } |
| +aura::Window* WindowResizer::GetTarget() const { |
| + return window_state_ ? window_state_->window()->aura_window() : nullptr; |
| +} |
| + |
| gfx::Rect WindowResizer::CalculateBoundsForDrag( |
| const gfx::Point& passed_location) { |
| if (!details().is_resizable) |
| @@ -125,8 +132,10 @@ gfx::Rect WindowResizer::CalculateBoundsForDrag( |
| // has to come first since it might have an impact on the origin as well as |
| // on the size. |
| if (details().bounds_change & kBoundsChange_Resizes) { |
| - gfx::Rect work_area = GetTarget()->GetDisplayNearestWindow().work_area(); |
| - work_area = GetTarget()->GetParent()->ConvertRectFromScreen(work_area); |
| + gfx::Rect work_area = display::Screen::GetScreen() |
| + ->GetDisplayNearestWindow(GetTarget()) |
| + .work_area(); |
| + ::wm::ConvertRectFromScreen(GetTarget()->parent(), &work_area); |
| if (details().size_change_direction & kBoundsChangeDirection_Horizontal) { |
| if (IsRightEdge(details().window_component) && |
| new_bounds.right() < work_area.x() + wm::kMinimumOnScreenArea) { |
| @@ -180,9 +189,9 @@ gfx::Rect WindowResizer::CalculateBoundsForDrag( |
| // Make sure that |new_bounds| doesn't leave any of the displays. Note that |
| // the |work_area| above isn't good for this check since it is the work area |
| // for the current display but the window can move to a different one. |
| - WmWindow* parent = GetTarget()->GetParent(); |
| - gfx::Point passed_location_in_screen( |
| - parent->ConvertPointToScreen(passed_location)); |
| + aura::Window* parent = GetTarget()->parent(); |
| + gfx::Point passed_location_in_screen(passed_location); |
| + ::wm::ConvertPointToScreen(parent, &passed_location_in_screen); |
| gfx::Rect near_passed_location(passed_location_in_screen, gfx::Size()); |
| // Use a pointer location (matching the logic in DragWindowResizer) to |
| // calculate the target display after the drag. |
| @@ -190,13 +199,15 @@ gfx::Rect WindowResizer::CalculateBoundsForDrag( |
| display::Screen::GetScreen()->GetDisplayMatching(near_passed_location); |
| gfx::Rect screen_work_area = display.work_area(); |
| screen_work_area.Inset(wm::kMinimumOnScreenArea, 0); |
| - gfx::Rect new_bounds_in_screen = parent->ConvertRectToScreen(new_bounds); |
| + gfx::Rect new_bounds_in_screen(new_bounds); |
| + ::wm::ConvertRectToScreen(parent, &new_bounds_in_screen); |
| if (!screen_work_area.Intersects(new_bounds_in_screen)) { |
| // Make sure that the x origin does not leave the current display. |
| new_bounds_in_screen.set_x(std::max( |
| screen_work_area.x() - new_bounds.width(), |
| std::min(screen_work_area.right(), new_bounds_in_screen.x()))); |
| - new_bounds = parent->ConvertRectFromScreen(new_bounds_in_screen); |
| + new_bounds = new_bounds_in_screen; |
| + ::wm::ConvertRectFromScreen(parent, &new_bounds); |
| } |
| } |
| @@ -250,7 +261,7 @@ gfx::Point WindowResizer::GetOriginForDrag(int delta_x, int delta_y) { |
| gfx::Size WindowResizer::GetSizeForDrag(int* delta_x, int* delta_y) { |
| gfx::Size size = details().initial_bounds_in_parent.size(); |
| if (details().bounds_change & kBoundsChange_Resizes) { |
| - gfx::Size min_size = GetTarget()->GetMinimumSize(); |
| + gfx::Size min_size = GetTarget()->delegate()->GetMinimumSize(); |
|
msw
2017/05/22 19:26:12
ditto test q, and could delegate() be null here? (
sky
2017/05/22 19:50:59
I was assuming this code would never hit if not re
|
| size.SetSize(GetWidthForDrag(min_size.width(), delta_x), |
| GetHeightForDrag(min_size.height(), delta_y)); |
| } else if (!details().restore_bounds.IsEmpty()) { |
| @@ -275,8 +286,11 @@ int WindowResizer::GetWidthForDrag(int min_width, int* delta_x) { |
| } |
| // And don't let the window go bigger than the display. |
| - int max_width = GetTarget()->GetDisplayNearestWindow().bounds().width(); |
| - gfx::Size max_size = GetTarget()->GetMaximumSize(); |
| + int max_width = display::Screen::GetScreen() |
| + ->GetDisplayNearestWindow(GetTarget()) |
| + .bounds() |
| + .width(); |
| + gfx::Size max_size = GetTarget()->delegate()->GetMaximumSize(); |
| if (max_size.width() != 0) |
| max_width = std::min(max_width, max_size.width()); |
| if (width > max_width) { |
| @@ -304,8 +318,11 @@ int WindowResizer::GetHeightForDrag(int min_height, int* delta_y) { |
| } |
| // And don't let the window go bigger than the display. |
| - int max_height = GetTarget()->GetDisplayNearestWindow().bounds().height(); |
| - gfx::Size max_size = GetTarget()->GetMaximumSize(); |
| + int max_height = display::Screen::GetScreen() |
| + ->GetDisplayNearestWindow(GetTarget()) |
| + .bounds() |
| + .height(); |
| + gfx::Size max_size = GetTarget()->delegate()->GetMaximumSize(); |
| if (max_size.height() != 0) |
| max_height = std::min(max_height, max_size.height()); |
| if (height > max_height) { |