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