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 | 9 |
10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 aura::Window* window, | 53 aura::Window* window, |
54 const gfx::Point& location, | 54 const gfx::Point& location, |
55 int window_component, | 55 int window_component, |
56 int grid_size, | 56 int grid_size, |
57 const std::vector<aura::Window*>& attached_windows) { | 57 const std::vector<aura::Window*>& attached_windows) { |
58 Details details(window, location, window_component, grid_size); | 58 Details details(window, location, window_component, grid_size); |
59 return details.is_resizable ? | 59 return details.is_resizable ? |
60 new WorkspaceWindowResizer(details, attached_windows) : NULL; | 60 new WorkspaceWindowResizer(details, attached_windows) : NULL; |
61 } | 61 } |
62 | 62 |
63 void WorkspaceWindowResizer::Drag(const gfx::Point& location) { | 63 void WorkspaceWindowResizer::Drag(const gfx::Point& location, int event_flags) { |
64 gfx::Rect bounds = CalculateBoundsForDrag(details_, location); | 64 bool disable_snap_to_grid = event_flags & ui::EF_CONTROL_DOWN ? true : false; |
| 65 gfx::Rect bounds = |
| 66 CalculateBoundsForDrag(details_, location, disable_snap_to_grid); |
| 67 |
65 if (wm::IsWindowNormal(details_.window)) | 68 if (wm::IsWindowNormal(details_.window)) |
66 AdjustBoundsForMainWindow(&bounds); | 69 AdjustBoundsForMainWindow(&bounds); |
67 if (bounds != details_.window->bounds()) { | 70 if (bounds != details_.window->bounds()) { |
68 if (!did_move_or_resize_) | 71 if (!did_move_or_resize_) |
69 RestackWindows(); | 72 RestackWindows(); |
70 did_move_or_resize_ = true; | 73 did_move_or_resize_ = true; |
71 } | 74 } |
72 UpdatePhantomWindow(location, bounds); | 75 UpdatePhantomWindow(location, bounds); |
73 if (!attached_windows_.empty()) | 76 if (!attached_windows_.empty()) |
74 LayoutAttachedWindows(bounds); | 77 LayoutAttachedWindows(bounds); |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 gfx::Rect area(gfx::Screen::GetMonitorAreaNearestWindow(details_.window)); | 418 gfx::Rect area(gfx::Screen::GetMonitorAreaNearestWindow(details_.window)); |
416 if (location.x() <= area.x()) | 419 if (location.x() <= area.x()) |
417 return SNAP_LEFT_EDGE; | 420 return SNAP_LEFT_EDGE; |
418 if (location.x() >= area.right() - 1) | 421 if (location.x() >= area.right() - 1) |
419 return SNAP_RIGHT_EDGE; | 422 return SNAP_RIGHT_EDGE; |
420 return SNAP_NONE; | 423 return SNAP_NONE; |
421 } | 424 } |
422 | 425 |
423 } // namespace internal | 426 } // namespace internal |
424 } // namespace ash | 427 } // namespace ash |
OLD | NEW |