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 "ash/ash_constants.h" | 7 #include "ash/ash_constants.h" |
8 #include "ash/ash_switches.h" | 8 #include "ash/ash_switches.h" |
9 #include "ash/display/display_manager.h" | 9 #include "ash/display/display_manager.h" |
10 #include "ash/root_window_controller.h" | 10 #include "ash/root_window_controller.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "base/strings/stringprintf.h" | 23 #include "base/strings/stringprintf.h" |
24 #include "ui/aura/client/aura_constants.h" | 24 #include "ui/aura/client/aura_constants.h" |
25 #include "ui/aura/root_window.h" | 25 #include "ui/aura/root_window.h" |
26 #include "ui/aura/test/event_generator.h" | 26 #include "ui/aura/test/event_generator.h" |
27 #include "ui/aura/test/test_window_delegate.h" | 27 #include "ui/aura/test/test_window_delegate.h" |
28 #include "ui/base/hit_test.h" | 28 #include "ui/base/hit_test.h" |
29 #include "ui/gfx/insets.h" | 29 #include "ui/gfx/insets.h" |
30 #include "ui/gfx/screen.h" | 30 #include "ui/gfx/screen.h" |
31 #include "ui/views/widget/widget.h" | 31 #include "ui/views/widget/widget.h" |
32 | 32 |
33 namespace gfx { | |
34 | |
35 // Class to provide access to SlideAnimation internals for testing. | |
36 // TODO: this should be next to SlideAnimation, not here. | |
37 class SlideAnimation::TestApi { | |
38 public: | |
39 explicit TestApi(SlideAnimation* animation) : animation_(animation) {} | |
40 | |
41 void SetStartTime(base::TimeTicks ticks) { | |
42 animation_->SetStartTime(ticks); | |
43 } | |
44 | |
45 void Step(base::TimeTicks ticks) { | |
46 animation_->Step(ticks); | |
47 } | |
48 | |
49 void RunTillComplete() { | |
50 SetStartTime(base::TimeTicks()); | |
51 Step(base::TimeTicks() + | |
52 base::TimeDelta::FromMilliseconds(animation_->GetSlideDuration())); | |
53 EXPECT_EQ(1.0, animation_->GetCurrentValue()); | |
54 } | |
55 | |
56 private: | |
57 SlideAnimation* animation_; | |
58 | |
59 DISALLOW_COPY_AND_ASSIGN(TestApi); | |
60 }; | |
61 | |
62 } | |
63 | |
64 namespace ash { | 33 namespace ash { |
65 namespace internal { | 34 namespace internal { |
66 namespace { | 35 namespace { |
67 | 36 |
68 const int kRootHeight = 600; | 37 const int kRootHeight = 600; |
69 | 38 |
70 // A simple window delegate that returns the specified min size. | 39 // A simple window delegate that returns the specified min size. |
71 class TestWindowDelegate : public aura::test::TestWindowDelegate { | 40 class TestWindowDelegate : public aura::test::TestWindowDelegate { |
72 public: | 41 public: |
73 TestWindowDelegate() { | 42 TestWindowDelegate() { |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 gfx::Insets mouse_outer_insets(-ash::kResizeOutsideBoundsSize, | 181 gfx::Insets mouse_outer_insets(-ash::kResizeOutsideBoundsSize, |
213 -ash::kResizeOutsideBoundsSize, | 182 -ash::kResizeOutsideBoundsSize, |
214 -ash::kResizeOutsideBoundsSize, | 183 -ash::kResizeOutsideBoundsSize, |
215 -ash::kResizeOutsideBoundsSize); | 184 -ash::kResizeOutsideBoundsSize); |
216 gfx::Insets touch_outer_insets = mouse_outer_insets.Scale( | 185 gfx::Insets touch_outer_insets = mouse_outer_insets.Scale( |
217 ash::kResizeOutsideBoundsScaleForTouch); | 186 ash::kResizeOutsideBoundsScaleForTouch); |
218 touch_resize_window_->SetHitTestBoundsOverrideOuter(mouse_outer_insets, | 187 touch_resize_window_->SetHitTestBoundsOverrideOuter(mouse_outer_insets, |
219 touch_outer_insets); | 188 touch_outer_insets); |
220 } | 189 } |
221 | 190 |
222 // Simulate running the animation. | |
223 void RunAnimationTillComplete(gfx::SlideAnimation* animation) { | |
224 gfx::SlideAnimation::TestApi test_api(animation); | |
225 test_api.RunTillComplete(); | |
226 } | |
227 | |
228 TestWindowDelegate delegate_; | 191 TestWindowDelegate delegate_; |
229 TestWindowDelegate delegate2_; | 192 TestWindowDelegate delegate2_; |
230 TestWindowDelegate delegate3_; | 193 TestWindowDelegate delegate3_; |
231 TestWindowDelegate delegate4_; | 194 TestWindowDelegate delegate4_; |
232 scoped_ptr<aura::Window> window_; | 195 scoped_ptr<aura::Window> window_; |
233 scoped_ptr<aura::Window> window2_; | 196 scoped_ptr<aura::Window> window2_; |
234 scoped_ptr<aura::Window> window3_; | 197 scoped_ptr<aura::Window> window3_; |
235 scoped_ptr<aura::Window> window4_; | 198 scoped_ptr<aura::Window> window4_; |
236 | 199 |
237 TestWindowDelegate touch_resize_delegate_; | 200 TestWindowDelegate touch_resize_delegate_; |
(...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1898 touch_resize_window_->bounds().ToString()); | 1861 touch_resize_window_->bounds().ToString()); |
1899 // Drag even more to snap to the edge. | 1862 // Drag even more to snap to the edge. |
1900 generator.GestureScrollSequence(gfx::Point(400, kRootHeight - 40), | 1863 generator.GestureScrollSequence(gfx::Point(400, kRootHeight - 40), |
1901 gfx::Point(400, kRootHeight - 25), | 1864 gfx::Point(400, kRootHeight - 25), |
1902 base::TimeDelta::FromMilliseconds(10), | 1865 base::TimeDelta::FromMilliseconds(10), |
1903 5); | 1866 5); |
1904 EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), | 1867 EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), |
1905 touch_resize_window_->bounds().ToString()); | 1868 touch_resize_window_->bounds().ToString()); |
1906 } | 1869 } |
1907 | 1870 |
1908 TEST_F(WorkspaceWindowResizerTest, PhantomWindowShow) { | |
1909 if (!SupportsMultipleDisplays()) | |
1910 return; | |
1911 | |
1912 UpdateDisplay("500x400,500x400"); | |
1913 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | |
1914 Shell::GetScreen()->GetPrimaryDisplay()); | |
1915 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | |
1916 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | |
1917 | |
1918 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1919 window_.get(), gfx::Point(), HTCAPTION)); | |
1920 ASSERT_TRUE(resizer.get()); | |
1921 EXPECT_FALSE(snap_phantom_window_controller()); | |
1922 | |
1923 // The pointer is on the edge but not shared. The snap phantom window | |
1924 // controller should be non-NULL. | |
1925 resizer->Drag(CalculateDragPoint(*resizer, -1, 0), 0); | |
1926 EXPECT_TRUE(snap_phantom_window_controller()); | |
1927 PhantomWindowController* phantom_controller(snap_phantom_window_controller()); | |
1928 | |
1929 // phantom widget only in the left screen. | |
1930 phantom_controller->Show(gfx::Rect(100, 100, 50, 60)); | |
1931 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1932 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
1933 EXPECT_EQ( | |
1934 root_windows[0], | |
1935 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
1936 | |
1937 // Move phantom widget into the right screen. Test that 2 widgets got created. | |
1938 phantom_controller->Show(gfx::Rect(600, 100, 50, 60)); | |
1939 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1940 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
1941 EXPECT_EQ( | |
1942 root_windows[1], | |
1943 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
1944 EXPECT_EQ( | |
1945 root_windows[0], | |
1946 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
1947 GetRootWindow()); | |
1948 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
1949 | |
1950 // Move phantom widget only in the right screen. Start widget should close. | |
1951 phantom_controller->Show(gfx::Rect(700, 100, 50, 60)); | |
1952 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1953 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
1954 EXPECT_EQ( | |
1955 root_windows[1], | |
1956 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
1957 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
1958 | |
1959 // Move phantom widget into the left screen. Start widget should open. | |
1960 phantom_controller->Show(gfx::Rect(100, 100, 50, 60)); | |
1961 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1962 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
1963 EXPECT_EQ( | |
1964 root_windows[0], | |
1965 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
1966 EXPECT_EQ( | |
1967 root_windows[1], | |
1968 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
1969 GetRootWindow()); | |
1970 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
1971 | |
1972 // Move phantom widget while in the left screen. Start widget should close. | |
1973 phantom_controller->Show(gfx::Rect(200, 100, 50, 60)); | |
1974 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1975 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
1976 EXPECT_EQ( | |
1977 root_windows[0], | |
1978 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
1979 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
1980 | |
1981 // Move phantom widget spanning both screens with most of the window in the | |
1982 // right screen. Two widgets are created. | |
1983 phantom_controller->Show(gfx::Rect(495, 100, 50, 60)); | |
1984 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1985 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
1986 EXPECT_EQ( | |
1987 root_windows[1], | |
1988 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
1989 EXPECT_EQ( | |
1990 root_windows[0], | |
1991 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
1992 GetRootWindow()); | |
1993 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
1994 | |
1995 // Move phantom widget back into the left screen. Phantom widgets should swap. | |
1996 phantom_controller->Show(gfx::Rect(200, 100, 50, 60)); | |
1997 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
1998 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
1999 EXPECT_EQ( | |
2000 root_windows[0], | |
2001 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
2002 EXPECT_EQ( | |
2003 root_windows[1], | |
2004 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
2005 GetRootWindow()); | |
2006 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
2007 | |
2008 // Hide phantom controller. Both widgets should close. | |
2009 phantom_controller->Hide(); | |
2010 EXPECT_FALSE(phantom_controller->phantom_widget_); | |
2011 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
2012 } | |
2013 | |
2014 } // namespace internal | 1871 } // namespace internal |
2015 } // namespace ash | 1872 } // namespace ash |
OLD | NEW |