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/window_resizer.h" | 10 #include "ash/wm/window_resizer.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 const int kPixelsBeforeAdjust = 100; | 31 const int kPixelsBeforeAdjust = 100; |
32 | 32 |
33 // When the smallest resolution does not fit on the screen, we take this | 33 // When the smallest resolution does not fit on the screen, we take this |
34 // fraction of the available space. | 34 // fraction of the available space. |
35 const int kMinimumScreenPercent = 90; | 35 const int kMinimumScreenPercent = 90; |
36 | 36 |
37 } // namespace | 37 } // namespace |
38 | 38 |
39 SnapSizer::SnapSizer(aura::Window* window, | 39 SnapSizer::SnapSizer(aura::Window* window, |
40 const gfx::Point& start, | 40 const gfx::Point& start, |
41 Edge edge, | 41 Edge edge) |
42 int grid_size) | |
43 : window_(window), | 42 : window_(window), |
44 edge_(edge), | 43 edge_(edge), |
45 grid_size_(grid_size), | |
46 time_last_update_(base::TimeTicks::Now()), | 44 time_last_update_(base::TimeTicks::Now()), |
47 size_index_(0), | 45 size_index_(0), |
48 resize_disabled_(false), | 46 resize_disabled_(false), |
49 num_moves_since_adjust_(0), | 47 num_moves_since_adjust_(0), |
50 last_adjust_x_(start.x()), | 48 last_adjust_x_(start.x()), |
51 last_update_x_(start.x()) { | 49 last_update_x_(start.x()) { |
52 target_bounds_ = GetTargetBounds(); | 50 target_bounds_ = GetTargetBounds(); |
53 } | 51 } |
54 | 52 |
55 void SnapSizer::Update(const gfx::Point& location) { | 53 void SnapSizer::Update(const gfx::Point& location) { |
(...skipping 30 matching lines...) Expand all Loading... |
86 } | 84 } |
87 | 85 |
88 void SnapSizer::SelectDefaultSizeAndDisableResize() { | 86 void SnapSizer::SelectDefaultSizeAndDisableResize() { |
89 resize_disabled_ = true; | 87 resize_disabled_ = true; |
90 size_index_ = 0; | 88 size_index_ = 0; |
91 target_bounds_ = GetTargetBounds(); | 89 target_bounds_ = GetTargetBounds(); |
92 } | 90 } |
93 | 91 |
94 gfx::Rect SnapSizer::GetTargetBoundsForSize(size_t size_index) const { | 92 gfx::Rect SnapSizer::GetTargetBoundsForSize(size_t size_index) const { |
95 gfx::Rect work_area(ScreenAsh::GetUnmaximizedWorkAreaBoundsInParent(window_)); | 93 gfx::Rect work_area(ScreenAsh::GetUnmaximizedWorkAreaBoundsInParent(window_)); |
96 int y = WindowResizer::AlignToGridRoundUp(work_area.y(), grid_size_); | 94 int y = work_area.y(); |
97 // We don't align to the bottom of the grid as the launcher may not | 95 // We don't align to the bottom of the grid as the launcher may not |
98 // necessarily align to the grid (happens when auto-hidden). | 96 // necessarily align to the grid (happens when auto-hidden). |
99 int max_y = work_area.bottom(); | 97 int max_y = work_area.bottom(); |
100 int width = kSizes[size_index]; | 98 int width = kSizes[size_index]; |
101 if (resize_disabled_) { | 99 if (resize_disabled_) { |
102 width = std::max(1024, work_area.width() / 2); | 100 width = std::max(1024, work_area.width() / 2); |
103 } else { | 101 } else { |
104 while (width >= work_area.width()) { | 102 while (width >= work_area.width()) { |
105 if (size_index >= arraysize(kSizes)) | 103 if (size_index >= arraysize(kSizes)) |
106 break; | 104 break; |
107 width = kSizes[++size_index]; | 105 width = kSizes[++size_index]; |
108 } | 106 } |
109 } | 107 } |
110 | 108 |
111 // Make sure that we keep the size of the window smaller then a certain | 109 // Make sure that we keep the size of the window smaller then a certain |
112 // fraction of the screen space. | 110 // fraction of the screen space. |
113 width = std::min(width, kMinimumScreenPercent * work_area.width() / 100); | 111 width = std::min(width, kMinimumScreenPercent * work_area.width() / 100); |
114 | 112 |
115 if (edge_ == LEFT_EDGE) { | 113 if (edge_ == LEFT_EDGE) { |
116 int x = WindowResizer::AlignToGridRoundUp(work_area.x(), grid_size_); | 114 int x = work_area.x(); |
117 int mid_x = WindowResizer::AlignToGridRoundUp( | 115 int mid_x = x + width; |
118 work_area.x() + width, grid_size_); | |
119 return gfx::Rect(x, y, mid_x - x, max_y - y); | 116 return gfx::Rect(x, y, mid_x - x, max_y - y); |
120 } | 117 } |
121 int max_x = | 118 int max_x = work_area.right(); |
122 WindowResizer::AlignToGridRoundDown(work_area.right(), grid_size_); | 119 int x = max_x - width; |
123 int x = WindowResizer::AlignToGridRoundUp(max_x - width, grid_size_); | |
124 return gfx::Rect(x , y, max_x - x, max_y - y); | 120 return gfx::Rect(x , y, max_x - x, max_y - y); |
125 } | 121 } |
126 | 122 |
127 int SnapSizer::CalculateIncrement(int x, int reference_x) const { | 123 int SnapSizer::CalculateIncrement(int x, int reference_x) const { |
128 if (AlongEdge(x)) | 124 if (AlongEdge(x)) |
129 return 1; | 125 return 1; |
130 if (x == reference_x) | 126 if (x == reference_x) |
131 return 0; | 127 return 0; |
132 if (edge_ == LEFT_EDGE) { | 128 if (edge_ == LEFT_EDGE) { |
133 if (x < reference_x) | 129 if (x < reference_x) |
(...skipping 21 matching lines...) Expand all Loading... |
155 return GetTargetBoundsForSize(size_index_); | 151 return GetTargetBoundsForSize(size_index_); |
156 } | 152 } |
157 | 153 |
158 bool SnapSizer::AlongEdge(int x) const { | 154 bool SnapSizer::AlongEdge(int x) const { |
159 gfx::Rect area(ScreenAsh::GetDisplayBoundsInParent(window_)); | 155 gfx::Rect area(ScreenAsh::GetDisplayBoundsInParent(window_)); |
160 return (x <= area.x()) || (x >= area.right() - 1); | 156 return (x <= area.x()) || (x >= area.right() - 1); |
161 } | 157 } |
162 | 158 |
163 } // namespace internal | 159 } // namespace internal |
164 } // namespace ash | 160 } // namespace ash |
OLD | NEW |