// Copyright 2014 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 "ui/base/cursor/cursor_loader_ozone.h" #include #include "ui/base/cursor/cursor.h" #include "ui/base/cursor/cursor_util.h" #include "ui/ozone/public/cursor_factory_ozone.h" namespace ui { CursorLoaderOzone::CursorLoaderOzone() {} CursorLoaderOzone::~CursorLoaderOzone() {} void CursorLoaderOzone::LoadImageCursor(int id, int resource_id, const gfx::Point& hot) { SkBitmap bitmap; gfx::Point hotspot = hot; GetImageCursorBitmap(resource_id, scale(), rotation(), &hotspot, &bitmap); cursors_[id] = CursorFactoryOzone::GetInstance()->CreateImageCursor(bitmap, hotspot); } void CursorLoaderOzone::LoadAnimatedCursor(int id, int resource_id, const gfx::Point& hot, int frame_delay_ms) { std::vector bitmaps; gfx::Point hotspot = hot; GetAnimatedCursorBitmaps( resource_id, scale(), rotation(), &hotspot, &bitmaps); cursors_[id] = CursorFactoryOzone::GetInstance()->CreateAnimatedCursor( bitmaps, hotspot, frame_delay_ms); } void CursorLoaderOzone::UnloadAll() { for (ImageCursorMap::const_iterator it = cursors_.begin(); it != cursors_.end(); ++it) CursorFactoryOzone::GetInstance()->UnrefImageCursor(it->second); cursors_.clear(); } void CursorLoaderOzone::SetPlatformCursor(gfx::NativeCursor* cursor) { int native_type = cursor->native_type(); PlatformCursor platform; if (cursors_.count(native_type)) { // An image cursor is loaded for this type. platform = cursors_[native_type]; } else if (native_type == kCursorCustom) { // The platform cursor was already set via WebCursor::GetPlatformCursor. platform = cursor->platform(); } else { // Use default cursor of this type. platform = CursorFactoryOzone::GetInstance()->GetDefaultCursor(native_type); } cursor->SetPlatformCursor(platform); } CursorLoader* CursorLoader::Create() { return new CursorLoaderOzone(); } } // namespace ui