Disable TabDragController tests that fail with a real compositor.
[chromium-blink-merge.git] / ash / wm / ash_native_cursor_manager.cc
blobd31579280d1537e0ff2ac0790a2de1338de5fc4b
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
3 // found in the LICENSE file.
5 #include "ash/wm/ash_native_cursor_manager.h"
7 #include "ash/display/display_controller.h"
8 #include "ash/display/mirror_window_controller.h"
9 #include "ash/shell.h"
10 #include "ash/wm/image_cursors.h"
11 #include "base/logging.h"
12 #include "ui/aura/env.h"
13 #include "ui/aura/root_window.h"
14 #include "ui/base/cursor/cursor.h"
16 namespace ash {
17 namespace {
19 void SetCursorOnAllRootWindows(gfx::NativeCursor cursor) {
20 aura::Window::Windows root_windows =
21 Shell::GetInstance()->GetAllRootWindows();
22 for (aura::Window::Windows::iterator iter = root_windows.begin();
23 iter != root_windows.end(); ++iter)
24 (*iter)->GetDispatcher()->SetCursor(cursor);
25 #if defined(OS_CHROMEOS)
26 Shell::GetInstance()->display_controller()->
27 mirror_window_controller()->SetMirroredCursor(cursor);
28 #endif
31 void NotifyCursorVisibilityChange(bool visible) {
32 aura::Window::Windows root_windows =
33 Shell::GetInstance()->GetAllRootWindows();
34 for (aura::Window::Windows::iterator iter = root_windows.begin();
35 iter != root_windows.end(); ++iter)
36 (*iter)->GetDispatcher()->OnCursorVisibilityChanged(visible);
37 #if defined(OS_CHROMEOS)
38 Shell::GetInstance()->display_controller()->mirror_window_controller()->
39 SetMirroredCursorVisibility(visible);
40 #endif
43 void NotifyMouseEventsEnableStateChange(bool enabled) {
44 aura::Window::Windows root_windows =
45 Shell::GetInstance()->GetAllRootWindows();
46 for (aura::Window::Windows::iterator iter = root_windows.begin();
47 iter != root_windows.end(); ++iter)
48 (*iter)->GetDispatcher()->OnMouseEventsEnableStateChanged(enabled);
49 // Mirror window never process events.
52 } // namespace
54 AshNativeCursorManager::AshNativeCursorManager()
55 : image_cursors_(new ImageCursors) {
58 AshNativeCursorManager::~AshNativeCursorManager() {
61 void AshNativeCursorManager::SetDisplay(
62 const gfx::Display& display,
63 views::corewm::NativeCursorManagerDelegate* delegate) {
64 if (image_cursors_->SetDisplay(display))
65 SetCursor(delegate->GetCursor(), delegate);
68 void AshNativeCursorManager::SetCursor(
69 gfx::NativeCursor cursor,
70 views::corewm::NativeCursorManagerDelegate* delegate) {
71 gfx::NativeCursor new_cursor = cursor;
72 image_cursors_->SetPlatformCursor(&new_cursor);
73 new_cursor.set_device_scale_factor(
74 image_cursors_->GetDisplay().device_scale_factor());
76 delegate->CommitCursor(new_cursor);
78 if (delegate->IsCursorVisible())
79 SetCursorOnAllRootWindows(new_cursor);
82 void AshNativeCursorManager::SetCursorSet(
83 ui::CursorSetType cursor_set,
84 views::corewm::NativeCursorManagerDelegate* delegate) {
85 image_cursors_->SetCursorSet(cursor_set);
86 delegate->CommitCursorSet(cursor_set);
88 // Sets the cursor to reflect the scale change immediately.
89 if (delegate->IsCursorVisible())
90 SetCursor(delegate->GetCursor(), delegate);
93 void AshNativeCursorManager::SetScale(
94 float scale,
95 views::corewm::NativeCursorManagerDelegate* delegate) {
96 image_cursors_->SetScale(scale);
97 delegate->CommitScale(scale);
99 // Sets the cursor to reflect the scale change immediately.
100 SetCursor(delegate->GetCursor(), delegate);
103 void AshNativeCursorManager::SetVisibility(
104 bool visible,
105 views::corewm::NativeCursorManagerDelegate* delegate) {
106 delegate->CommitVisibility(visible);
108 if (visible) {
109 SetCursor(delegate->GetCursor(), delegate);
110 } else {
111 gfx::NativeCursor invisible_cursor(ui::kCursorNone);
112 image_cursors_->SetPlatformCursor(&invisible_cursor);
113 SetCursorOnAllRootWindows(invisible_cursor);
116 NotifyCursorVisibilityChange(visible);
119 void AshNativeCursorManager::SetMouseEventsEnabled(
120 bool enabled,
121 views::corewm::NativeCursorManagerDelegate* delegate) {
122 delegate->CommitMouseEventsEnabled(enabled);
124 if (enabled) {
125 aura::Env::GetInstance()->set_last_mouse_location(
126 disabled_cursor_location_);
127 } else {
128 disabled_cursor_location_ = aura::Env::GetInstance()->last_mouse_location();
131 SetVisibility(delegate->IsCursorVisible(), delegate);
132 NotifyMouseEventsEnableStateChange(enabled);
135 } // namespace ash