Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1255)

Side by Side Diff: ash/wm/ash_native_cursor_manager.cc

Issue 145313003: Implement cursor compositing mode on Ash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Get rid changes in ui/views/. Let Shell call AshNativeCursorManager directly. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/ash_native_cursor_manager.h" 5 #include "ash/wm/ash_native_cursor_manager.h"
6 6
7 #include "ash/display/cursor_window_controller.h"
7 #include "ash/display/display_controller.h" 8 #include "ash/display/display_controller.h"
8 #include "ash/display/mirror_window_controller.h"
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/wm/image_cursors.h" 10 #include "ash/wm/image_cursors.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "ui/aura/env.h" 12 #include "ui/aura/env.h"
13 #include "ui/aura/root_window.h" 13 #include "ui/aura/root_window.h"
14 #include "ui/base/cursor/cursor.h" 14 #include "ui/base/cursor/cursor.h"
15 15
16 namespace ash { 16 namespace ash {
17 namespace { 17 namespace {
18 18
19 void SetCursorOnAllRootWindows(gfx::NativeCursor cursor) { 19 void SetCursorOnAllRootWindows(gfx::NativeCursor cursor) {
20 aura::Window::Windows root_windows = 20 aura::Window::Windows root_windows =
21 Shell::GetInstance()->GetAllRootWindows(); 21 Shell::GetInstance()->GetAllRootWindows();
22 for (aura::Window::Windows::iterator iter = root_windows.begin(); 22 for (aura::Window::Windows::iterator iter = root_windows.begin();
23 iter != root_windows.end(); ++iter) 23 iter != root_windows.end(); ++iter)
24 (*iter)->GetDispatcher()->SetCursor(cursor); 24 (*iter)->GetDispatcher()->SetCursor(cursor);
25 #if defined(OS_CHROMEOS) 25 #if defined(OS_CHROMEOS)
26 Shell::GetInstance()->display_controller()-> 26 Shell::GetInstance()->display_controller()->
27 mirror_window_controller()->SetMirroredCursor(cursor); 27 cursor_window_controller()->SetCursor(cursor);
28 #endif 28 #endif
29 } 29 }
30 30
31 void NotifyCursorVisibilityChange(bool visible) { 31 void NotifyCursorVisibilityChange(bool visible) {
32 aura::Window::Windows root_windows = 32 aura::Window::Windows root_windows =
33 Shell::GetInstance()->GetAllRootWindows(); 33 Shell::GetInstance()->GetAllRootWindows();
34 for (aura::Window::Windows::iterator iter = root_windows.begin(); 34 for (aura::Window::Windows::iterator iter = root_windows.begin();
35 iter != root_windows.end(); ++iter) 35 iter != root_windows.end(); ++iter)
36 (*iter)->GetDispatcher()->OnCursorVisibilityChanged(visible); 36 (*iter)->GetDispatcher()->OnCursorVisibilityChanged(visible);
37 #if defined(OS_CHROMEOS) 37 #if defined(OS_CHROMEOS)
38 Shell::GetInstance()->display_controller()->mirror_window_controller()-> 38 Shell::GetInstance()->display_controller()->cursor_window_controller()->
39 SetMirroredCursorVisibility(visible); 39 SetVisibility(visible);
40 #endif 40 #endif
41 } 41 }
42 42
43 void NotifyMouseEventsEnableStateChange(bool enabled) { 43 void NotifyMouseEventsEnableStateChange(bool enabled) {
44 aura::Window::Windows root_windows = 44 aura::Window::Windows root_windows =
45 Shell::GetInstance()->GetAllRootWindows(); 45 Shell::GetInstance()->GetAllRootWindows();
46 for (aura::Window::Windows::iterator iter = root_windows.begin(); 46 for (aura::Window::Windows::iterator iter = root_windows.begin();
47 iter != root_windows.end(); ++iter) 47 iter != root_windows.end(); ++iter)
48 (*iter)->GetDispatcher()->OnMouseEventsEnableStateChanged(enabled); 48 (*iter)->GetDispatcher()->OnMouseEventsEnableStateChanged(enabled);
49 // Mirror window never process events. 49 // Mirror window never process events.
50 } 50 }
51 51
52 } // namespace 52 } // namespace
53 53
54 AshNativeCursorManager::AshNativeCursorManager() 54 AshNativeCursorManager::AshNativeCursorManager()
55 : image_cursors_(new ImageCursors) { 55 : native_cursor_enabled_(true),
56 image_cursors_(new ImageCursors) {
56 } 57 }
57 58
58 AshNativeCursorManager::~AshNativeCursorManager() { 59 AshNativeCursorManager::~AshNativeCursorManager() {
59 } 60 }
60 61
62
63 void AshNativeCursorManager::SetNativeCursorEnabled(bool enabled) {
64 native_cursor_enabled_ = enabled;
65
66 views::corewm::CursorManager* cursor_manager =
67 Shell::GetInstance()->cursor_manager();
68 SetCursor(cursor_manager->GetCursor(), cursor_manager);
69 }
70
61 void AshNativeCursorManager::SetDisplay( 71 void AshNativeCursorManager::SetDisplay(
62 const gfx::Display& display, 72 const gfx::Display& display,
63 views::corewm::NativeCursorManagerDelegate* delegate) { 73 views::corewm::NativeCursorManagerDelegate* delegate) {
64 if (image_cursors_->SetDisplay(display)) 74 if (image_cursors_->SetDisplay(display))
65 SetCursor(delegate->GetCursor(), delegate); 75 SetCursor(delegate->GetCursor(), delegate);
76 #if defined(OS_CHROMEOS)
77 Shell::GetInstance()->display_controller()->cursor_window_controller()->
78 SetDisplay(display);
79 #endif
66 } 80 }
67 81
68 void AshNativeCursorManager::SetCursor( 82 void AshNativeCursorManager::SetCursor(
69 gfx::NativeCursor cursor, 83 gfx::NativeCursor cursor,
70 views::corewm::NativeCursorManagerDelegate* delegate) { 84 views::corewm::NativeCursorManagerDelegate* delegate) {
71 gfx::NativeCursor new_cursor = cursor; 85 gfx::NativeCursor new_cursor = cursor;
72 image_cursors_->SetPlatformCursor(&new_cursor); 86 if (native_cursor_enabled_) {
87 image_cursors_->SetPlatformCursor(&new_cursor);
88 } else {
89 gfx::NativeCursor invisible_cursor(ui::kCursorNone);
90 image_cursors_->SetPlatformCursor(&invisible_cursor);
91 if (new_cursor == ui::kCursorCustom) {
92 new_cursor = invisible_cursor;
93 } else {
94 new_cursor.SetPlatformCursor(invisible_cursor.platform());
95 }
96 }
73 new_cursor.set_device_scale_factor( 97 new_cursor.set_device_scale_factor(
74 image_cursors_->GetDisplay().device_scale_factor()); 98 image_cursors_->GetDisplay().device_scale_factor());
75 99
76 delegate->CommitCursor(new_cursor); 100 delegate->CommitCursor(new_cursor);
77 101
78 if (delegate->IsCursorVisible()) 102 if (delegate->IsCursorVisible())
79 SetCursorOnAllRootWindows(new_cursor); 103 SetCursorOnAllRootWindows(new_cursor);
80 } 104 }
81 105
82 void AshNativeCursorManager::SetCursorSet( 106 void AshNativeCursorManager::SetCursorSet(
83 ui::CursorSetType cursor_set, 107 ui::CursorSetType cursor_set,
84 views::corewm::NativeCursorManagerDelegate* delegate) { 108 views::corewm::NativeCursorManagerDelegate* delegate) {
85 image_cursors_->SetCursorSet(cursor_set); 109 image_cursors_->SetCursorSet(cursor_set);
86 delegate->CommitCursorSet(cursor_set); 110 delegate->CommitCursorSet(cursor_set);
87 111
88 // Sets the cursor to reflect the scale change immediately. 112 // Sets the cursor to reflect the scale change immediately.
89 if (delegate->IsCursorVisible()) 113 if (delegate->IsCursorVisible())
90 SetCursor(delegate->GetCursor(), delegate); 114 SetCursor(delegate->GetCursor(), delegate);
115
116 #if defined(OS_CHROMEOS)
117 Shell::GetInstance()->display_controller()->cursor_window_controller()->
118 SetCursorSet(cursor_set);
119 #endif
91 } 120 }
92 121
93 void AshNativeCursorManager::SetScale( 122 void AshNativeCursorManager::SetScale(
94 float scale, 123 float scale,
95 views::corewm::NativeCursorManagerDelegate* delegate) { 124 views::corewm::NativeCursorManagerDelegate* delegate) {
96 image_cursors_->SetScale(scale); 125 image_cursors_->SetScale(scale);
97 delegate->CommitScale(scale); 126 delegate->CommitScale(scale);
98 127
99 // Sets the cursor to reflect the scale change immediately. 128 // Sets the cursor to reflect the scale change immediately.
100 SetCursor(delegate->GetCursor(), delegate); 129 SetCursor(delegate->GetCursor(), delegate);
(...skipping 25 matching lines...) Expand all
126 disabled_cursor_location_); 155 disabled_cursor_location_);
127 } else { 156 } else {
128 disabled_cursor_location_ = aura::Env::GetInstance()->last_mouse_location(); 157 disabled_cursor_location_ = aura::Env::GetInstance()->last_mouse_location();
129 } 158 }
130 159
131 SetVisibility(delegate->IsCursorVisible(), delegate); 160 SetVisibility(delegate->IsCursorVisible(), delegate);
132 NotifyMouseEventsEnableStateChange(enabled); 161 NotifyMouseEventsEnableStateChange(enabled);
133 } 162 }
134 163
135 } // namespace ash 164 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/ash_native_cursor_manager.h ('k') | chrome/browser/chromeos/accessibility/accessibility_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698