blob: e32ad8e37ba33377e634ca0fe457c739357aa4ed [file] [log] [blame]
// Copyright (c) 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cursor_manager.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
namespace content {
CursorManager::CursorManager(RenderWidgetHostViewBase* root)
: view_under_cursor_(root), root_view_(root) {}
CursorManager::~CursorManager() {}
void CursorManager::UpdateCursor(RenderWidgetHostViewBase* view,
const WebCursor& cursor) {
cursor_map_[view] = cursor;
if (view == view_under_cursor_)
root_view_->DisplayCursor(cursor);
}
void CursorManager::UpdateViewUnderCursor(RenderWidgetHostViewBase* view) {
view_under_cursor_ = view;
WebCursor cursor;
// If no UpdateCursor has been received for this view, use an empty cursor.
auto it = cursor_map_.find(view);
if (it != cursor_map_.end())
cursor = it->second;
root_view_->DisplayCursor(cursor);
}
void CursorManager::ViewBeingDestroyed(RenderWidgetHostViewBase* view) {
cursor_map_.erase(view);
// If the view right under the mouse is going away, use the root's cursor
// until UpdateViewUnderCursor is called again.
if (view == view_under_cursor_ && view != root_view_)
UpdateViewUnderCursor(root_view_);
}
bool CursorManager::GetCursorForTesting(RenderWidgetHostViewBase* view,
WebCursor& cursor) {
if (cursor_map_.find(view) == cursor_map_.end())
return false;
cursor = cursor_map_[view];
return true;
}
} // namespace content