desktop_native_cursor_manager.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_cursor_loader_updater.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DesktopNativeCursorManager::DesktopNativeCursorManager( 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* window, 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<DesktopCursorLoaderUpdater> cursor_loader_updater) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : root_window_(window), 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cursor_loader_updater_(cursor_loader_updater.Pass()), 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_(ui::CursorLoader::Create()) { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cursor_loader_updater_.get()) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cursor_loader_updater_->OnCreate(root_window_, cursor_loader_.get()); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DesktopNativeCursorManager::~DesktopNativeCursorManager() { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochgfx::NativeCursor DesktopNativeCursorManager::GetInitializedCursor(int type) { 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::NativeCursor cursor(type); 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cursor_loader_->SetPlatformCursor(&cursor); 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return cursor; 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetDisplay( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Display& display, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->UnloadAll(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->set_display(display); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cursor_loader_updater_.get()) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cursor_loader_updater_->OnDisplayUpdated(display, cursor_loader_.get()); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCursor(delegate->GetCurrentCursor(), delegate); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetCursor( 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeCursor cursor, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeCursor new_cursor = cursor; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->SetPlatformCursor(&new_cursor); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->CommitCursor(new_cursor); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate->GetCurrentVisibility()) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->SetCursor(new_cursor); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetVisibility( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool visible, 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->CommitVisibility(visible); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (visible) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCursor(delegate->GetCurrentCursor(), delegate); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeCursor invisible_cursor(ui::kCursorNone); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cursor_loader_->SetPlatformCursor(&invisible_cursor); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->SetCursor(invisible_cursor); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->OnCursorVisibilityChanged(visible); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void DesktopNativeCursorManager::SetScale( 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) float scale, 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NOTIMPLEMENTED(); 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DesktopNativeCursorManager::SetMouseEventsEnabled( 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool enabled, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::corewm::NativeCursorManagerDelegate* delegate) { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->CommitMouseEventsEnabled(enabled); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(erg): In the ash version, we set the last mouse location on Env. I'm 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not sure this concept makes sense on the desktop. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetVisibility(delegate->GetCurrentVisibility(), delegate); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window_->OnMouseEventsEnableStateChanged(enabled); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 92