Index: ash/common/wm/window_positioning_utils.cc |
diff --git a/ash/common/wm/window_positioning_utils.cc b/ash/common/wm/window_positioning_utils.cc |
deleted file mode 100644 |
index babed2f4456c1c9a052f946f5299ca5d6441a038..0000000000000000000000000000000000000000 |
--- a/ash/common/wm/window_positioning_utils.cc |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ash/common/wm/window_positioning_utils.h" |
- |
-#include <algorithm> |
- |
-#include "ash/common/wm/system_modal_container_layout_manager.h" |
-#include "ash/common/wm/window_state.h" |
-#include "ash/common/wm/wm_event.h" |
-#include "ash/common/wm/wm_screen_util.h" |
-#include "ash/common/wm_shell.h" |
-#include "ash/common/wm_window.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/shell.h" |
-#include "ui/aura/window_tracker.h" |
-#include "ui/display/display.h" |
-#include "ui/display/types/display_constants.h" |
-#include "ui/gfx/geometry/rect.h" |
-#include "ui/gfx/geometry/size.h" |
- |
-namespace ash { |
-namespace wm { |
- |
-namespace { |
- |
-// Returns the default width of a snapped window. |
-int GetDefaultSnappedWindowWidth(WmWindow* window) { |
- const float kSnappedWidthWorkspaceRatio = 0.5f; |
- |
- int work_area_width = GetDisplayWorkAreaBoundsInParent(window).width(); |
- int min_width = window->GetMinimumSize().width(); |
- int ideal_width = |
- static_cast<int>(work_area_width * kSnappedWidthWorkspaceRatio); |
- return std::min(work_area_width, std::max(ideal_width, min_width)); |
-} |
- |
-// Return true if the window or one of its ancestor returns true from |
-// IsLockedToRoot(). |
-bool IsWindowOrAncestorLockedToRoot(const WmWindow* window) { |
- return window && (window->IsLockedToRoot() || |
- IsWindowOrAncestorLockedToRoot(window->GetParent())); |
-} |
- |
-// Move all transient children to |dst_root|, including the ones in |
-// the child windows and transient children of the transient children. |
-void MoveAllTransientChildrenToNewRoot(const display::Display& display, |
- WmWindow* window) { |
- WmWindow* dst_root = |
- Shell::GetRootWindowControllerWithDisplayId(display.id())->GetWindow(); |
- for (WmWindow* transient_child : window->GetTransientChildren()) { |
- const int container_id = transient_child->GetParent()->GetShellWindowId(); |
- DCHECK_GE(container_id, 0); |
- WmWindow* container = dst_root->GetChildByShellWindowId(container_id); |
- const gfx::Rect transient_child_bounds_in_screen = |
- transient_child->GetBoundsInScreen(); |
- container->AddChild(transient_child); |
- transient_child->SetBoundsInScreen(transient_child_bounds_in_screen, |
- display); |
- |
- // Transient children may have transient children. |
- MoveAllTransientChildrenToNewRoot(display, transient_child); |
- } |
- // Move transient children of the child windows if any. |
- for (WmWindow* child : window->GetChildren()) |
- MoveAllTransientChildrenToNewRoot(display, child); |
-} |
- |
-} // namespace |
- |
-void AdjustBoundsSmallerThan(const gfx::Size& max_size, gfx::Rect* bounds) { |
- bounds->set_width(std::min(bounds->width(), max_size.width())); |
- bounds->set_height(std::min(bounds->height(), max_size.height())); |
-} |
- |
-void AdjustBoundsToEnsureWindowVisibility(const gfx::Rect& visible_area, |
- int min_width, |
- int min_height, |
- gfx::Rect* bounds) { |
- AdjustBoundsSmallerThan(visible_area.size(), bounds); |
- |
- min_width = std::min(min_width, visible_area.width()); |
- min_height = std::min(min_height, visible_area.height()); |
- |
- if (bounds->right() < visible_area.x() + min_width) { |
- bounds->set_x(visible_area.x() + std::min(bounds->width(), min_width) - |
- bounds->width()); |
- } else if (bounds->x() > visible_area.right() - min_width) { |
- bounds->set_x(visible_area.right() - std::min(bounds->width(), min_width)); |
- } |
- if (bounds->bottom() < visible_area.y() + min_height) { |
- bounds->set_y(visible_area.y() + std::min(bounds->height(), min_height) - |
- bounds->height()); |
- } else if (bounds->y() > visible_area.bottom() - min_height) { |
- bounds->set_y(visible_area.bottom() - |
- std::min(bounds->height(), min_height)); |
- } |
- if (bounds->y() < visible_area.y()) |
- bounds->set_y(visible_area.y()); |
-} |
- |
-void AdjustBoundsToEnsureMinimumWindowVisibility(const gfx::Rect& visible_area, |
- gfx::Rect* bounds) { |
- AdjustBoundsToEnsureWindowVisibility(visible_area, kMinimumOnScreenArea, |
- kMinimumOnScreenArea, bounds); |
-} |
- |
-gfx::Rect GetDefaultLeftSnappedWindowBoundsInParent(WmWindow* window) { |
- gfx::Rect work_area_in_parent(GetDisplayWorkAreaBoundsInParent(window)); |
- return gfx::Rect(work_area_in_parent.x(), work_area_in_parent.y(), |
- GetDefaultSnappedWindowWidth(window), |
- work_area_in_parent.height()); |
-} |
- |
-gfx::Rect GetDefaultRightSnappedWindowBoundsInParent(WmWindow* window) { |
- gfx::Rect work_area_in_parent(GetDisplayWorkAreaBoundsInParent(window)); |
- int width = GetDefaultSnappedWindowWidth(window); |
- return gfx::Rect(work_area_in_parent.right() - width, work_area_in_parent.y(), |
- width, work_area_in_parent.height()); |
-} |
- |
-void CenterWindow(WmWindow* window) { |
- WMEvent event(WM_EVENT_CENTER); |
- window->GetWindowState()->OnWMEvent(&event); |
-} |
- |
-void SetBoundsInScreen(WmWindow* window, |
- const gfx::Rect& bounds_in_screen, |
- const display::Display& display) { |
- DCHECK_NE(display::kInvalidDisplayId, display.id()); |
- // Don't move a window to other root window if: |
- // a) the window is a transient window. It moves when its |
- // transient parent moves. |
- // b) if the window or its ancestor has IsLockedToRoot(). It's intentionally |
- // kept in the same root window even if the bounds is outside of the |
- // display. |
- if (!window->GetTransientParent() && |
- !IsWindowOrAncestorLockedToRoot(window)) { |
- RootWindowController* dst_root_window_controller = |
- Shell::GetRootWindowControllerWithDisplayId(display.id()); |
- DCHECK(dst_root_window_controller); |
- WmWindow* dst_root = dst_root_window_controller->GetWindow(); |
- DCHECK(dst_root); |
- WmWindow* dst_container = nullptr; |
- if (dst_root != window->GetRootWindow()) { |
- int container_id = window->GetParent()->GetShellWindowId(); |
- // All containers that uses screen coordinates must have valid window ids. |
- DCHECK_GE(container_id, 0); |
- // Don't move modal background. |
- if (!SystemModalContainerLayoutManager::IsModalBackground(window)) |
- dst_container = dst_root->GetChildByShellWindowId(container_id); |
- } |
- |
- if (dst_container && window->GetParent() != dst_container) { |
- WmWindow* focused = WmShell::Get()->GetFocusedWindow(); |
- WmWindow* active = WmShell::Get()->GetActiveWindow(); |
- |
- aura::WindowTracker tracker; |
- if (focused) |
- tracker.Add(focused->aura_window()); |
- if (active && focused != active) |
- tracker.Add(active->aura_window()); |
- |
- gfx::Point origin = bounds_in_screen.origin(); |
- const gfx::Point display_origin = display.bounds().origin(); |
- origin.Offset(-display_origin.x(), -display_origin.y()); |
- gfx::Rect new_bounds = gfx::Rect(origin, bounds_in_screen.size()); |
- |
- // Set new bounds now so that the container's layout manager can adjust |
- // the bounds if necessary. |
- window->SetBounds(new_bounds); |
- |
- dst_container->AddChild(window); |
- |
- MoveAllTransientChildrenToNewRoot(display, window); |
- |
- // Restore focused/active window. |
- if (focused && tracker.Contains(focused->aura_window())) { |
- focused->SetFocused(); |
- WmShell::Get()->set_root_window_for_new_windows( |
- focused->GetRootWindow()); |
- } else if (active && tracker.Contains(active->aura_window())) { |
- active->Activate(); |
- } |
- // TODO(oshima): We should not have to update the bounds again |
- // below in theory, but we currently do need as there is a code |
- // that assumes that the bounds will never be overridden by the |
- // layout mananger. We should have more explicit control how |
- // constraints are applied by the layout manager. |
- } |
- } |
- gfx::Point origin(bounds_in_screen.origin()); |
- const gfx::Point display_origin = |
- window->GetDisplayNearestWindow().bounds().origin(); |
- origin.Offset(-display_origin.x(), -display_origin.y()); |
- window->SetBounds(gfx::Rect(origin, bounds_in_screen.size())); |
-} |
- |
-} // namespace wm |
-} // namespace ash |