Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: ash/wm/workspace/workspace_window_resizer.cc

Issue 2808723004: Renames WmShell to ShellPort (Closed)
Patch Set: feedback Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/workspace/workspace_window_resizer.h" 5 #include "ash/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/metrics/user_metrics_action.h" 12 #include "ash/metrics/user_metrics_action.h"
13 #include "ash/public/cpp/shell_window_ids.h" 13 #include "ash/public/cpp/shell_window_ids.h"
14 #include "ash/root_window_controller.h" 14 #include "ash/root_window_controller.h"
15 #include "ash/shell.h" 15 #include "ash/shell.h"
16 #include "ash/shell_port.h"
16 #include "ash/wm/default_window_resizer.h" 17 #include "ash/wm/default_window_resizer.h"
17 #include "ash/wm/panels/panel_window_resizer.h" 18 #include "ash/wm/panels/panel_window_resizer.h"
18 #include "ash/wm/window_positioning_utils.h" 19 #include "ash/wm/window_positioning_utils.h"
19 #include "ash/wm/window_state.h" 20 #include "ash/wm/window_state.h"
20 #include "ash/wm/wm_event.h" 21 #include "ash/wm/wm_event.h"
21 #include "ash/wm/wm_screen_util.h" 22 #include "ash/wm/wm_screen_util.h"
22 #include "ash/wm/workspace/phantom_window_controller.h" 23 #include "ash/wm/workspace/phantom_window_controller.h"
23 #include "ash/wm/workspace/two_step_edge_cycler.h" 24 #include "ash/wm/workspace/two_step_edge_cycler.h"
24 #include "ash/wm_shell.h"
25 #include "ash/wm_window.h" 25 #include "ash/wm_window.h"
26 #include "base/memory/ptr_util.h" 26 #include "base/memory/ptr_util.h"
27 #include "base/memory/weak_ptr.h" 27 #include "base/memory/weak_ptr.h"
28 #include "ui/base/hit_test.h" 28 #include "ui/base/hit_test.h"
29 #include "ui/compositor/layer.h" 29 #include "ui/compositor/layer.h"
30 #include "ui/display/display.h" 30 #include "ui/display/display.h"
31 #include "ui/display/screen.h" 31 #include "ui/display/screen.h"
32 #include "ui/gfx/transform.h" 32 #include "ui/gfx/transform.h"
33 #include "ui/wm/public/window_types.h" 33 #include "ui/wm/public/window_types.h"
34 34
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 const int parent_shell_window_id = 74 const int parent_shell_window_id =
75 window->GetParent() ? window->GetParent()->GetShellWindowId() : -1; 75 window->GetParent() ? window->GetParent()->GetShellWindowId() : -1;
76 if (window->GetParent() && 76 if (window->GetParent() &&
77 (parent_shell_window_id == kShellWindowId_DefaultContainer || 77 (parent_shell_window_id == kShellWindowId_DefaultContainer ||
78 parent_shell_window_id == kShellWindowId_PanelContainer)) { 78 parent_shell_window_id == kShellWindowId_PanelContainer)) {
79 window_resizer.reset( 79 window_resizer.reset(
80 WorkspaceWindowResizer::Create(window_state, std::vector<WmWindow*>())); 80 WorkspaceWindowResizer::Create(window_state, std::vector<WmWindow*>()));
81 } else { 81 } else {
82 window_resizer.reset(DefaultWindowResizer::Create(window_state)); 82 window_resizer.reset(DefaultWindowResizer::Create(window_state));
83 } 83 }
84 window_resizer = window->GetShell()->CreateDragWindowResizer( 84 window_resizer = ShellPort::Get()->CreateDragWindowResizer(
85 std::move(window_resizer), window_state); 85 std::move(window_resizer), window_state);
86 if (window->GetType() == ui::wm::WINDOW_TYPE_PANEL) { 86 if (window->GetType() == ui::wm::WINDOW_TYPE_PANEL) {
87 window_resizer.reset( 87 window_resizer.reset(
88 PanelWindowResizer::Create(window_resizer.release(), window_state)); 88 PanelWindowResizer::Create(window_resizer.release(), window_state));
89 } 89 }
90 return window_resizer; 90 return window_resizer;
91 } 91 }
92 92
93 namespace { 93 namespace {
94 94
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 298 }
299 299
300 private: 300 private:
301 int size_; 301 int size_;
302 int min_; 302 int min_;
303 int max_; 303 int max_;
304 }; 304 };
305 305
306 WorkspaceWindowResizer::~WorkspaceWindowResizer() { 306 WorkspaceWindowResizer::~WorkspaceWindowResizer() {
307 if (did_lock_cursor_) 307 if (did_lock_cursor_)
308 shell_->UnlockCursor(); 308 ShellPort::Get()->UnlockCursor();
309 309
310 if (instance == this) 310 if (instance == this)
311 instance = NULL; 311 instance = NULL;
312 } 312 }
313 313
314 // static 314 // static
315 WorkspaceWindowResizer* WorkspaceWindowResizer::Create( 315 WorkspaceWindowResizer* WorkspaceWindowResizer::Create(
316 wm::WindowState* window_state, 316 wm::WindowState* window_state,
317 const std::vector<WmWindow*>& attached_windows) { 317 const std::vector<WmWindow*>& attached_windows) {
318 return new WorkspaceWindowResizer(window_state, attached_windows); 318 return new WorkspaceWindowResizer(window_state, attached_windows);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 details().initial_bounds_in_parent); 399 details().initial_bounds_in_parent);
400 window_state()->SetRestoreBoundsInScreen( 400 window_state()->SetRestoreBoundsInScreen(
401 details().restore_bounds.IsEmpty() ? initial_bounds 401 details().restore_bounds.IsEmpty() ? initial_bounds
402 : details().restore_bounds); 402 : details().restore_bounds);
403 } 403 }
404 // TODO(oshima): Add event source type to WMEvent and move 404 // TODO(oshima): Add event source type to WMEvent and move
405 // metrics recording inside WindowState::OnWMEvent. 405 // metrics recording inside WindowState::OnWMEvent.
406 const wm::WMEvent event(snap_type_ == SNAP_LEFT ? wm::WM_EVENT_SNAP_LEFT 406 const wm::WMEvent event(snap_type_ == SNAP_LEFT ? wm::WM_EVENT_SNAP_LEFT
407 : wm::WM_EVENT_SNAP_RIGHT); 407 : wm::WM_EVENT_SNAP_RIGHT);
408 window_state()->OnWMEvent(&event); 408 window_state()->OnWMEvent(&event);
409 shell_->RecordUserMetricsAction(snap_type_ == SNAP_LEFT 409 ShellPort::Get()->RecordUserMetricsAction(snap_type_ == SNAP_LEFT
410 ? UMA_DRAG_MAXIMIZE_LEFT 410 ? UMA_DRAG_MAXIMIZE_LEFT
411 : UMA_DRAG_MAXIMIZE_RIGHT); 411 : UMA_DRAG_MAXIMIZE_RIGHT);
412 snapped = true; 412 snapped = true;
413 } 413 }
414 414
415 if (!snapped) { 415 if (!snapped) {
416 if (window_state()->IsSnapped()) { 416 if (window_state()->IsSnapped()) {
417 // Keep the window snapped if the user resizes the window such that the 417 // Keep the window snapped if the user resizes the window such that the
418 // window has valid bounds for a snapped window. Always unsnap the window 418 // window has valid bounds for a snapped window. Always unsnap the window
419 // if the user dragged the window via the caption area because doing this 419 // if the user dragged the window via the caption area because doing this
420 // is slightly less confusing. 420 // is slightly less confusing.
421 if (details().window_component == HTCAPTION || 421 if (details().window_component == HTCAPTION ||
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 last_y = attached_windows_[i]->GetBounds().bottom(); 466 last_y = attached_windows_[i]->GetBounds().bottom();
467 } 467 }
468 } 468 }
469 } 469 }
470 470
471 WorkspaceWindowResizer::WorkspaceWindowResizer( 471 WorkspaceWindowResizer::WorkspaceWindowResizer(
472 wm::WindowState* window_state, 472 wm::WindowState* window_state,
473 const std::vector<WmWindow*>& attached_windows) 473 const std::vector<WmWindow*>& attached_windows)
474 : WindowResizer(window_state), 474 : WindowResizer(window_state),
475 attached_windows_(attached_windows), 475 attached_windows_(attached_windows),
476 shell_(window_state->window()->GetShell()),
477 did_lock_cursor_(false), 476 did_lock_cursor_(false),
478 did_move_or_resize_(false), 477 did_move_or_resize_(false),
479 initial_bounds_changed_by_user_(window_state_->bounds_changed_by_user()), 478 initial_bounds_changed_by_user_(window_state_->bounds_changed_by_user()),
480 total_min_(0), 479 total_min_(0),
481 total_initial_size_(0), 480 total_initial_size_(0),
482 snap_type_(SNAP_NONE), 481 snap_type_(SNAP_NONE),
483 num_mouse_moves_since_bounds_change_(0), 482 num_mouse_moves_since_bounds_change_(0),
484 magnetism_window_(NULL), 483 magnetism_window_(NULL),
485 weak_ptr_factory_(this) { 484 weak_ptr_factory_(this) {
486 DCHECK(details().is_resizable); 485 DCHECK(details().is_resizable);
487 486
488 // A mousemove should still show the cursor even if the window is 487 // A mousemove should still show the cursor even if the window is
489 // being moved or resized with touch, so do not lock the cursor. 488 // being moved or resized with touch, so do not lock the cursor.
490 if (details().source != aura::client::WINDOW_MOVE_SOURCE_TOUCH) { 489 if (details().source != aura::client::WINDOW_MOVE_SOURCE_TOUCH) {
491 shell_->LockCursor(); 490 ShellPort::Get()->LockCursor();
492 did_lock_cursor_ = true; 491 did_lock_cursor_ = true;
493 } 492 }
494 493
495 // Only support attaching to the right/bottom. 494 // Only support attaching to the right/bottom.
496 DCHECK(attached_windows_.empty() || (details().window_component == HTRIGHT || 495 DCHECK(attached_windows_.empty() || (details().window_component == HTRIGHT ||
497 details().window_component == HTBOTTOM)); 496 details().window_component == HTBOTTOM));
498 497
499 // TODO: figure out how to deal with window going off the edge. 498 // TODO: figure out how to deal with window going off the edge.
500 499
501 // Calculate sizes so that we can maintain the ratios if we need to resize. 500 // Calculate sizes so that we can maintain the ratios if we need to resize.
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 } 690 }
692 window_tracker_.Remove(magnetism_window_->aura_window()); 691 window_tracker_.Remove(magnetism_window_->aura_window());
693 magnetism_window_ = NULL; 692 magnetism_window_ = NULL;
694 } 693 }
695 694
696 // Avoid magnetically snapping windows that are not resizable. 695 // Avoid magnetically snapping windows that are not resizable.
697 // TODO(oshima): change this to window.type() == TYPE_NORMAL. 696 // TODO(oshima): change this to window.type() == TYPE_NORMAL.
698 if (!window_state()->CanResize()) 697 if (!window_state()->CanResize())
699 return false; 698 return false;
700 699
701 for (WmWindow* root_window : shell_->GetAllRootWindows()) { 700 for (WmWindow* root_window : ShellPort::Get()->GetAllRootWindows()) {
702 // Test all children from the desktop in each root window. 701 // Test all children from the desktop in each root window.
703 const std::vector<WmWindow*> children = 702 const std::vector<WmWindow*> children =
704 root_window->GetChildByShellWindowId(kShellWindowId_DefaultContainer) 703 root_window->GetChildByShellWindowId(kShellWindowId_DefaultContainer)
705 ->GetChildren(); 704 ->GetChildren();
706 for (auto i = children.rbegin(); 705 for (auto i = children.rbegin();
707 i != children.rend() && !matcher.AreEdgesObscured(); ++i) { 706 i != children.rend() && !matcher.AreEdgesObscured(); ++i) {
708 wm::WindowState* other_state = (*i)->GetWindowState(); 707 wm::WindowState* other_state = (*i)->GetWindowState();
709 if (other_state->window() == GetTarget() || 708 if (other_state->window() == GetTarget() ||
710 !other_state->window()->IsVisible() || 709 !other_state->window()->IsVisible() ||
711 !other_state->IsNormalOrSnapped() || !other_state->CanResize()) { 710 !other_state->IsNormalOrSnapped() || !other_state->CanResize()) {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 DCHECK(snapped_type == wm::WINDOW_STATE_TYPE_LEFT_SNAPPED || 948 DCHECK(snapped_type == wm::WINDOW_STATE_TYPE_LEFT_SNAPPED ||
950 snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED); 949 snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED);
951 gfx::Rect snapped_bounds = wm::GetDisplayWorkAreaBoundsInParent(GetTarget()); 950 gfx::Rect snapped_bounds = wm::GetDisplayWorkAreaBoundsInParent(GetTarget());
952 if (snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) 951 if (snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED)
953 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); 952 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width());
954 snapped_bounds.set_width(bounds_in_parent.width()); 953 snapped_bounds.set_width(bounds_in_parent.width());
955 return bounds_in_parent == snapped_bounds; 954 return bounds_in_parent == snapped_bounds;
956 } 955 }
957 956
958 } // namespace ash 957 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698