Chromium Code Reviews| Index: ui/aura/mus/window_tree_client.cc |
| diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc |
| index 4aa192b4a4d3051afe7cf76082664ccdde6266ef..36341c452621f71f4d2eb6f0c7cc92891f18d51e 100644 |
| --- a/ui/aura/mus/window_tree_client.cc |
| +++ b/ui/aura/mus/window_tree_client.cc |
| @@ -134,10 +134,8 @@ void SetWindowTypeFromProperties( |
| } |
| // Helper function to get the device_scale_factor() of the display::Display |
| -// with |display_id|. |
| +// nearest to |window|. |
| float ScaleFactorForDisplay(Window* window) { |
| - // TODO(riajiang): Change to use display::GetDisplayWithDisplayId() after |
| - // https://codereview.chromium.org/2361283002/ is landed. |
| return display::Screen::GetScreen() |
| ->GetDisplayNearestWindow(window) |
| .device_scale_factor(); |
| @@ -426,7 +424,8 @@ WindowMus* WindowTreeClient::NewWindowFromWindowData( |
| SetWindowTypeFromProperties(window, window_data.properties); |
| window->Init(ui::LAYER_NOT_DRAWN); |
| SetLocalPropertiesFromServerProperties(window_mus, window_data); |
| - window_mus->SetBoundsFromServer(window_data.bounds); |
| + window_mus->SetBoundsFromServer( |
| + gfx::ConvertRectToDIP(ScaleFactorForDisplay(window), window_data.bounds)); |
| if (parent) |
| parent->AddChildFromServer(window_port_mus_ptr); |
| if (window_data.visible) |
| @@ -543,7 +542,8 @@ void WindowTreeClient::SetWindowBoundsFromServer( |
| return; |
| } |
| - window->SetBoundsFromServer(revert_bounds); |
| + window->SetBoundsFromServer(gfx::ConvertRectToDIP( |
| + ScaleFactorForDisplay(window->GetWindow()), revert_bounds)); |
| } |
| void WindowTreeClient::SetWindowVisibleFromServer(WindowMus* window, |
| @@ -648,7 +648,11 @@ void WindowTreeClient::OnWindowMusBoundsChanged(WindowMus* window, |
| if (IsRoot(window)) |
| return; |
| - ScheduleInFlightBoundsChange(window, old_bounds, new_bounds); |
| + ScheduleInFlightBoundsChange( |
|
sadrul
2016/12/21 16:22:44
float device_scale_factor = ScaleFactorForDisplay(
riajiang
2016/12/21 17:48:33
Done.
|
| + window, gfx::ConvertRectToPixel( |
| + ScaleFactorForDisplay(window->GetWindow()), old_bounds), |
| + gfx::ConvertRectToPixel(ScaleFactorForDisplay(window->GetWindow()), |
| + new_bounds)); |
| } |
| void WindowTreeClient::OnWindowMusAddChild(WindowMus* parent, |
| @@ -925,7 +929,8 @@ void WindowTreeClient::OnTopLevelCreated(uint32_t change_id, |
| GetOldestInFlightChangeMatching(bounds_change); |
| if (current_change) |
| current_change->SetRevertValueFrom(bounds_change); |
| - else if (window->GetWindow()->bounds() != bounds) |
| + else if (gfx::ConvertRectToPixel(ScaleFactorForDisplay(window->GetWindow()), |
| + window->GetWindow()->bounds()) != bounds) |
| SetWindowBoundsFromServer(window, bounds); |
| } |
| @@ -1347,24 +1352,25 @@ void WindowTreeClient::WmDisplayModified(const display::Display& display) { |
| window_manager_delegate_->OnWmDisplayModified(display); |
| } |
| -// TODO(riajiang): Convert between pixel and DIP for window bounds properly. |
| -// (http://crbug.com/646942) |
| void WindowTreeClient::WmSetBounds(uint32_t change_id, |
| Id window_id, |
| - const gfx::Rect& transit_bounds) { |
| + const gfx::Rect& transit_bounds_in_pixels) { |
| WindowMus* window = GetWindowByServerId(window_id); |
| bool result = false; |
| if (window) { |
| + float device_scale_factor = ScaleFactorForDisplay(window->GetWindow()); |
| DCHECK(window_manager_delegate_); |
| - gfx::Rect bounds = transit_bounds; |
| + gfx::Rect transit_bounds_in_dip = |
| + gfx::ConvertRectToDIP(device_scale_factor, transit_bounds_in_pixels); |
| + gfx::Rect bounds_in_dip = transit_bounds_in_dip; |
| // TODO: this needs to trigger scheduling a bounds change on |window|. |
| - result = |
| - window_manager_delegate_->OnWmSetBounds(window->GetWindow(), &bounds); |
| + result = window_manager_delegate_->OnWmSetBounds(window->GetWindow(), |
| + &bounds_in_dip); |
| if (result) { |
| // If the resulting bounds differ return false. Returning false ensures |
| // the client applies the bounds we set below. |
| - result = bounds == transit_bounds; |
| - window->SetBoundsFromServer(bounds); |
| + result = bounds_in_dip == transit_bounds_in_dip; |
| + window->SetBoundsFromServer(bounds_in_dip); |
| } |
| } |
| if (window_manager_internal_client_) |
| @@ -1528,11 +1534,11 @@ void WindowTreeClient::SetUnderlaySurfaceOffsetAndExtendedHitArea( |
| const gfx::Vector2d& offset, |
| const gfx::Insets& hit_area) { |
| if (window_manager_internal_client_) { |
| - // TODO(riajiang): Figure out if |offset| needs to be converted. |
| - // (http://crbugs.com/646932) |
| + float device_scale_factor = ScaleFactorForDisplay(window); |
| window_manager_internal_client_->SetUnderlaySurfaceOffsetAndExtendedHitArea( |
| - WindowMus::Get(window)->server_id(), offset.x(), offset.y(), |
| - gfx::ConvertInsetsToDIP(ScaleFactorForDisplay(window), hit_area)); |
| + WindowMus::Get(window)->server_id(), offset.x() * device_scale_factor, |
| + offset.y() * device_scale_factor, |
|
sadrul
2016/12/21 16:22:44
Use gfx::ScaleVector2d(offset, device_scale_factor
riajiang
2016/12/21 17:48:32
Done.
|
| + gfx::ConvertInsetsToPixel(device_scale_factor, hit_area)); |
| } |
| } |