| 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/snap_sizer.h" | 5 #include "ash/wm/workspace/snap_sizer.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "ash/screen_ash.h" | 9 #include "ash/screen_ash.h" |
| 10 #include "ash/wm/property_util.h" |
| 10 #include "ash/wm/window_resizer.h" | 11 #include "ash/wm/window_resizer.h" |
| 12 #include "ash/wm/window_util.h" |
| 11 #include "ui/aura/window.h" | 13 #include "ui/aura/window.h" |
| 12 #include "ui/gfx/screen.h" | 14 #include "ui/gfx/screen.h" |
| 13 | 15 |
| 14 namespace ash { | 16 namespace ash { |
| 15 namespace internal { | 17 namespace internal { |
| 16 | 18 |
| 17 namespace { | 19 namespace { |
| 18 | 20 |
| 19 // A list of ideal window width in pixel which will be used to populate the | 21 // A list of ideal window width in pixel which will be used to populate the |
| 20 // |usable_width_| list. | 22 // |usable_width_| list. |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 start_x_(start.x()), | 81 start_x_(start.x()), |
| 80 input_type_(input_type), | 82 input_type_(input_type), |
| 81 usable_width_(BuildIdealWidthList(window)) { | 83 usable_width_(BuildIdealWidthList(window)) { |
| 82 DCHECK(!usable_width_.empty()); | 84 DCHECK(!usable_width_.empty()); |
| 83 target_bounds_ = GetTargetBounds(); | 85 target_bounds_ = GetTargetBounds(); |
| 84 } | 86 } |
| 85 | 87 |
| 86 SnapSizer::~SnapSizer() { | 88 SnapSizer::~SnapSizer() { |
| 87 } | 89 } |
| 88 | 90 |
| 91 void SnapSizer::SnapWindow(aura::Window* window, SnapSizer::Edge edge) { |
| 92 if (!wm::CanSnapWindow(window)) |
| 93 return; |
| 94 internal::SnapSizer sizer(window, gfx::Point(), edge, |
| 95 internal::SnapSizer::OTHER_INPUT); |
| 96 if (wm::IsWindowFullscreen(window) || wm::IsWindowMaximized(window)) { |
| 97 // Before we can set the bounds we need to restore the window. |
| 98 // Restoring the window will set the window to its restored bounds. |
| 99 // To avoid an unnecessary bounds changes (which may have side effects) |
| 100 // we set the restore bounds to the bounds we want, restore the window, |
| 101 // then reset the restore bounds. This way no unnecessary bounds |
| 102 // changes occurs and the original restore bounds is remembered. |
| 103 gfx::Rect restore = *GetRestoreBoundsInScreen(window); |
| 104 SetRestoreBoundsInParent(window, sizer.GetSnapBounds(window->bounds())); |
| 105 wm::RestoreWindow(window); |
| 106 SetRestoreBoundsInScreen(window, restore); |
| 107 } else { |
| 108 window->SetBounds(sizer.GetSnapBounds(window->bounds())); |
| 109 } |
| 110 } |
| 111 |
| 89 void SnapSizer::Update(const gfx::Point& location) { | 112 void SnapSizer::Update(const gfx::Point& location) { |
| 90 // See description above for details on this behavior. | 113 // See description above for details on this behavior. |
| 91 num_moves_since_adjust_++; | 114 num_moves_since_adjust_++; |
| 92 if ((base::TimeTicks::Now() - time_last_update_).InMilliseconds() > | 115 if ((base::TimeTicks::Now() - time_last_update_).InMilliseconds() > |
| 93 kDelayBeforeIncreaseMS) { | 116 kDelayBeforeIncreaseMS) { |
| 94 ChangeBounds(location.x(), | 117 ChangeBounds(location.x(), |
| 95 CalculateIncrement(location.x(), last_update_x_)); | 118 CalculateIncrement(location.x(), last_update_x_)); |
| 96 } else { | 119 } else { |
| 97 bool along_edge = AlongEdge(location.x()); | 120 bool along_edge = AlongEdge(location.x()); |
| 98 int pixels_before_adjust = kPixelsBeforeAdjust; | 121 int pixels_before_adjust = kPixelsBeforeAdjust; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 return GetTargetBoundsForSize(size_index_); | 218 return GetTargetBoundsForSize(size_index_); |
| 196 } | 219 } |
| 197 | 220 |
| 198 bool SnapSizer::AlongEdge(int x) const { | 221 bool SnapSizer::AlongEdge(int x) const { |
| 199 gfx::Rect area(ScreenAsh::GetDisplayBoundsInParent(window_)); | 222 gfx::Rect area(ScreenAsh::GetDisplayBoundsInParent(window_)); |
| 200 return (x <= area.x()) || (x >= area.right() - 1); | 223 return (x <= area.x()) || (x >= area.right() - 1); |
| 201 } | 224 } |
| 202 | 225 |
| 203 } // namespace internal | 226 } // namespace internal |
| 204 } // namespace ash | 227 } // namespace ash |
| OLD | NEW |