| 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/ash_switches.h" | 9 #include "ash/ash_switches.h" |
| 10 #include "ash/screen_ash.h" | 10 #include "ash/screen_ash.h" |
| 11 #include "ash/wm/property_util.h" | |
| 12 #include "ash/wm/window_resizer.h" | 11 #include "ash/wm/window_resizer.h" |
| 12 #include "ash/wm/window_state.h" |
| 13 #include "ash/wm/window_util.h" | 13 #include "ash/wm/window_util.h" |
| 14 #include "ui/aura/window.h" | 14 #include "ui/aura/window.h" |
| 15 #include "ui/aura/window_delegate.h" | 15 #include "ui/aura/window_delegate.h" |
| 16 #include "ui/gfx/screen.h" | 16 #include "ui/gfx/screen.h" |
| 17 | 17 |
| 18 namespace ash { | 18 namespace ash { |
| 19 namespace internal { | 19 namespace internal { |
| 20 | 20 |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 input_type_(input_type), | 142 input_type_(input_type), |
| 143 usable_width_(BuildIdealWidthList(window)) { | 143 usable_width_(BuildIdealWidthList(window)) { |
| 144 DCHECK(!usable_width_.empty()); | 144 DCHECK(!usable_width_.empty()); |
| 145 target_bounds_ = GetTargetBounds(); | 145 target_bounds_ = GetTargetBounds(); |
| 146 } | 146 } |
| 147 | 147 |
| 148 SnapSizer::~SnapSizer() { | 148 SnapSizer::~SnapSizer() { |
| 149 } | 149 } |
| 150 | 150 |
| 151 void SnapSizer::SnapWindow(aura::Window* window, SnapSizer::Edge edge) { | 151 void SnapSizer::SnapWindow(aura::Window* window, SnapSizer::Edge edge) { |
| 152 if (!wm::CanSnapWindow(window)) | 152 wm::WindowState* window_state = wm::GetWindowState(window); |
| 153 if (!window_state->CanSnap()) |
| 153 return; | 154 return; |
| 154 internal::SnapSizer sizer(window, gfx::Point(), edge, | 155 internal::SnapSizer sizer(window, gfx::Point(), edge, |
| 155 internal::SnapSizer::OTHER_INPUT); | 156 internal::SnapSizer::OTHER_INPUT); |
| 156 if (wm::IsWindowFullscreen(window) || wm::IsWindowMaximized(window)) { | 157 if (window_state->IsMaximizedOrFullscreen()) { |
| 157 // Before we can set the bounds we need to restore the window. | 158 // Before we can set the bounds we need to restore the window. |
| 158 // Restoring the window will set the window to its restored bounds. | 159 // Restoring the window will set the window to its restored bounds. |
| 159 // To avoid an unnecessary bounds changes (which may have side effects) | 160 // To avoid an unnecessary bounds changes (which may have side effects) |
| 160 // we set the restore bounds to the bounds we want, restore the window, | 161 // we set the restore bounds to the bounds we want, restore the window, |
| 161 // then reset the restore bounds. This way no unnecessary bounds | 162 // then reset the restore bounds. This way no unnecessary bounds |
| 162 // changes occurs and the original restore bounds is remembered. | 163 // changes occurs and the original restore bounds is remembered. |
| 163 gfx::Rect restore = *GetRestoreBoundsInScreen(window); | 164 const gfx::Rect& restore = window_state->GetRestoreBoundsInScreen(); |
| 164 SetRestoreBoundsInParent(window, sizer.GetSnapBounds(window->bounds())); | 165 window_state->SetRestoreBoundsInParent( |
| 165 wm::RestoreWindow(window); | 166 sizer.GetSnapBounds(window->bounds())); |
| 166 SetRestoreBoundsInScreen(window, restore); | 167 window_state->Restore(); |
| 168 window_state->SetRestoreBoundsInScreen(restore); |
| 167 } else { | 169 } else { |
| 168 window->SetBounds(sizer.GetSnapBounds(window->bounds())); | 170 window->SetBounds(sizer.GetSnapBounds(window->bounds())); |
| 169 } | 171 } |
| 170 } | 172 } |
| 171 | 173 |
| 172 void SnapSizer::Update(const gfx::Point& location) { | 174 void SnapSizer::Update(const gfx::Point& location) { |
| 173 // See description above for details on this behavior. | 175 // See description above for details on this behavior. |
| 174 num_moves_since_adjust_++; | 176 num_moves_since_adjust_++; |
| 175 if ((base::TimeTicks::Now() - time_last_update_).InMilliseconds() > | 177 if ((base::TimeTicks::Now() - time_last_update_).InMilliseconds() > |
| 176 kDelayBeforeIncreaseMS) { | 178 kDelayBeforeIncreaseMS) { |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 return GetTargetBoundsForSize(size_index_); | 280 return GetTargetBoundsForSize(size_index_); |
| 279 } | 281 } |
| 280 | 282 |
| 281 bool SnapSizer::AlongEdge(int x) const { | 283 bool SnapSizer::AlongEdge(int x) const { |
| 282 gfx::Rect area(ScreenAsh::GetDisplayWorkAreaBoundsInParent(window_)); | 284 gfx::Rect area(ScreenAsh::GetDisplayWorkAreaBoundsInParent(window_)); |
| 283 return (x <= area.x()) || (x >= area.right() - 1); | 285 return (x <= area.x()) || (x >= area.right() - 1); |
| 284 } | 286 } |
| 285 | 287 |
| 286 } // namespace internal | 288 } // namespace internal |
| 287 } // namespace ash | 289 } // namespace ash |
| OLD | NEW |