| 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/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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 } | 104 } |
| 105 return make_scoped_ptr<WindowResizer>(window_resizer); | 105 return make_scoped_ptr<WindowResizer>(window_resizer); |
| 106 } | 106 } |
| 107 | 107 |
| 108 namespace internal { | 108 namespace internal { |
| 109 | 109 |
| 110 namespace { | 110 namespace { |
| 111 | 111 |
| 112 // Returns true if the window should stick to the edge. | 112 // Returns true if the window should stick to the edge. |
| 113 bool ShouldStickToEdge(int distance_from_edge, int sticky_size) { | 113 bool ShouldStickToEdge(int distance_from_edge, int sticky_size) { |
| 114 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 115 switches::kAshEnableStickyEdges)) { | |
| 116 // TODO(varkha): Consider keeping snapping behavior for touch drag. | |
| 117 return distance_from_edge < 0 && | |
| 118 distance_from_edge > -sticky_size; | |
| 119 } | |
| 120 return distance_from_edge < sticky_size && | 114 return distance_from_edge < sticky_size && |
| 121 distance_from_edge > -sticky_size * 2; | 115 distance_from_edge > -sticky_size * 2; |
| 122 } | 116 } |
| 123 | 117 |
| 124 // Returns the coordinate along the secondary axis to snap to. | 118 // Returns the coordinate along the secondary axis to snap to. |
| 125 int CoordinateAlongSecondaryAxis(SecondaryMagnetismEdge edge, | 119 int CoordinateAlongSecondaryAxis(SecondaryMagnetismEdge edge, |
| 126 int leading, | 120 int leading, |
| 127 int trailing, | 121 int trailing, |
| 128 int none) { | 122 int none) { |
| 129 switch (edge) { | 123 switch (edge) { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 // static | 249 // static |
| 256 const int WorkspaceWindowResizer::kMinOnscreenSize = 20; | 250 const int WorkspaceWindowResizer::kMinOnscreenSize = 20; |
| 257 | 251 |
| 258 // static | 252 // static |
| 259 const int WorkspaceWindowResizer::kMinOnscreenHeight = 32; | 253 const int WorkspaceWindowResizer::kMinOnscreenHeight = 32; |
| 260 | 254 |
| 261 // static | 255 // static |
| 262 const int WorkspaceWindowResizer::kScreenEdgeInset = 8; | 256 const int WorkspaceWindowResizer::kScreenEdgeInset = 8; |
| 263 | 257 |
| 264 // static | 258 // static |
| 265 const int WorkspaceWindowResizer::kStickyDistancePixels = 64; | |
| 266 | |
| 267 // static | |
| 268 WorkspaceWindowResizer* WorkspaceWindowResizer::instance_ = NULL; | 259 WorkspaceWindowResizer* WorkspaceWindowResizer::instance_ = NULL; |
| 269 | 260 |
| 270 // Represents the width or height of a window with constraints on its minimum | 261 // Represents the width or height of a window with constraints on its minimum |
| 271 // and maximum size. 0 represents a lack of a constraint. | 262 // and maximum size. 0 represents a lack of a constraint. |
| 272 class WindowSize { | 263 class WindowSize { |
| 273 public: | 264 public: |
| 274 WindowSize(int size, int min, int max) | 265 WindowSize(int size, int min, int max) |
| 275 : size_(size), | 266 : size_(size), |
| 276 min_(min), | 267 min_(min), |
| 277 max_(max) { | 268 max_(max) { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 return new WorkspaceWindowResizer(window_state, attached_windows); | 343 return new WorkspaceWindowResizer(window_state, attached_windows); |
| 353 } | 344 } |
| 354 | 345 |
| 355 void WorkspaceWindowResizer::Drag(const gfx::Point& location_in_parent, | 346 void WorkspaceWindowResizer::Drag(const gfx::Point& location_in_parent, |
| 356 int event_flags) { | 347 int event_flags) { |
| 357 last_mouse_location_ = location_in_parent; | 348 last_mouse_location_ = location_in_parent; |
| 358 | 349 |
| 359 int sticky_size; | 350 int sticky_size; |
| 360 if (event_flags & ui::EF_CONTROL_DOWN) { | 351 if (event_flags & ui::EF_CONTROL_DOWN) { |
| 361 sticky_size = 0; | 352 sticky_size = 0; |
| 362 } else if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 363 switches::kAshEnableStickyEdges)) { | |
| 364 sticky_size = kStickyDistancePixels; | |
| 365 } else if ((details().bounds_change & kBoundsChange_Resizes) && | 353 } else if ((details().bounds_change & kBoundsChange_Resizes) && |
| 366 details().source == aura::client::WINDOW_MOVE_SOURCE_TOUCH) { | 354 details().source == aura::client::WINDOW_MOVE_SOURCE_TOUCH) { |
| 367 sticky_size = SnapSizer::kScreenEdgeInsetForTouchDrag; | 355 sticky_size = SnapSizer::kScreenEdgeInsetForTouchDrag; |
| 368 } else { | 356 } else { |
| 369 sticky_size = kScreenEdgeInset; | 357 sticky_size = kScreenEdgeInset; |
| 370 } | 358 } |
| 371 // |bounds| is in |GetTarget()->parent()|'s coordinates. | 359 // |bounds| is in |GetTarget()->parent()|'s coordinates. |
| 372 gfx::Rect bounds = CalculateBoundsForDrag(location_in_parent); | 360 gfx::Rect bounds = CalculateBoundsForDrag(location_in_parent); |
| 373 AdjustBoundsForMainWindow(sticky_size, &bounds); | 361 AdjustBoundsForMainWindow(sticky_size, &bounds); |
| 374 | 362 |
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 gfx::Rect snapped_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 1032 gfx::Rect snapped_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
| 1045 GetTarget()); | 1033 GetTarget()); |
| 1046 if (snapped_type == wm::SHOW_TYPE_RIGHT_SNAPPED) | 1034 if (snapped_type == wm::SHOW_TYPE_RIGHT_SNAPPED) |
| 1047 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); | 1035 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); |
| 1048 snapped_bounds.set_width(bounds_in_parent.width()); | 1036 snapped_bounds.set_width(bounds_in_parent.width()); |
| 1049 return bounds_in_parent == snapped_bounds; | 1037 return bounds_in_parent == snapped_bounds; |
| 1050 } | 1038 } |
| 1051 | 1039 |
| 1052 } // namespace internal | 1040 } // namespace internal |
| 1053 } // namespace ash | 1041 } // namespace ash |
| OLD | NEW |