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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 w = src.right() - x; | 217 w = src.right() - x; |
218 } else if (edge.secondary_edge == SECONDARY_MAGNETISM_EDGE_TRAILING) { | 218 } else if (edge.secondary_edge == SECONDARY_MAGNETISM_EDGE_TRAILING) { |
219 w += attach_origin.x() - src.x(); | 219 w += attach_origin.x() - src.x(); |
220 } | 220 } |
221 break; | 221 break; |
222 } | 222 } |
223 return gfx::Rect(x, y, w, h); | 223 return gfx::Rect(x, y, w, h); |
224 } | 224 } |
225 | 225 |
226 // Converts a window component edge to the magnetic edge to snap to. | 226 // Converts a window component edge to the magnetic edge to snap to. |
227 uint32 WindowComponentToMagneticEdge(int window_component) { | 227 uint32_t WindowComponentToMagneticEdge(int window_component) { |
228 switch (window_component) { | 228 switch (window_component) { |
229 case HTTOPLEFT: | 229 case HTTOPLEFT: |
230 return MAGNETISM_EDGE_LEFT | MAGNETISM_EDGE_TOP; | 230 return MAGNETISM_EDGE_LEFT | MAGNETISM_EDGE_TOP; |
231 case HTTOPRIGHT: | 231 case HTTOPRIGHT: |
232 return MAGNETISM_EDGE_TOP | MAGNETISM_EDGE_RIGHT; | 232 return MAGNETISM_EDGE_TOP | MAGNETISM_EDGE_RIGHT; |
233 case HTBOTTOMLEFT: | 233 case HTBOTTOMLEFT: |
234 return MAGNETISM_EDGE_LEFT | MAGNETISM_EDGE_BOTTOM; | 234 return MAGNETISM_EDGE_LEFT | MAGNETISM_EDGE_BOTTOM; |
235 case HTBOTTOMRIGHT: | 235 case HTBOTTOMRIGHT: |
236 return MAGNETISM_EDGE_RIGHT | MAGNETISM_EDGE_BOTTOM; | 236 return MAGNETISM_EDGE_RIGHT | MAGNETISM_EDGE_BOTTOM; |
237 case HTTOP: | 237 case HTTOP: |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 magnetism_window_->GetBoundsInScreen(), | 710 magnetism_window_->GetBoundsInScreen(), |
711 magnetism_edge_); | 711 magnetism_edge_); |
712 aura::client::GetScreenPositionClient(GetTarget()->GetRootWindow())-> | 712 aura::client::GetScreenPositionClient(GetTarget()->GetRootWindow())-> |
713 ConvertPointFromScreen(GetTarget()->parent(), &point); | 713 ConvertPointFromScreen(GetTarget()->parent(), &point); |
714 bounds->set_origin(point); | 714 bounds->set_origin(point); |
715 } | 715 } |
716 } | 716 } |
717 | 717 |
718 void WorkspaceWindowResizer::MagneticallySnapResizeToOtherWindows( | 718 void WorkspaceWindowResizer::MagneticallySnapResizeToOtherWindows( |
719 gfx::Rect* bounds) { | 719 gfx::Rect* bounds) { |
720 const uint32 edges = WindowComponentToMagneticEdge( | 720 const uint32_t edges = |
721 details().window_component); | 721 WindowComponentToMagneticEdge(details().window_component); |
722 if (UpdateMagnetismWindow(*bounds, edges)) { | 722 if (UpdateMagnetismWindow(*bounds, edges)) { |
723 *bounds = ScreenUtil::ConvertRectFromScreen( | 723 *bounds = ScreenUtil::ConvertRectFromScreen( |
724 GetTarget()->parent(), | 724 GetTarget()->parent(), |
725 BoundsForMagneticResizeAttach( | 725 BoundsForMagneticResizeAttach( |
726 ScreenUtil::ConvertRectToScreen(GetTarget()->parent(), *bounds), | 726 ScreenUtil::ConvertRectToScreen(GetTarget()->parent(), *bounds), |
727 magnetism_window_->GetBoundsInScreen(), | 727 magnetism_window_->GetBoundsInScreen(), |
728 magnetism_edge_)); | 728 magnetism_edge_)); |
729 } | 729 } |
730 } | 730 } |
731 | 731 |
732 bool WorkspaceWindowResizer::UpdateMagnetismWindow(const gfx::Rect& bounds, | 732 bool WorkspaceWindowResizer::UpdateMagnetismWindow(const gfx::Rect& bounds, |
733 uint32 edges) { | 733 uint32_t edges) { |
734 // |bounds| are in coordinates of original window's parent. | 734 // |bounds| are in coordinates of original window's parent. |
735 gfx::Rect bounds_in_screen = | 735 gfx::Rect bounds_in_screen = |
736 ScreenUtil::ConvertRectToScreen(GetTarget()->parent(), bounds); | 736 ScreenUtil::ConvertRectToScreen(GetTarget()->parent(), bounds); |
737 MagnetismMatcher matcher(bounds_in_screen, edges); | 737 MagnetismMatcher matcher(bounds_in_screen, edges); |
738 | 738 |
739 // If we snapped to a window then check it first. That way we don't bounce | 739 // If we snapped to a window then check it first. That way we don't bounce |
740 // around when close to multiple edges. | 740 // around when close to multiple edges. |
741 if (magnetism_window_) { | 741 if (magnetism_window_) { |
742 if (window_tracker_.Contains(magnetism_window_) && | 742 if (window_tracker_.Contains(magnetism_window_) && |
743 matcher.ShouldAttach(magnetism_window_->GetBoundsInScreen(), | 743 matcher.ShouldAttach(magnetism_window_->GetBoundsInScreen(), |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 bounds->set_y(bottom_edge - bounds->height()); | 858 bounds->set_y(bottom_edge - bounds->height()); |
859 updated = true; | 859 updated = true; |
860 } | 860 } |
861 return updated; | 861 return updated; |
862 } | 862 } |
863 | 863 |
864 void WorkspaceWindowResizer::StickToWorkAreaOnResize( | 864 void WorkspaceWindowResizer::StickToWorkAreaOnResize( |
865 const gfx::Rect& work_area, | 865 const gfx::Rect& work_area, |
866 int sticky_size, | 866 int sticky_size, |
867 gfx::Rect* bounds) const { | 867 gfx::Rect* bounds) const { |
868 const uint32 edges = WindowComponentToMagneticEdge( | 868 const uint32_t edges = |
869 details().window_component); | 869 WindowComponentToMagneticEdge(details().window_component); |
870 const int left_edge = work_area.x(); | 870 const int left_edge = work_area.x(); |
871 const int right_edge = work_area.right(); | 871 const int right_edge = work_area.right(); |
872 const int top_edge = work_area.y(); | 872 const int top_edge = work_area.y(); |
873 const int bottom_edge = work_area.bottom(); | 873 const int bottom_edge = work_area.bottom(); |
874 if (edges & MAGNETISM_EDGE_TOP && | 874 if (edges & MAGNETISM_EDGE_TOP && |
875 ShouldStickToEdge(bounds->y() - top_edge, sticky_size)) { | 875 ShouldStickToEdge(bounds->y() - top_edge, sticky_size)) { |
876 bounds->set_height(bounds->bottom() - top_edge); | 876 bounds->set_height(bounds->bottom() - top_edge); |
877 bounds->set_y(top_edge); | 877 bounds->set_y(top_edge); |
878 } | 878 } |
879 if (edges & MAGNETISM_EDGE_LEFT && | 879 if (edges & MAGNETISM_EDGE_LEFT && |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1055 snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED); | 1055 snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED); |
1056 gfx::Rect snapped_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 1056 gfx::Rect snapped_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
1057 GetTarget()); | 1057 GetTarget()); |
1058 if (snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) | 1058 if (snapped_type == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) |
1059 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); | 1059 snapped_bounds.set_x(snapped_bounds.right() - bounds_in_parent.width()); |
1060 snapped_bounds.set_width(bounds_in_parent.width()); | 1060 snapped_bounds.set_width(bounds_in_parent.width()); |
1061 return bounds_in_parent == snapped_bounds; | 1061 return bounds_in_parent == snapped_bounds; |
1062 } | 1062 } |
1063 | 1063 |
1064 } // namespace ash | 1064 } // namespace ash |
OLD | NEW |