OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/magnifier/magnification_controller.h" | 5 #include "ash/magnifier/magnification_controller.h" |
6 | 6 |
7 #include "ash/common/accessibility_types.h" | 7 #include "ash/common/accessibility_types.h" |
8 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 void FocusOnTextInput() { GetFocusManager()->SetFocusedView(text_field_); } | 51 void FocusOnTextInput() { GetFocusManager()->SetFocusedView(text_field_); } |
52 | 52 |
53 private: | 53 private: |
54 views::Textfield* text_field_; // owned by views hierarchy | 54 views::Textfield* text_field_; // owned by views hierarchy |
55 | 55 |
56 DISALLOW_COPY_AND_ASSIGN(TextInputView); | 56 DISALLOW_COPY_AND_ASSIGN(TextInputView); |
57 }; | 57 }; |
58 | 58 |
59 } // namespace | 59 } // namespace |
60 | 60 |
61 class MagnificationControllerTest: public test::AshTestBase { | 61 class MagnificationControllerTest : public test::AshTestBase { |
62 public: | 62 public: |
63 MagnificationControllerTest() : text_input_view_(NULL) {} | 63 MagnificationControllerTest() : text_input_view_(NULL) {} |
64 ~MagnificationControllerTest() override {} | 64 ~MagnificationControllerTest() override {} |
65 | 65 |
66 void SetUp() override { | 66 void SetUp() override { |
67 AshTestBase::SetUp(); | 67 AshTestBase::SetUp(); |
68 UpdateDisplay(base::StringPrintf("%dx%d", kRootWidth, kRootHeight)); | 68 UpdateDisplay(base::StringPrintf("%dx%d", kRootWidth, kRootHeight)); |
69 | 69 |
70 #if defined(OS_WIN) | 70 #if defined(OS_WIN) |
71 // RootWindow and Display can't resize on Windows Ash. | 71 // RootWindow and Display can't resize on Windows Ash. |
72 // http://crbug.com/165962 | 72 // http://crbug.com/165962 |
73 aura::Window* root = GetRootWindow(); | 73 aura::Window* root = GetRootWindow(); |
74 gfx::Rect root_bounds(root->bounds()); | 74 gfx::Rect root_bounds(root->bounds()); |
75 EXPECT_EQ(kRootHeight, root_bounds.height()); | 75 EXPECT_EQ(kRootHeight, root_bounds.height()); |
76 EXPECT_EQ(kRootWidth, root_bounds.width()); | 76 EXPECT_EQ(kRootWidth, root_bounds.width()); |
77 #endif | 77 #endif |
78 | 78 |
79 GetMagnificationController()->DisableMoveMagnifierDelayForTesting(); | 79 GetMagnificationController()->DisableMoveMagnifierDelayForTesting(); |
80 } | 80 } |
81 | 81 |
82 void TearDown() override { AshTestBase::TearDown(); } | 82 void TearDown() override { AshTestBase::TearDown(); } |
83 | 83 |
84 protected: | 84 protected: |
85 aura::Window* GetRootWindow() const { | 85 aura::Window* GetRootWindow() const { return Shell::GetPrimaryRootWindow(); } |
86 return Shell::GetPrimaryRootWindow(); | |
87 } | |
88 | 86 |
89 std::string GetHostMouseLocation() { | 87 std::string GetHostMouseLocation() { |
90 const gfx::Point& location = | 88 const gfx::Point& location = |
91 aura::test::QueryLatestMousePositionRequestInHost( | 89 aura::test::QueryLatestMousePositionRequestInHost( |
92 GetRootWindow()->GetHost()); | 90 GetRootWindow()->GetHost()); |
93 return location.ToString(); | 91 return location.ToString(); |
94 } | 92 } |
95 | 93 |
96 ash::MagnificationController* GetMagnificationController() const { | 94 ash::MagnificationController* GetMagnificationController() const { |
97 return ash::Shell::GetInstance()->magnification_controller(); | 95 return ash::Shell::GetInstance()->magnification_controller(); |
98 } | 96 } |
99 | 97 |
100 gfx::Rect GetViewport() const { | 98 gfx::Rect GetViewport() const { |
101 gfx::RectF bounds(0, 0, kRootWidth, kRootHeight); | 99 gfx::RectF bounds(0, 0, kRootWidth, kRootHeight); |
102 GetRootWindow()->layer()->transform().TransformRectReverse(&bounds); | 100 GetRootWindow()->layer()->transform().TransformRectReverse(&bounds); |
103 return gfx::ToEnclosingRect(bounds); | 101 return gfx::ToEnclosingRect(bounds); |
104 } | 102 } |
105 | 103 |
106 std::string CurrentPointOfInterest() const { | 104 std::string CurrentPointOfInterest() const { |
107 return GetMagnificationController()-> | 105 return GetMagnificationController() |
108 GetPointOfInterestForTesting().ToString(); | 106 ->GetPointOfInterestForTesting() |
| 107 .ToString(); |
109 } | 108 } |
110 | 109 |
111 void CreateAndShowTextInputView(const gfx::Rect& bounds) { | 110 void CreateAndShowTextInputView(const gfx::Rect& bounds) { |
112 text_input_view_ = new TextInputView; | 111 text_input_view_ = new TextInputView; |
113 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( | 112 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( |
114 text_input_view_, GetRootWindow(), bounds); | 113 text_input_view_, GetRootWindow(), bounds); |
115 widget->Show(); | 114 widget->Show(); |
116 } | 115 } |
117 | 116 |
118 // Returns the text input view's bounds in root window coordinates. | 117 // Returns the text input view's bounds in root window coordinates. |
119 gfx::Rect GetTextInputViewBounds() { | 118 gfx::Rect GetTextInputViewBounds() { |
120 DCHECK(text_input_view_); | 119 DCHECK(text_input_view_); |
121 gfx::Rect bounds = text_input_view_->bounds(); | 120 gfx::Rect bounds = text_input_view_->bounds(); |
122 gfx::Point origin = bounds.origin(); | 121 gfx::Point origin = bounds.origin(); |
123 // Convert origin to screen coordinates. | 122 // Convert origin to screen coordinates. |
124 views::View::ConvertPointToScreen(text_input_view_, &origin); | 123 views::View::ConvertPointToScreen(text_input_view_, &origin); |
125 // Convert origin to root_window_ coordinates. | 124 // Convert origin to root_window_ coordinates. |
126 ::wm::ConvertPointFromScreen(GetRootWindow(), &origin); | 125 ::wm::ConvertPointFromScreen(GetRootWindow(), &origin); |
127 return gfx::Rect(origin.x(), origin.y(), bounds.width(), bounds.height()); | 126 return gfx::Rect(origin.x(), origin.y(), bounds.width(), bounds.height()); |
128 } | 127 } |
129 | 128 |
130 // Returns the caret bounds in root window coordinates. | 129 // Returns the caret bounds in root window coordinates. |
131 gfx::Rect GetCaretBounds() { | 130 gfx::Rect GetCaretBounds() { |
132 gfx::Rect caret_bounds = | 131 gfx::Rect caret_bounds = |
133 GetInputMethod()->GetTextInputClient()->GetCaretBounds(); | 132 GetInputMethod()->GetTextInputClient()->GetCaretBounds(); |
134 gfx::Point origin = caret_bounds.origin(); | 133 gfx::Point origin = caret_bounds.origin(); |
135 ::wm::ConvertPointFromScreen(GetRootWindow(), &origin); | 134 ::wm::ConvertPointFromScreen(GetRootWindow(), &origin); |
136 return gfx::Rect( | 135 return gfx::Rect(origin.x(), origin.y(), caret_bounds.width(), |
137 origin.x(), origin.y(), caret_bounds.width(), caret_bounds.height()); | 136 caret_bounds.height()); |
138 } | 137 } |
139 | 138 |
140 void FocusOnTextInputView() { | 139 void FocusOnTextInputView() { |
141 DCHECK(text_input_view_); | 140 DCHECK(text_input_view_); |
142 text_input_view_->FocusOnTextInput(); | 141 text_input_view_->FocusOnTextInput(); |
143 } | 142 } |
144 | 143 |
145 private: | 144 private: |
146 TextInputView* text_input_view_; | 145 TextInputView* text_input_view_; |
147 | 146 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 GetMagnificationController()->HandleFocusedNodeChanged( | 277 GetMagnificationController()->HandleFocusedNodeChanged( |
279 false, gfx::Rect(0, 0, 10, 10)); | 278 false, gfx::Rect(0, 0, 10, 10)); |
280 EXPECT_EQ("0,0 400x300", GetViewport().ToString()); | 279 EXPECT_EQ("0,0 400x300", GetViewport().ToString()); |
281 | 280 |
282 // Move viewport to element in lower right. | 281 // Move viewport to element in lower right. |
283 GetMagnificationController()->HandleFocusedNodeChanged( | 282 GetMagnificationController()->HandleFocusedNodeChanged( |
284 false, gfx::Rect(790, 590, 10, 10)); | 283 false, gfx::Rect(790, 590, 10, 10)); |
285 EXPECT_EQ("400,300 400x300", GetViewport().ToString()); | 284 EXPECT_EQ("400,300 400x300", GetViewport().ToString()); |
286 | 285 |
287 // Don't follow focus onto empty rectangle. | 286 // Don't follow focus onto empty rectangle. |
288 GetMagnificationController()->HandleFocusedNodeChanged( | 287 GetMagnificationController()->HandleFocusedNodeChanged(false, |
289 false, gfx::Rect(0, 0, 0, 0)); | 288 gfx::Rect(0, 0, 0, 0)); |
290 EXPECT_EQ("400,300 400x300", GetViewport().ToString()); | 289 EXPECT_EQ("400,300 400x300", GetViewport().ToString()); |
291 } | 290 } |
292 | 291 |
293 TEST_F(MagnificationControllerTest, PanWindow2xLeftToRight) { | 292 TEST_F(MagnificationControllerTest, PanWindow2xLeftToRight) { |
294 const aura::Env* env = aura::Env::GetInstance(); | 293 const aura::Env* env = aura::Env::GetInstance(); |
295 | 294 |
296 GetEventGenerator().MoveMouseToInHost(gfx::Point(0, 0)); | 295 GetEventGenerator().MoveMouseToInHost(gfx::Point(0, 0)); |
297 EXPECT_EQ(1.f, GetMagnificationController()->GetScale()); | 296 EXPECT_EQ(1.f, GetMagnificationController()->GetScale()); |
298 EXPECT_EQ("0,0 800x600", GetViewport().ToString()); | 297 EXPECT_EQ("0,0 800x600", GetViewport().ToString()); |
299 EXPECT_EQ("0,0", env->last_mouse_location().ToString()); | 298 EXPECT_EQ("0,0", env->last_mouse_location().ToString()); |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 | 675 |
677 // Verify the view port has been moved to the place where the text field is | 676 // Verify the view port has been moved to the place where the text field is |
678 // contained in the view port and the caret is at the center of the view port. | 677 // contained in the view port and the caret is at the center of the view port. |
679 gfx::Rect new_view_port = GetViewport(); | 678 gfx::Rect new_view_port = GetViewport(); |
680 EXPECT_NE(view_port, new_view_port); | 679 EXPECT_NE(view_port, new_view_port); |
681 EXPECT_TRUE(new_view_port.Contains(text_input_bounds)); | 680 EXPECT_TRUE(new_view_port.Contains(text_input_bounds)); |
682 gfx::Rect caret_bounds = GetCaretBounds(); | 681 gfx::Rect caret_bounds = GetCaretBounds(); |
683 EXPECT_EQ(caret_bounds.CenterPoint(), new_view_port.CenterPoint()); | 682 EXPECT_EQ(caret_bounds.CenterPoint(), new_view_port.CenterPoint()); |
684 } | 683 } |
685 | 684 |
686 | |
687 // Make sure that unified desktop can enter magnified mode. | 685 // Make sure that unified desktop can enter magnified mode. |
688 TEST_F(MagnificationControllerTest, EnableMagnifierInUnifiedDesktop) { | 686 TEST_F(MagnificationControllerTest, EnableMagnifierInUnifiedDesktop) { |
689 if (!SupportsMultipleDisplays()) | 687 if (!SupportsMultipleDisplays()) |
690 return; | 688 return; |
691 Shell::GetInstance()->display_manager()->SetUnifiedDesktopEnabled(true); | 689 Shell::GetInstance()->display_manager()->SetUnifiedDesktopEnabled(true); |
692 | 690 |
693 EXPECT_EQ(1.0f, GetMagnificationController()->GetScale()); | 691 EXPECT_EQ(1.0f, GetMagnificationController()->GetScale()); |
694 | 692 |
695 GetMagnificationController()->SetEnabled(true); | 693 GetMagnificationController()->SetEnabled(true); |
696 | 694 |
(...skipping 13 matching lines...) Expand all Loading... |
710 UpdateDisplay("500x500"); | 708 UpdateDisplay("500x500"); |
711 EXPECT_EQ("0,0 500x500", screen->GetPrimaryDisplay().bounds().ToString()); | 709 EXPECT_EQ("0,0 500x500", screen->GetPrimaryDisplay().bounds().ToString()); |
712 EXPECT_EQ(2.0f, GetMagnificationController()->GetScale()); | 710 EXPECT_EQ(2.0f, GetMagnificationController()->GetScale()); |
713 | 711 |
714 GetMagnificationController()->SetEnabled(false); | 712 GetMagnificationController()->SetEnabled(false); |
715 EXPECT_EQ("0,0 500x500", screen->GetPrimaryDisplay().bounds().ToString()); | 713 EXPECT_EQ("0,0 500x500", screen->GetPrimaryDisplay().bounds().ToString()); |
716 EXPECT_EQ(1.0f, GetMagnificationController()->GetScale()); | 714 EXPECT_EQ(1.0f, GetMagnificationController()->GetScale()); |
717 } | 715 } |
718 | 716 |
719 } // namespace ash | 717 } // namespace ash |
OLD | NEW |