| 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 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1910 touch_resize_window_->bounds().ToString()); | 1873 touch_resize_window_->bounds().ToString()); |
| 1911 // Drag even more to snap to the edge. | 1874 // Drag even more to snap to the edge. |
| 1912 generator.GestureScrollSequence(gfx::Point(400, kRootHeight - 40), | 1875 generator.GestureScrollSequence(gfx::Point(400, kRootHeight - 40), |
| 1913 gfx::Point(400, kRootHeight - 25), | 1876 gfx::Point(400, kRootHeight - 25), |
| 1914 base::TimeDelta::FromMilliseconds(10), | 1877 base::TimeDelta::FromMilliseconds(10), |
| 1915 5); | 1878 5); |
| 1916 EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), | 1879 EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), |
| 1917 touch_resize_window_->bounds().ToString()); | 1880 touch_resize_window_->bounds().ToString()); |
| 1918 } | 1881 } |
| 1919 | 1882 |
| 1920 TEST_F(WorkspaceWindowResizerTest, PhantomWindowShow) { | |
| 1921 if (!SupportsMultipleDisplays()) | |
| 1922 return; | |
| 1923 | |
| 1924 UpdateDisplay("500x400,500x400"); | |
| 1925 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | |
| 1926 Shell::GetScreen()->GetPrimaryDisplay()); | |
| 1927 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | |
| 1928 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | |
| 1929 | |
| 1930 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
| 1931 window_.get(), gfx::Point(), HTCAPTION)); | |
| 1932 ASSERT_TRUE(resizer.get()); | |
| 1933 EXPECT_FALSE(snap_phantom_window_controller()); | |
| 1934 | |
| 1935 // The pointer is on the edge but not shared. The snap phantom window | |
| 1936 // controller should be non-NULL. | |
| 1937 resizer->Drag(CalculateDragPoint(*resizer, -1, 0), 0); | |
| 1938 EXPECT_TRUE(snap_phantom_window_controller()); | |
| 1939 PhantomWindowController* phantom_controller(snap_phantom_window_controller()); | |
| 1940 | |
| 1941 // phantom widget only in the left screen. | |
| 1942 phantom_controller->Show(gfx::Rect(100, 100, 50, 60)); | |
| 1943 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 1944 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
| 1945 EXPECT_EQ( | |
| 1946 root_windows[0], | |
| 1947 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 1948 | |
| 1949 // Move phantom widget into the right screen. Test that 2 widgets got created. | |
| 1950 phantom_controller->Show(gfx::Rect(600, 100, 50, 60)); | |
| 1951 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 1952 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
| 1953 EXPECT_EQ( | |
| 1954 root_windows[1], | |
| 1955 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 1956 EXPECT_EQ( | |
| 1957 root_windows[0], | |
| 1958 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
| 1959 GetRootWindow()); | |
| 1960 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
| 1961 | |
| 1962 // Move phantom widget only in the right screen. Start widget should close. | |
| 1963 phantom_controller->Show(gfx::Rect(700, 100, 50, 60)); | |
| 1964 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 1965 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
| 1966 EXPECT_EQ( | |
| 1967 root_windows[1], | |
| 1968 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 1969 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
| 1970 | |
| 1971 // Move phantom widget into the left screen. Start widget should open. | |
| 1972 phantom_controller->Show(gfx::Rect(100, 100, 50, 60)); | |
| 1973 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 1974 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
| 1975 EXPECT_EQ( | |
| 1976 root_windows[0], | |
| 1977 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 1978 EXPECT_EQ( | |
| 1979 root_windows[1], | |
| 1980 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
| 1981 GetRootWindow()); | |
| 1982 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
| 1983 | |
| 1984 // Move phantom widget while in the left screen. Start widget should close. | |
| 1985 phantom_controller->Show(gfx::Rect(200, 100, 50, 60)); | |
| 1986 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 1987 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
| 1988 EXPECT_EQ( | |
| 1989 root_windows[0], | |
| 1990 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 1991 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
| 1992 | |
| 1993 // Move phantom widget spanning both screens with most of the window in the | |
| 1994 // right screen. Two widgets are created. | |
| 1995 phantom_controller->Show(gfx::Rect(495, 100, 50, 60)); | |
| 1996 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 1997 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
| 1998 EXPECT_EQ( | |
| 1999 root_windows[1], | |
| 2000 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 2001 EXPECT_EQ( | |
| 2002 root_windows[0], | |
| 2003 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
| 2004 GetRootWindow()); | |
| 2005 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
| 2006 | |
| 2007 // Move phantom widget back into the left screen. Phantom widgets should swap. | |
| 2008 phantom_controller->Show(gfx::Rect(200, 100, 50, 60)); | |
| 2009 EXPECT_TRUE(phantom_controller->phantom_widget_); | |
| 2010 EXPECT_TRUE(phantom_controller->phantom_widget_start_); | |
| 2011 EXPECT_EQ( | |
| 2012 root_windows[0], | |
| 2013 phantom_controller->phantom_widget_->GetNativeWindow()->GetRootWindow()); | |
| 2014 EXPECT_EQ( | |
| 2015 root_windows[1], | |
| 2016 phantom_controller->phantom_widget_start_->GetNativeWindow()-> | |
| 2017 GetRootWindow()); | |
| 2018 RunAnimationTillComplete(phantom_controller->animation_.get()); | |
| 2019 | |
| 2020 // Hide phantom controller. Both widgets should close. | |
| 2021 phantom_controller->Hide(); | |
| 2022 EXPECT_FALSE(phantom_controller->phantom_widget_); | |
| 2023 EXPECT_FALSE(phantom_controller->phantom_widget_start_); | |
| 2024 } | |
| 2025 | |
| 2026 } // namespace internal | 1883 } // namespace internal |
| 2027 } // namespace ash | 1884 } // namespace ash |
| OLD | NEW |