desktop_native_cursor_manager.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/root_window.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/cursor/cursor_loader.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DesktopNativeCursorManager::DesktopNativeCursorManager( 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* window) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : root_window_(window), 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_(ui::CursorLoader::Create()) { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DesktopNativeCursorManager::~DesktopNativeCursorManager() { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetDisplay( 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Display& display, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->UnloadAll(); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->set_display(display); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCursor(delegate->GetCurrentCursor(), delegate); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetCursor( 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeCursor cursor, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeCursor new_cursor = cursor; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->SetPlatformCursor(&new_cursor); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->CommitCursor(new_cursor); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate->GetCurrentVisibility()) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->SetCursor(new_cursor); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetVisibility( 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool visible, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->CommitVisibility(visible); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (visible) { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCursor(delegate->GetCurrentCursor(), delegate); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeCursor invisible_cursor(ui::kCursorNone); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->SetPlatformCursor(&invisible_cursor); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->SetCursor(invisible_cursor); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->OnCursorVisibilityChanged(visible); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetMouseEventsEnabled( 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool enabled, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->CommitMouseEventsEnabled(enabled); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(erg): In the ash version, we set the last mouse location on Env. I'm 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not sure this concept makes sense on the desktop. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetVisibility(delegate->GetCurrentVisibility(), delegate); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->OnMouseEventsEnableStateChanged(enabled); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetCursorResourceModule( 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& module_name) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->SetCursorResourceModule(module_name); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 75