| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 3175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3186 // Drargging. Cover HasCapture() and NativeWidgetPrivate::IsMouseButtonDown(). | 3186 // Drargging. Cover HasCapture() and NativeWidgetPrivate::IsMouseButtonDown(). |
| 3187 generator.DragMouseTo(gfx::Point(40, 40)); | 3187 generator.DragMouseTo(gfx::Point(40, 40)); |
| 3188 EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_PRESSED)); | 3188 EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| 3189 EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_RELEASED)); | 3189 EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_RELEASED)); |
| 3190 EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_DRAGGED)); | 3190 EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_DRAGGED)); |
| 3191 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, view->last_flags()); | 3191 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, view->last_flags()); |
| 3192 | 3192 |
| 3193 widget->CloseNow(); | 3193 widget->CloseNow(); |
| 3194 } | 3194 } |
| 3195 | 3195 |
| 3196 // Tests that a view does not receive entered, dragged, or moved events if | |
| 3197 // a mouse cursor is moved into it while the left mouse button is pressed. | |
| 3198 TEST_F(WidgetTest, DragIntoView) { | |
| 3199 EventCountView* container = new EventCountView; | |
| 3200 container->SetBounds(0, 0, 100, 80); | |
| 3201 | |
| 3202 EventCountView* consume_view = new EventCountView; | |
| 3203 consume_view->set_handle_mode(EventCountView::CONSUME_EVENTS); | |
| 3204 consume_view->SetBounds(10, 10, 50, 40); | |
| 3205 | |
| 3206 Widget* widget = CreateTopLevelFramelessPlatformWidget(); | |
| 3207 widget->SetBounds(gfx::Rect(0, 0, 100, 80)); | |
| 3208 widget->SetContentsView(container); | |
| 3209 container->AddChildView(consume_view); | |
| 3210 | |
| 3211 widget->Show(); | |
| 3212 | |
| 3213 ui::test::EventGenerator generator(GetContext(), widget->GetNativeWindow()); | |
| 3214 generator.set_current_location(gfx::Point(75, 15)); | |
| 3215 | |
| 3216 generator.PressLeftButton(); | |
| 3217 generator.MoveMouseTo(gfx::Point(20, 20)); | |
| 3218 EXPECT_EQ(0, consume_view->GetEventCount(ui::ET_MOUSE_ENTERED)); | |
| 3219 EXPECT_EQ(0, consume_view->GetEventCount(ui::ET_MOUSE_DRAGGED)); | |
| 3220 EXPECT_EQ(0, consume_view->GetEventCount(ui::ET_MOUSE_MOVED)); | |
| 3221 | |
| 3222 widget->CloseNow(); | |
| 3223 } | |
| 3224 | |
| 3225 // Tests that a view receives the correct mouse events if a mouse cursor | |
| 3226 // is moved out of its bounds while the left mouse button is pressed. | |
| 3227 TEST_F(WidgetTest, DragOutOfView) { | |
| 3228 EventCountView* container = new EventCountView; | |
| 3229 container->SetBounds(0, 0, 100, 80); | |
| 3230 | |
| 3231 EventCountView* consume_view = new EventCountView; | |
| 3232 consume_view->set_handle_mode(EventCountView::CONSUME_EVENTS); | |
| 3233 consume_view->SetBounds(10, 10, 50, 40); | |
| 3234 | |
| 3235 Widget* widget = CreateTopLevelFramelessPlatformWidget(); | |
| 3236 widget->SetBounds(gfx::Rect(0, 0, 100, 80)); | |
| 3237 widget->SetContentsView(container); | |
| 3238 container->AddChildView(consume_view); | |
| 3239 | |
| 3240 widget->Show(); | |
| 3241 | |
| 3242 ui::test::EventGenerator generator(GetContext(), widget->GetNativeWindow()); | |
| 3243 generator.set_current_location(gfx::Point(20, 20)); | |
| 3244 | |
| 3245 generator.PressLeftButton(); | |
| 3246 EXPECT_EQ(1, consume_view->GetEventCount(ui::ET_MOUSE_PRESSED)); | |
| 3247 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_PRESSED)); | |
| 3248 consume_view->ResetCounts(); | |
| 3249 | |
| 3250 generator.MoveMouseTo(gfx::Point(70, 70)); | |
| 3251 EXPECT_EQ(0, consume_view->GetEventCount(ui::ET_MOUSE_EXITED)); | |
| 3252 EXPECT_EQ(1, consume_view->GetEventCount(ui::ET_MOUSE_DRAGGED)); | |
| 3253 EXPECT_EQ(0, consume_view->GetEventCount(ui::ET_MOUSE_MOVED)); | |
| 3254 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_ENTERED)); | |
| 3255 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_DRAGGED)); | |
| 3256 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_MOVED)); | |
| 3257 consume_view->ResetCounts(); | |
| 3258 | |
| 3259 generator.MoveMouseTo(gfx::Point(71, 71)); | |
| 3260 EXPECT_EQ(1, consume_view->GetEventCount(ui::ET_MOUSE_DRAGGED)); | |
| 3261 EXPECT_EQ(0, consume_view->GetEventCount(ui::ET_MOUSE_MOVED)); | |
| 3262 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_DRAGGED)); | |
| 3263 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_MOVED)); | |
| 3264 consume_view->ResetCounts(); | |
| 3265 | |
| 3266 generator.ReleaseLeftButton(); | |
| 3267 EXPECT_EQ(1, consume_view->GetEventCount(ui::ET_MOUSE_RELEASED)); | |
| 3268 EXPECT_EQ(0, container->GetEventCount(ui::ET_MOUSE_RELEASED)); | |
| 3269 consume_view->ResetCounts(); | |
| 3270 | |
| 3271 widget->CloseNow(); | |
| 3272 } | |
| 3273 | |
| 3274 // Tests that the root view is correctly set up for Widget types that do not | 3196 // Tests that the root view is correctly set up for Widget types that do not |
| 3275 // require a non-client view, before any other views are added to the widget. | 3197 // require a non-client view, before any other views are added to the widget. |
| 3276 // That is, before Widget::ReorderNativeViews() is called which, if called with | 3198 // That is, before Widget::ReorderNativeViews() is called which, if called with |
| 3277 // a root view not set, could cause the root view to get resized to the widget. | 3199 // a root view not set, could cause the root view to get resized to the widget. |
| 3278 TEST_F(WidgetTest, NonClientWindowValidAfterInit) { | 3200 TEST_F(WidgetTest, NonClientWindowValidAfterInit) { |
| 3279 Widget* widget = CreateTopLevelFramelessPlatformWidget(); | 3201 Widget* widget = CreateTopLevelFramelessPlatformWidget(); |
| 3280 View* root_view = widget->GetRootView(); | 3202 View* root_view = widget->GetRootView(); |
| 3281 | 3203 |
| 3282 // Size the root view to exceed the widget bounds. | 3204 // Size the root view to exceed the widget bounds. |
| 3283 const gfx::Rect test_rect(0, 0, 500, 500); | 3205 const gfx::Rect test_rect(0, 0, 500, 500); |
| 3284 root_view->SetBoundsRect(test_rect); | 3206 root_view->SetBoundsRect(test_rect); |
| 3285 | 3207 |
| 3286 EXPECT_NE(test_rect.size(), widget->GetWindowBoundsInScreen().size()); | 3208 EXPECT_NE(test_rect.size(), widget->GetWindowBoundsInScreen().size()); |
| 3287 | 3209 |
| 3288 EXPECT_EQ(test_rect, root_view->bounds()); | 3210 EXPECT_EQ(test_rect, root_view->bounds()); |
| 3289 widget->ReorderNativeViews(); | 3211 widget->ReorderNativeViews(); |
| 3290 EXPECT_EQ(test_rect, root_view->bounds()); | 3212 EXPECT_EQ(test_rect, root_view->bounds()); |
| 3291 | 3213 |
| 3292 widget->CloseNow(); | 3214 widget->CloseNow(); |
| 3293 } | 3215 } |
| 3294 | 3216 |
| 3295 } // namespace test | 3217 } // namespace test |
| 3296 } // namespace views | 3218 } // namespace views |
| OLD | NEW |