| 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/common/wm/workspace/workspace_window_resizer.h" | 5 #include "ash/common/wm/workspace/workspace_window_resizer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "ash/common/shell_window_ids.h" | 12 #include "ash/common/shell_window_ids.h" |
| 13 #include "ash/common/wm/default_window_resizer.h" | 13 #include "ash/common/wm/default_window_resizer.h" |
| 14 #include "ash/common/wm/dock/docked_window_layout_manager.h" | 14 #include "ash/common/wm/dock/docked_window_layout_manager.h" |
| 15 #include "ash/common/wm/dock/docked_window_resizer.h" | 15 #include "ash/common/wm/dock/docked_window_resizer.h" |
| 16 #include "ash/common/wm/panels/panel_window_resizer.h" | 16 #include "ash/common/wm/panels/panel_window_resizer.h" |
| 17 #include "ash/common/wm/window_positioning_utils.h" | 17 #include "ash/common/wm/window_positioning_utils.h" |
| 18 #include "ash/common/wm/window_state.h" | 18 #include "ash/common/wm/window_state.h" |
| 19 #include "ash/common/wm/wm_event.h" | 19 #include "ash/common/wm/wm_event.h" |
| 20 #include "ash/common/wm/wm_globals.h" | |
| 21 #include "ash/common/wm/wm_lookup.h" | |
| 22 #include "ash/common/wm/wm_root_window_controller.h" | |
| 23 #include "ash/common/wm/wm_screen_util.h" | 20 #include "ash/common/wm/wm_screen_util.h" |
| 24 #include "ash/common/wm/wm_user_metrics_action.h" | 21 #include "ash/common/wm/wm_user_metrics_action.h" |
| 25 #include "ash/common/wm/wm_window.h" | |
| 26 #include "ash/common/wm/workspace/phantom_window_controller.h" | 22 #include "ash/common/wm/workspace/phantom_window_controller.h" |
| 27 #include "ash/common/wm/workspace/two_step_edge_cycler.h" | 23 #include "ash/common/wm/workspace/two_step_edge_cycler.h" |
| 24 #include "ash/common/wm_lookup.h" |
| 25 #include "ash/common/wm_root_window_controller.h" |
| 26 #include "ash/common/wm_shell.h" |
| 27 #include "ash/common/wm_window.h" |
| 28 #include "base/memory/ptr_util.h" | 28 #include "base/memory/ptr_util.h" |
| 29 #include "base/memory/weak_ptr.h" | 29 #include "base/memory/weak_ptr.h" |
| 30 #include "ui/base/hit_test.h" | 30 #include "ui/base/hit_test.h" |
| 31 #include "ui/compositor/layer.h" | 31 #include "ui/compositor/layer.h" |
| 32 #include "ui/display/display.h" | 32 #include "ui/display/display.h" |
| 33 #include "ui/display/screen.h" | 33 #include "ui/display/screen.h" |
| 34 #include "ui/gfx/transform.h" | 34 #include "ui/gfx/transform.h" |
| 35 #include "ui/wm/public/window_types.h" | 35 #include "ui/wm/public/window_types.h" |
| 36 | 36 |
| 37 namespace ash { | 37 namespace ash { |
| 38 | 38 |
| 39 std::unique_ptr<WindowResizer> CreateWindowResizer( | 39 std::unique_ptr<WindowResizer> CreateWindowResizer( |
| 40 wm::WmWindow* window, | 40 WmWindow* window, |
| 41 const gfx::Point& point_in_parent, | 41 const gfx::Point& point_in_parent, |
| 42 int window_component, | 42 int window_component, |
| 43 aura::client::WindowMoveSource source) { | 43 aura::client::WindowMoveSource source) { |
| 44 DCHECK(window); | 44 DCHECK(window); |
| 45 wm::WindowState* window_state = window->GetWindowState(); | 45 wm::WindowState* window_state = window->GetWindowState(); |
| 46 // No need to return a resizer when the window cannot get resized or when a | 46 // No need to return a resizer when the window cannot get resized or when a |
| 47 // resizer already exists for this window. | 47 // resizer already exists for this window. |
| 48 if ((!window_state->CanResize() && window_component != HTCAPTION) || | 48 if ((!window_state->CanResize() && window_component != HTCAPTION) || |
| 49 window_state->drag_details()) { | 49 window_state->drag_details()) { |
| 50 return nullptr; | 50 return nullptr; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 74 if (bounds_change == WindowResizer::kBoundsChangeDirection_None) | 74 if (bounds_change == WindowResizer::kBoundsChangeDirection_None) |
| 75 return std::unique_ptr<WindowResizer>(); | 75 return std::unique_ptr<WindowResizer>(); |
| 76 | 76 |
| 77 window_state->CreateDragDetails(point_in_parent, window_component, source); | 77 window_state->CreateDragDetails(point_in_parent, window_component, source); |
| 78 const int parent_shell_window_id = | 78 const int parent_shell_window_id = |
| 79 window->GetParent() ? window->GetParent()->GetShellWindowId() : -1; | 79 window->GetParent() ? window->GetParent()->GetShellWindowId() : -1; |
| 80 if (window->GetParent() && | 80 if (window->GetParent() && |
| 81 (parent_shell_window_id == kShellWindowId_DefaultContainer || | 81 (parent_shell_window_id == kShellWindowId_DefaultContainer || |
| 82 parent_shell_window_id == kShellWindowId_DockedContainer || | 82 parent_shell_window_id == kShellWindowId_DockedContainer || |
| 83 parent_shell_window_id == kShellWindowId_PanelContainer)) { | 83 parent_shell_window_id == kShellWindowId_PanelContainer)) { |
| 84 window_resizer.reset(WorkspaceWindowResizer::Create( | 84 window_resizer.reset( |
| 85 window_state, std::vector<wm::WmWindow*>())); | 85 WorkspaceWindowResizer::Create(window_state, std::vector<WmWindow*>())); |
| 86 } else { | 86 } else { |
| 87 window_resizer.reset(DefaultWindowResizer::Create(window_state)); | 87 window_resizer.reset(DefaultWindowResizer::Create(window_state)); |
| 88 } | 88 } |
| 89 window_resizer = window->GetGlobals()->CreateDragWindowResizer( | 89 window_resizer = window->GetShell()->CreateDragWindowResizer( |
| 90 std::move(window_resizer), window_state); | 90 std::move(window_resizer), window_state); |
| 91 if (window->GetType() == ui::wm::WINDOW_TYPE_PANEL) | 91 if (window->GetType() == ui::wm::WINDOW_TYPE_PANEL) |
| 92 window_resizer.reset( | 92 window_resizer.reset( |
| 93 PanelWindowResizer::Create(window_resizer.release(), window_state)); | 93 PanelWindowResizer::Create(window_resizer.release(), window_state)); |
| 94 if (window_resizer && window->GetParent() && !window->GetTransientParent() && | 94 if (window_resizer && window->GetParent() && !window->GetTransientParent() && |
| 95 (parent_shell_window_id == kShellWindowId_DefaultContainer || | 95 (parent_shell_window_id == kShellWindowId_DefaultContainer || |
| 96 parent_shell_window_id == kShellWindowId_DockedContainer || | 96 parent_shell_window_id == kShellWindowId_DockedContainer || |
| 97 parent_shell_window_id == kShellWindowId_PanelContainer)) { | 97 parent_shell_window_id == kShellWindowId_PanelContainer)) { |
| 98 window_resizer.reset( | 98 window_resizer.reset( |
| 99 DockedWindowResizer::Create(window_resizer.release(), window_state)); | 99 DockedWindowResizer::Create(window_resizer.release(), window_state)); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 } | 309 } |
| 310 | 310 |
| 311 private: | 311 private: |
| 312 int size_; | 312 int size_; |
| 313 int min_; | 313 int min_; |
| 314 int max_; | 314 int max_; |
| 315 }; | 315 }; |
| 316 | 316 |
| 317 WorkspaceWindowResizer::~WorkspaceWindowResizer() { | 317 WorkspaceWindowResizer::~WorkspaceWindowResizer() { |
| 318 if (did_lock_cursor_) | 318 if (did_lock_cursor_) |
| 319 globals_->UnlockCursor(); | 319 shell_->UnlockCursor(); |
| 320 | 320 |
| 321 if (instance == this) | 321 if (instance == this) |
| 322 instance = NULL; | 322 instance = NULL; |
| 323 } | 323 } |
| 324 | 324 |
| 325 // static | 325 // static |
| 326 WorkspaceWindowResizer* WorkspaceWindowResizer::Create( | 326 WorkspaceWindowResizer* WorkspaceWindowResizer::Create( |
| 327 wm::WindowState* window_state, | 327 wm::WindowState* window_state, |
| 328 const std::vector<wm::WmWindow*>& attached_windows) { | 328 const std::vector<WmWindow*>& attached_windows) { |
| 329 return new WorkspaceWindowResizer(window_state, attached_windows); | 329 return new WorkspaceWindowResizer(window_state, attached_windows); |
| 330 } | 330 } |
| 331 | 331 |
| 332 void WorkspaceWindowResizer::Drag(const gfx::Point& location_in_parent, | 332 void WorkspaceWindowResizer::Drag(const gfx::Point& location_in_parent, |
| 333 int event_flags) { | 333 int event_flags) { |
| 334 last_mouse_location_ = location_in_parent; | 334 last_mouse_location_ = location_in_parent; |
| 335 | 335 |
| 336 int sticky_size; | 336 int sticky_size; |
| 337 if (event_flags & ui::EF_CONTROL_DOWN) { | 337 if (event_flags & ui::EF_CONTROL_DOWN) { |
| 338 sticky_size = 0; | 338 sticky_size = 0; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 351 if (!details().restore_bounds.IsEmpty()) | 351 if (!details().restore_bounds.IsEmpty()) |
| 352 window_state()->ClearRestoreBounds(); | 352 window_state()->ClearRestoreBounds(); |
| 353 RestackWindows(); | 353 RestackWindows(); |
| 354 } | 354 } |
| 355 did_move_or_resize_ = true; | 355 did_move_or_resize_ = true; |
| 356 } | 356 } |
| 357 | 357 |
| 358 gfx::Point location_in_screen = | 358 gfx::Point location_in_screen = |
| 359 GetTarget()->GetParent()->ConvertPointToScreen(location_in_parent); | 359 GetTarget()->GetParent()->ConvertPointToScreen(location_in_parent); |
| 360 | 360 |
| 361 wm::WmWindow* root = nullptr; | 361 WmWindow* root = nullptr; |
| 362 display::Display display = | 362 display::Display display = |
| 363 display::Screen::GetScreen()->GetDisplayNearestPoint(location_in_screen); | 363 display::Screen::GetScreen()->GetDisplayNearestPoint(location_in_screen); |
| 364 // Track the last screen that the pointer was on to keep the snap phantom | 364 // Track the last screen that the pointer was on to keep the snap phantom |
| 365 // window there. | 365 // window there. |
| 366 if (display.bounds().Contains(location_in_screen)) { | 366 if (display.bounds().Contains(location_in_screen)) { |
| 367 root = wm::WmLookup::Get() | 367 root = WmLookup::Get() |
| 368 ->GetRootWindowControllerWithDisplayId(display.id()) | 368 ->GetRootWindowControllerWithDisplayId(display.id()) |
| 369 ->GetWindow(); | 369 ->GetWindow(); |
| 370 } | 370 } |
| 371 if (!attached_windows_.empty()) | 371 if (!attached_windows_.empty()) |
| 372 LayoutAttachedWindows(&bounds); | 372 LayoutAttachedWindows(&bounds); |
| 373 if (bounds != GetTarget()->GetBounds()) { | 373 if (bounds != GetTarget()->GetBounds()) { |
| 374 // SetBounds needs to be called to update the layout which affects where the | 374 // SetBounds needs to be called to update the layout which affects where the |
| 375 // phantom window is drawn. Keep track if the window was destroyed during | 375 // phantom window is drawn. Keep track if the window was destroyed during |
| 376 // the drag and quit early if so. | 376 // the drag and quit early if so. |
| 377 base::WeakPtr<WorkspaceWindowResizer> resizer( | 377 base::WeakPtr<WorkspaceWindowResizer> resizer( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 details().restore_bounds.IsEmpty() ? initial_bounds | 414 details().restore_bounds.IsEmpty() ? initial_bounds |
| 415 : details().restore_bounds); | 415 : details().restore_bounds); |
| 416 } | 416 } |
| 417 if (!dock_layout_->is_dragged_window_docked()) { | 417 if (!dock_layout_->is_dragged_window_docked()) { |
| 418 // TODO(oshima): Add event source type to WMEvent and move | 418 // TODO(oshima): Add event source type to WMEvent and move |
| 419 // metrics recording inside WindowState::OnWMEvent. | 419 // metrics recording inside WindowState::OnWMEvent. |
| 420 const wm::WMEvent event(snap_type_ == SNAP_LEFT | 420 const wm::WMEvent event(snap_type_ == SNAP_LEFT |
| 421 ? wm::WM_EVENT_SNAP_LEFT | 421 ? wm::WM_EVENT_SNAP_LEFT |
| 422 : wm::WM_EVENT_SNAP_RIGHT); | 422 : wm::WM_EVENT_SNAP_RIGHT); |
| 423 window_state()->OnWMEvent(&event); | 423 window_state()->OnWMEvent(&event); |
| 424 globals_->RecordUserMetricsAction( | 424 shell_->RecordUserMetricsAction( |
| 425 snap_type_ == SNAP_LEFT | 425 snap_type_ == SNAP_LEFT |
| 426 ? wm::WmUserMetricsAction::DRAG_MAXIMIZE_LEFT | 426 ? wm::WmUserMetricsAction::DRAG_MAXIMIZE_LEFT |
| 427 : wm::WmUserMetricsAction::DRAG_MAXIMIZE_RIGHT); | 427 : wm::WmUserMetricsAction::DRAG_MAXIMIZE_RIGHT); |
| 428 snapped = true; | 428 snapped = true; |
| 429 } | 429 } |
| 430 } | 430 } |
| 431 | 431 |
| 432 if (!snapped) { | 432 if (!snapped) { |
| 433 if (window_state()->IsSnapped()) { | 433 if (window_state()->IsSnapped()) { |
| 434 // Keep the window snapped if the user resizes the window such that the | 434 // Keep the window snapped if the user resizes the window such that the |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 485 bounds.set_y(last_y); | 485 bounds.set_y(last_y); |
| 486 bounds.set_height(initial_size_[i]); | 486 bounds.set_height(initial_size_[i]); |
| 487 attached_windows_[i]->SetBounds(bounds); | 487 attached_windows_[i]->SetBounds(bounds); |
| 488 last_y = attached_windows_[i]->GetBounds().bottom(); | 488 last_y = attached_windows_[i]->GetBounds().bottom(); |
| 489 } | 489 } |
| 490 } | 490 } |
| 491 } | 491 } |
| 492 | 492 |
| 493 WorkspaceWindowResizer::WorkspaceWindowResizer( | 493 WorkspaceWindowResizer::WorkspaceWindowResizer( |
| 494 wm::WindowState* window_state, | 494 wm::WindowState* window_state, |
| 495 const std::vector<wm::WmWindow*>& attached_windows) | 495 const std::vector<WmWindow*>& attached_windows) |
| 496 : WindowResizer(window_state), | 496 : WindowResizer(window_state), |
| 497 attached_windows_(attached_windows), | 497 attached_windows_(attached_windows), |
| 498 globals_(window_state->window()->GetGlobals()), | 498 shell_(window_state->window()->GetShell()), |
| 499 did_lock_cursor_(false), | 499 did_lock_cursor_(false), |
| 500 did_move_or_resize_(false), | 500 did_move_or_resize_(false), |
| 501 initial_bounds_changed_by_user_(window_state_->bounds_changed_by_user()), | 501 initial_bounds_changed_by_user_(window_state_->bounds_changed_by_user()), |
| 502 total_min_(0), | 502 total_min_(0), |
| 503 total_initial_size_(0), | 503 total_initial_size_(0), |
| 504 snap_type_(SNAP_NONE), | 504 snap_type_(SNAP_NONE), |
| 505 num_mouse_moves_since_bounds_change_(0), | 505 num_mouse_moves_since_bounds_change_(0), |
| 506 magnetism_window_(NULL), | 506 magnetism_window_(NULL), |
| 507 weak_ptr_factory_(this) { | 507 weak_ptr_factory_(this) { |
| 508 DCHECK(details().is_resizable); | 508 DCHECK(details().is_resizable); |
| 509 | 509 |
| 510 // A mousemove should still show the cursor even if the window is | 510 // A mousemove should still show the cursor even if the window is |
| 511 // being moved or resized with touch, so do not lock the cursor. | 511 // being moved or resized with touch, so do not lock the cursor. |
| 512 if (details().source != aura::client::WINDOW_MOVE_SOURCE_TOUCH) { | 512 if (details().source != aura::client::WINDOW_MOVE_SOURCE_TOUCH) { |
| 513 globals_->LockCursor(); | 513 shell_->LockCursor(); |
| 514 did_lock_cursor_ = true; | 514 did_lock_cursor_ = true; |
| 515 } | 515 } |
| 516 | 516 |
| 517 dock_layout_ = DockedWindowLayoutManager::Get(GetTarget()); | 517 dock_layout_ = DockedWindowLayoutManager::Get(GetTarget()); |
| 518 | 518 |
| 519 // Only support attaching to the right/bottom. | 519 // Only support attaching to the right/bottom. |
| 520 DCHECK(attached_windows_.empty() || (details().window_component == HTRIGHT || | 520 DCHECK(attached_windows_.empty() || (details().window_component == HTRIGHT || |
| 521 details().window_component == HTBOTTOM)); | 521 details().window_component == HTBOTTOM)); |
| 522 | 522 |
| 523 // TODO: figure out how to deal with window going off the edge. | 523 // TODO: figure out how to deal with window going off the edge. |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 } | 715 } |
| 716 window_tracker_.Remove(magnetism_window_); | 716 window_tracker_.Remove(magnetism_window_); |
| 717 magnetism_window_ = NULL; | 717 magnetism_window_ = NULL; |
| 718 } | 718 } |
| 719 | 719 |
| 720 // Avoid magnetically snapping windows that are not resizable. | 720 // Avoid magnetically snapping windows that are not resizable. |
| 721 // TODO(oshima): change this to window.type() == TYPE_NORMAL. | 721 // TODO(oshima): change this to window.type() == TYPE_NORMAL. |
| 722 if (!window_state()->CanResize()) | 722 if (!window_state()->CanResize()) |
| 723 return false; | 723 return false; |
| 724 | 724 |
| 725 for (wm::WmWindow* root_window : globals_->GetAllRootWindows()) { | 725 for (WmWindow* root_window : shell_->GetAllRootWindows()) { |
| 726 // Test all children from the desktop in each root window. | 726 // Test all children from the desktop in each root window. |
| 727 const std::vector<wm::WmWindow*> children = | 727 const std::vector<WmWindow*> children = |
| 728 root_window->GetChildByShellWindowId(kShellWindowId_DefaultContainer) | 728 root_window->GetChildByShellWindowId(kShellWindowId_DefaultContainer) |
| 729 ->GetChildren(); | 729 ->GetChildren(); |
| 730 for (auto i = children.rbegin(); | 730 for (auto i = children.rbegin(); |
| 731 i != children.rend() && !matcher.AreEdgesObscured(); ++i) { | 731 i != children.rend() && !matcher.AreEdgesObscured(); ++i) { |
| 732 wm::WindowState* other_state = (*i)->GetWindowState(); | 732 wm::WindowState* other_state = (*i)->GetWindowState(); |
| 733 if (other_state->window() == GetTarget() || | 733 if (other_state->window() == GetTarget() || |
| 734 !other_state->window()->IsVisible() || | 734 !other_state->window()->IsVisible() || |
| 735 !other_state->IsNormalOrSnapped() || !other_state->CanResize()) { | 735 !other_state->IsNormalOrSnapped() || !other_state->CanResize()) { |
| 736 continue; | 736 continue; |
| 737 } | 737 } |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 941 } | 941 } |
| 942 snap_phantom_window_controller_->Show( | 942 snap_phantom_window_controller_->Show( |
| 943 GetTarget()->GetParent()->ConvertRectToScreen(phantom_bounds)); | 943 GetTarget()->GetParent()->ConvertRectToScreen(phantom_bounds)); |
| 944 } | 944 } |
| 945 | 945 |
| 946 void WorkspaceWindowResizer::RestackWindows() { | 946 void WorkspaceWindowResizer::RestackWindows() { |
| 947 if (attached_windows_.empty()) | 947 if (attached_windows_.empty()) |
| 948 return; | 948 return; |
| 949 // Build a map from index in children to window, returning if there is a | 949 // Build a map from index in children to window, returning if there is a |
| 950 // window with a different parent. | 950 // window with a different parent. |
| 951 using IndexToWindowMap = std::map<size_t, wm::WmWindow*>; | 951 using IndexToWindowMap = std::map<size_t, WmWindow*>; |
| 952 IndexToWindowMap map; | 952 IndexToWindowMap map; |
| 953 wm::WmWindow* parent = GetTarget()->GetParent(); | 953 WmWindow* parent = GetTarget()->GetParent(); |
| 954 const std::vector<wm::WmWindow*> windows(parent->GetChildren()); | 954 const std::vector<WmWindow*> windows(parent->GetChildren()); |
| 955 map[std::find(windows.begin(), windows.end(), GetTarget()) - | 955 map[std::find(windows.begin(), windows.end(), GetTarget()) - |
| 956 windows.begin()] = GetTarget(); | 956 windows.begin()] = GetTarget(); |
| 957 for (auto i = attached_windows_.begin(); i != attached_windows_.end(); ++i) { | 957 for (auto i = attached_windows_.begin(); i != attached_windows_.end(); ++i) { |
| 958 if ((*i)->GetParent() != parent) | 958 if ((*i)->GetParent() != parent) |
| 959 return; | 959 return; |
| 960 size_t index = | 960 size_t index = |
| 961 std::find(windows.begin(), windows.end(), *i) - windows.begin(); | 961 std::find(windows.begin(), windows.end(), *i) - windows.begin(); |
| 962 map[index] = *i; | 962 map[index] = *i; |
| 963 } | 963 } |
| 964 | 964 |
| 965 // Reorder the windows starting at the topmost. | 965 // Reorder the windows starting at the topmost. |
| 966 parent->StackChildAtTop(map.rbegin()->second); | 966 parent->StackChildAtTop(map.rbegin()->second); |
| 967 for (auto i = map.rbegin(); i != map.rend();) { | 967 for (auto i = map.rbegin(); i != map.rend();) { |
| 968 wm::WmWindow* window = i->second; | 968 WmWindow* window = i->second; |
| 969 ++i; | 969 ++i; |
| 970 if (i != map.rend()) | 970 if (i != map.rend()) |
| 971 parent->StackChildBelow(i->second, window); | 971 parent->StackChildBelow(i->second, window); |
| 972 } | 972 } |
| 973 } | 973 } |
| 974 | 974 |
| 975 WorkspaceWindowResizer::SnapType WorkspaceWindowResizer::GetSnapType( | 975 WorkspaceWindowResizer::SnapType WorkspaceWindowResizer::GetSnapType( |
| 976 const gfx::Point& location) const { | 976 const gfx::Point& location) const { |
| 977 // TODO: this likely only wants total display area, not the area of a single | 977 // TODO: this likely only wants total display area, not the area of a single |
| 978 // display. | 978 // display. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1016 DCHECK(snapped_type == wm::WINDOW_STATE_TYPE_LEFT_SNAPPED || | 1016 DCHECK(snapped_type == wm::WINDOW_STATE_TYPE_LEFT_SNAPPED || |
| 1017 snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED); | 1017 snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED); |
| 1018 gfx::Rect snapped_bounds = wm::GetDisplayWorkAreaBoundsInParent(GetTarget()); | 1018 gfx::Rect snapped_bounds = wm::GetDisplayWorkAreaBoundsInParent(GetTarget()); |
| 1019 if (snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) | 1019 if (snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) |
| 1020 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); | 1020 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); |
| 1021 snapped_bounds.set_width(bounds_in_parent.width()); | 1021 snapped_bounds.set_width(bounds_in_parent.width()); |
| 1022 return bounds_in_parent == snapped_bounds; | 1022 return bounds_in_parent == snapped_bounds; |
| 1023 } | 1023 } |
| 1024 | 1024 |
| 1025 } // namespace ash | 1025 } // namespace ash |
| OLD | NEW |