| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/wm/system_modal_container_layout_manager.h" | 5 #include "ash/wm/system_modal_container_layout_manager.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "ash/session/session_state_delegate.h" | 9 #include "ash/session/session_state_delegate.h" |
| 10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 if (!bounds.IsEmpty()) { | 265 if (!bounds.IsEmpty()) { |
| 266 valid_bounds.set_height(std::max( | 266 valid_bounds.set_height(std::max( |
| 267 0, valid_bounds.height() - bounds.height())); | 267 0, valid_bounds.height() - bounds.height())); |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 return valid_bounds; | 270 return valid_bounds; |
| 271 } | 271 } |
| 272 | 272 |
| 273 gfx::Rect SystemModalContainerLayoutManager::GetCenteredAndOrFittedBounds( | 273 gfx::Rect SystemModalContainerLayoutManager::GetCenteredAndOrFittedBounds( |
| 274 const aura::Window* window) { | 274 const aura::Window* window) { |
| 275 gfx::Rect target_bounds; |
| 276 gfx::Rect usable_area = GetUsableDialogArea(); |
| 275 if (window->GetProperty(kCenteredKey)) { | 277 if (window->GetProperty(kCenteredKey)) { |
| 276 // Keep the dialog centered if it was centered before. | 278 // Keep the dialog centered if it was centered before. |
| 277 gfx::Rect target_bounds = GetUsableDialogArea(); | 279 target_bounds = usable_area; |
| 278 target_bounds.ClampToCenteredSize(window->bounds().size()); | 280 target_bounds.ClampToCenteredSize(window->bounds().size()); |
| 279 return target_bounds; | 281 } else { |
| 282 // Keep the dialog within the usable area. |
| 283 target_bounds = window->bounds(); |
| 284 target_bounds.AdjustToFit(usable_area); |
| 280 } | 285 } |
| 281 gfx::Rect target_bounds = window->bounds(); | 286 if (usable_area != container_->bounds()) { |
| 282 target_bounds.AdjustToFit(GetUsableDialogArea()); | 287 // Don't clamp the dialog for the keyboard. Keep the size as it is but make |
| 288 // sure that the top remains visible. |
| 289 // TODO(skuhne): M37 should add over scroll functionality to address this. |
| 290 target_bounds.set_size(window->bounds().size()); |
| 291 } |
| 283 return target_bounds; | 292 return target_bounds; |
| 284 } | 293 } |
| 285 | 294 |
| 286 bool SystemModalContainerLayoutManager::DialogIsCentered( | 295 bool SystemModalContainerLayoutManager::DialogIsCentered( |
| 287 const gfx::Rect& window_bounds) { | 296 const gfx::Rect& window_bounds) { |
| 288 gfx::Point window_center = window_bounds.CenterPoint(); | 297 gfx::Point window_center = window_bounds.CenterPoint(); |
| 289 gfx::Point container_center = GetUsableDialogArea().CenterPoint(); | 298 gfx::Point container_center = GetUsableDialogArea().CenterPoint(); |
| 290 return | 299 return |
| 291 std::abs(window_center.x() - container_center.x()) < kCenterPixelDelta && | 300 std::abs(window_center.x() - container_center.x()) < kCenterPixelDelta && |
| 292 std::abs(window_center.y() - container_center.y()) < kCenterPixelDelta; | 301 std::abs(window_center.y() - container_center.y()) < kCenterPixelDelta; |
| 293 } | 302 } |
| 294 | 303 |
| 295 } // namespace ash | 304 } // namespace ash |
| OLD | NEW |