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

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

Issue 55363004: Enables docked windows by default (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Enables docked window flag by default (comments) Created 7 years, 1 month 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>
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 window, point_in_parent, window_component, source); 88 window, point_in_parent, window_component, source);
89 } 89 }
90 if (window_resizer) { 90 if (window_resizer) {
91 window_resizer = internal::DragWindowResizer::Create( 91 window_resizer = internal::DragWindowResizer::Create(
92 window_resizer, window, point_in_parent, window_component, source); 92 window_resizer, window, point_in_parent, window_component, source);
93 } 93 }
94 if (window_resizer && window->type() == aura::client::WINDOW_TYPE_PANEL) { 94 if (window_resizer && window->type() == aura::client::WINDOW_TYPE_PANEL) {
95 window_resizer = PanelWindowResizer::Create( 95 window_resizer = PanelWindowResizer::Create(
96 window_resizer, window, point_in_parent, window_component, source); 96 window_resizer, window, point_in_parent, window_component, source);
97 } 97 }
98 if (CommandLine::ForCurrentProcess()->HasSwitch( 98 if (switches::UseDockedWindows() &&
99 switches::kAshEnableDockedWindows) &&
100 window_resizer && window->parent() && 99 window_resizer && window->parent() &&
101 !window->transient_parent() && 100 !window->transient_parent() &&
102 (window->parent()->id() == internal::kShellWindowId_DefaultContainer || 101 (window->parent()->id() == internal::kShellWindowId_DefaultContainer ||
103 window->parent()->id() == internal::kShellWindowId_DockedContainer || 102 window->parent()->id() == internal::kShellWindowId_DockedContainer ||
104 window->parent()->id() == internal::kShellWindowId_PanelContainer)) { 103 window->parent()->id() == internal::kShellWindowId_PanelContainer)) {
105 window_resizer = internal::DockedWindowResizer::Create( 104 window_resizer = internal::DockedWindowResizer::Create(
106 window_resizer, window, point_in_parent, window_component, source); 105 window_resizer, window, point_in_parent, window_component, source);
107 } 106 }
108 window_state->set_window_resizer_(window_resizer); 107 window_state->set_window_resizer_(window_resizer);
109 return make_scoped_ptr<WindowResizer>(window_resizer); 108 return make_scoped_ptr<WindowResizer>(window_resizer);
110 } 109 }
111 110
112 namespace internal { 111 namespace internal {
113 112
114 namespace { 113 namespace {
115 114
116 // Snapping distance used instead of WorkspaceWindowResizer::kScreenEdgeInset 115 // Snapping distance used instead of WorkspaceWindowResizer::kScreenEdgeInset
117 // when resizing a window using touchscreen. 116 // when resizing a window using touchscreen.
118 const int kScreenEdgeInsetForTouchResize = 32; 117 const int kScreenEdgeInsetForTouchResize = 32;
119 118
120 // Returns true if the window should stick to the edge. 119 // Returns true if the window should stick to the edge.
121 bool ShouldStickToEdge(int distance_from_edge, int sticky_size) { 120 bool ShouldStickToEdge(int distance_from_edge, int sticky_size) {
122 if (CommandLine::ForCurrentProcess()->HasSwitch( 121 if (CommandLine::ForCurrentProcess()->HasSwitch(
123 switches::kAshEnableStickyEdges) || 122 switches::kAshEnableStickyEdges)) {
124 CommandLine::ForCurrentProcess()->HasSwitch( 123 // TODO(varkha): Consider keeping snapping behavior for touch drag.
125 switches::kAshEnableDockedWindows)) {
126 return distance_from_edge < 0 && 124 return distance_from_edge < 0 &&
127 distance_from_edge > -sticky_size; 125 distance_from_edge > -sticky_size;
128 } 126 }
129 return distance_from_edge < sticky_size && 127 return distance_from_edge < sticky_size &&
130 distance_from_edge > -sticky_size * 2; 128 distance_from_edge > -sticky_size * 2;
131 } 129 }
132 130
133 // Returns the coordinate along the secondary axis to snap to. 131 // Returns the coordinate along the secondary axis to snap to.
134 int CoordinateAlongSecondaryAxis(SecondaryMagnetismEdge edge, 132 int CoordinateAlongSecondaryAxis(SecondaryMagnetismEdge edge,
135 int leading, 133 int leading,
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 264
267 // static 265 // static
268 const int WorkspaceWindowResizer::kMinOnscreenHeight = 32; 266 const int WorkspaceWindowResizer::kMinOnscreenHeight = 32;
269 267
270 // static 268 // static
271 const int WorkspaceWindowResizer::kScreenEdgeInset = 8; 269 const int WorkspaceWindowResizer::kScreenEdgeInset = 8;
272 270
273 // static 271 // static
274 const int WorkspaceWindowResizer::kStickyDistancePixels = 64; 272 const int WorkspaceWindowResizer::kStickyDistancePixels = 64;
275 273
274 // static
275 WorkspaceWindowResizer* WorkspaceWindowResizer::instance_ = NULL;
276
276 // Represents the width or height of a window with constraints on its minimum 277 // Represents the width or height of a window with constraints on its minimum
277 // and maximum size. 0 represents a lack of a constraint. 278 // and maximum size. 0 represents a lack of a constraint.
278 class WindowSize { 279 class WindowSize {
279 public: 280 public:
280 WindowSize(int size, int min, int max) 281 WindowSize(int size, int min, int max)
281 : size_(size), 282 : size_(size),
282 min_(min), 283 min_(min),
283 max_(max) { 284 max_(max) {
284 // Grow the min/max bounds to include the starting size. 285 // Grow the min/max bounds to include the starting size.
285 if (is_underflowing()) 286 if (is_underflowing())
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 339
339 private: 340 private:
340 int size_; 341 int size_;
341 int min_; 342 int min_;
342 int max_; 343 int max_;
343 }; 344 };
344 345
345 WorkspaceWindowResizer::~WorkspaceWindowResizer() { 346 WorkspaceWindowResizer::~WorkspaceWindowResizer() {
346 Shell* shell = Shell::GetInstance(); 347 Shell* shell = Shell::GetInstance();
347 shell->cursor_manager()->UnlockCursor(); 348 shell->cursor_manager()->UnlockCursor();
349 if (instance_ == this)
350 instance_ = NULL;
348 } 351 }
349 352
350 // static 353 // static
351 WorkspaceWindowResizer* WorkspaceWindowResizer::Create( 354 WorkspaceWindowResizer* WorkspaceWindowResizer::Create(
352 aura::Window* window, 355 aura::Window* window,
353 const gfx::Point& location_in_parent, 356 const gfx::Point& location_in_parent,
354 int window_component, 357 int window_component,
355 aura::client::WindowMoveSource source, 358 aura::client::WindowMoveSource source,
356 const std::vector<aura::Window*>& attached_windows) { 359 const std::vector<aura::Window*>& attached_windows) {
357 Details details(window, location_in_parent, window_component, source); 360 Details details(window, location_in_parent, window_component, source);
358 return details.is_resizable ? 361 return details.is_resizable ?
359 new WorkspaceWindowResizer(details, attached_windows) : NULL; 362 new WorkspaceWindowResizer(details, attached_windows) : NULL;
360 } 363 }
361 364
362 void WorkspaceWindowResizer::Drag(const gfx::Point& location_in_parent, 365 void WorkspaceWindowResizer::Drag(const gfx::Point& location_in_parent,
363 int event_flags) { 366 int event_flags) {
364 last_mouse_location_ = location_in_parent; 367 last_mouse_location_ = location_in_parent;
365 368
366 int sticky_size; 369 int sticky_size;
367 if (event_flags & ui::EF_CONTROL_DOWN) { 370 if (event_flags & ui::EF_CONTROL_DOWN) {
368 sticky_size = 0; 371 sticky_size = 0;
369 } else if (CommandLine::ForCurrentProcess()->HasSwitch( 372 } else if (CommandLine::ForCurrentProcess()->HasSwitch(
370 switches::kAshEnableStickyEdges) || 373 switches::kAshEnableStickyEdges)) {
371 CommandLine::ForCurrentProcess()->HasSwitch(
372 switches::kAshEnableDockedWindows)) {
373 sticky_size = kStickyDistancePixels; 374 sticky_size = kStickyDistancePixels;
374 } else if ((details_.bounds_change & kBoundsChange_Resizes) && 375 } else if ((details_.bounds_change & kBoundsChange_Resizes) &&
375 details_.source == aura::client::WINDOW_MOVE_SOURCE_TOUCH) { 376 details_.source == aura::client::WINDOW_MOVE_SOURCE_TOUCH) {
376 sticky_size = kScreenEdgeInsetForTouchResize; 377 sticky_size = kScreenEdgeInsetForTouchResize;
377 } else { 378 } else {
378 sticky_size = kScreenEdgeInset; 379 sticky_size = kScreenEdgeInset;
379 } 380 }
380 // |bounds| is in |window()->parent()|'s coordinates. 381 // |bounds| is in |window()->parent()|'s coordinates.
381 gfx::Rect bounds = CalculateBoundsForDrag(details_, location_in_parent); 382 gfx::Rect bounds = CalculateBoundsForDrag(details_, location_in_parent);
382 if (window_state()->IsNormalShowState()) 383 if (window_state()->IsNormalShowState())
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 int initial_size = PrimaryAxisSize(attached_windows_[i]->bounds().size()); 536 int initial_size = PrimaryAxisSize(attached_windows_[i]->bounds().size());
536 initial_size_.push_back(initial_size); 537 initial_size_.push_back(initial_size);
537 // If current size is smaller than the min, use the current size as the min. 538 // If current size is smaller than the min, use the current size as the min.
538 // This way we don't snap on resize. 539 // This way we don't snap on resize.
539 int min_size = std::min(initial_size, 540 int min_size = std::min(initial_size,
540 std::max(PrimaryAxisSize(min), kMinOnscreenSize)); 541 std::max(PrimaryAxisSize(min), kMinOnscreenSize));
541 total_min_ += min_size; 542 total_min_ += min_size;
542 total_initial_size_ += initial_size; 543 total_initial_size_ += initial_size;
543 total_available += std::max(min_size, initial_size) - min_size; 544 total_available += std::max(min_size, initial_size) - min_size;
544 } 545 }
546 instance_ = this;
545 } 547 }
546 548
547 gfx::Rect WorkspaceWindowResizer::GetFinalBounds( 549 gfx::Rect WorkspaceWindowResizer::GetFinalBounds(
548 const gfx::Rect& bounds) const { 550 const gfx::Rect& bounds) const {
549 if (snap_phantom_window_controller_.get() && 551 if (snap_phantom_window_controller_.get() &&
550 snap_phantom_window_controller_->IsShowing()) { 552 snap_phantom_window_controller_->IsShowing()) {
551 return snap_phantom_window_controller_->bounds_in_screen(); 553 return snap_phantom_window_controller_->bounds_in_screen();
552 } 554 }
553 return bounds; 555 return bounds;
554 } 556 }
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 if (!dock_layout_->is_dragged_window_docked()) 1011 if (!dock_layout_->is_dragged_window_docked())
1010 dock_layout_->DockDraggedWindow(window()); 1012 dock_layout_->DockDraggedWindow(window());
1011 } else { 1013 } else {
1012 if (dock_layout_->is_dragged_window_docked()) 1014 if (dock_layout_->is_dragged_window_docked())
1013 dock_layout_->UndockDraggedWindow(); 1015 dock_layout_->UndockDraggedWindow();
1014 } 1016 }
1015 } 1017 }
1016 1018
1017 } // namespace internal 1019 } // namespace internal
1018 } // namespace ash 1020 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698