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 "ui/aura/root_window.h" | 5 #include "ui/aura/root_window.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/aura/client/event_client.h" | 10 #include "ui/aura/client/event_client.h" |
11 #include "ui/aura/env.h" | 11 #include "ui/aura/env.h" |
12 #include "ui/aura/focus_manager.h" | 12 #include "ui/aura/focus_manager.h" |
13 #include "ui/aura/test/aura_test_base.h" | 13 #include "ui/aura/test/aura_test_base.h" |
14 #include "ui/aura/test/event_generator.h" | 14 #include "ui/aura/test/event_generator.h" |
15 #include "ui/aura/test/test_event_handler.h" | 15 #include "ui/aura/test/test_event_handler.h" |
16 #include "ui/aura/test/test_window_delegate.h" | 16 #include "ui/aura/test/test_window_delegate.h" |
17 #include "ui/aura/test/test_windows.h" | 17 #include "ui/aura/test/test_windows.h" |
18 #include "ui/aura/window_tracker.h" | 18 #include "ui/aura/window_tracker.h" |
19 #include "ui/base/events/event.h" | 19 #include "ui/base/events/event.h" |
20 #include "ui/base/events/event_handler.h" | 20 #include "ui/base/events/event_handler.h" |
21 #include "ui/base/events/event_utils.h" | 21 #include "ui/base/events/event_utils.h" |
22 #include "ui/base/gestures/gesture_configuration.h" | 22 #include "ui/base/gestures/gesture_configuration.h" |
23 #include "ui/base/hit_test.h" | 23 #include "ui/base/hit_test.h" |
24 #include "ui/base/keycodes/keyboard_codes.h" | 24 #include "ui/base/keycodes/keyboard_codes.h" |
25 #include "ui/gfx/point.h" | 25 #include "ui/gfx/point.h" |
26 #include "ui/gfx/rect.h" | 26 #include "ui/gfx/rect.h" |
27 #include "ui/gfx/screen.h" | 27 #include "ui/gfx/screen.h" |
| 28 #include "ui/gfx/transform.h" |
28 | 29 |
29 namespace aura { | 30 namespace aura { |
30 namespace { | 31 namespace { |
31 | 32 |
32 // A delegate that always returns a non-client component for hit tests. | 33 // A delegate that always returns a non-client component for hit tests. |
33 class NonClientDelegate : public test::TestWindowDelegate { | 34 class NonClientDelegate : public test::TestWindowDelegate { |
34 public: | 35 public: |
35 NonClientDelegate() | 36 NonClientDelegate() |
36 : non_client_count_(0), | 37 : non_client_count_(0), |
37 mouse_event_count_(0), | 38 mouse_event_count_(0), |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 EXPECT_EQ("100,100", root.location().ToString()); | 202 EXPECT_EQ("100,100", root.location().ToString()); |
202 EXPECT_EQ("100,100", root.root_location().ToString()); | 203 EXPECT_EQ("100,100", root.root_location().ToString()); |
203 | 204 |
204 ui::MouseEvent translated_event( | 205 ui::MouseEvent translated_event( |
205 root, static_cast<Window*>(root_window()), w1.get(), | 206 root, static_cast<Window*>(root_window()), w1.get(), |
206 ui::ET_MOUSE_ENTERED, root.flags()); | 207 ui::ET_MOUSE_ENTERED, root.flags()); |
207 EXPECT_EQ("50,50", translated_event.location().ToString()); | 208 EXPECT_EQ("50,50", translated_event.location().ToString()); |
208 EXPECT_EQ("100,100", translated_event.root_location().ToString()); | 209 EXPECT_EQ("100,100", translated_event.root_location().ToString()); |
209 } | 210 } |
210 | 211 |
| 212 #if defined(OS_CHROMEOS) |
| 213 // Make sure the mouse location is translated within the root |
| 214 // window. crbug.com/222483. |
| 215 TEST_F(RootWindowTest, KeepTranslatedEventInRoot) { |
| 216 // Clockwise. |
| 217 gfx::Transform rotate; |
| 218 rotate.Translate(599, 0); |
| 219 rotate.Rotate(90); |
| 220 root_window()->SetTransform(rotate); |
| 221 |
| 222 gfx::Point top_edge_on_host(100, 0); |
| 223 ui::MouseEvent top_event(ui::ET_MOUSE_PRESSED, |
| 224 top_edge_on_host, |
| 225 top_edge_on_host, 0); |
| 226 root_window()->TransformEventForDeviceScaleFactor(&top_event, true); |
| 227 EXPECT_TRUE(root_window()->bounds().Contains(top_event.location())); |
| 228 |
| 229 // Counter clockwise. |
| 230 rotate.MakeIdentity(); |
| 231 rotate.Translate(0, 799); |
| 232 rotate.Rotate(270); |
| 233 root_window()->SetTransform(rotate); |
| 234 |
| 235 gfx::Point bottom_edge_on_host(500, 799); |
| 236 ui::MouseEvent bottom_event(ui::ET_MOUSE_PRESSED, |
| 237 bottom_edge_on_host, |
| 238 bottom_edge_on_host, 0); |
| 239 root_window()->TransformEventForDeviceScaleFactor(&bottom_event, true); |
| 240 EXPECT_TRUE(root_window()->bounds().Contains(bottom_event.location())); |
| 241 |
| 242 // The locaion can be outside if |keep_inside_root| is false. |
| 243 ui::MouseEvent bottom_event_outside(ui::ET_MOUSE_PRESSED, |
| 244 bottom_edge_on_host, |
| 245 bottom_edge_on_host, 0); |
| 246 root_window()->TransformEventForDeviceScaleFactor(&bottom_event_outside, |
| 247 false); |
| 248 EXPECT_FALSE(root_window()->bounds().Contains( |
| 249 bottom_event_outside.location())); |
| 250 } |
| 251 #endif |
| 252 |
211 namespace { | 253 namespace { |
212 | 254 |
213 class TestEventClient : public client::EventClient { | 255 class TestEventClient : public client::EventClient { |
214 public: | 256 public: |
215 static const int kNonLockWindowId = 100; | 257 static const int kNonLockWindowId = 100; |
216 static const int kLockWindowId = 200; | 258 static const int kLockWindowId = 200; |
217 | 259 |
218 explicit TestEventClient(RootWindow* root_window) | 260 explicit TestEventClient(RootWindow* root_window) |
219 : root_window_(root_window), | 261 : root_window_(root_window), |
220 lock_(false) { | 262 lock_(false) { |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 // Tap on w2 which triggers nested gestures for w1. | 827 // Tap on w2 which triggers nested gestures for w1. |
786 test::EventGenerator generator(root_window(), w2.get()); | 828 test::EventGenerator generator(root_window(), w2.get()); |
787 generator.GestureTapAt(w2->bounds().CenterPoint()); | 829 generator.GestureTapAt(w2->bounds().CenterPoint()); |
788 | 830 |
789 // Both windows should get their gesture end events. | 831 // Both windows should get their gesture end events. |
790 EXPECT_EQ(1, d1.gesture_end_count()); | 832 EXPECT_EQ(1, d1.gesture_end_count()); |
791 EXPECT_EQ(1, d2.gesture_end_count()); | 833 EXPECT_EQ(1, d2.gesture_end_count()); |
792 } | 834 } |
793 | 835 |
794 } // namespace aura | 836 } // namespace aura |
OLD | NEW |