123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef UI_BASE_CURSOR_OZONE_BITMAP_CURSOR_FACTORY_OZONE_H_ 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define UI_BASE_CURSOR_OZONE_BITMAP_CURSOR_FACTORY_OZONE_H_ 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <map> 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/memory/ref_counted.h" 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/base/cursor/cursor.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/base/ui_base_export.h" 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/gfx/geometry/point.h" 156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/ozone/public/cursor_factory_ozone.h" 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace ui { 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// A cursor that is an SkBitmap combined with a gfx::Point hotspot. 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class UI_BASE_EXPORT BitmapCursorOzone 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) : public base::RefCounted<BitmapCursorOzone> { 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BitmapCursorOzone(const SkBitmap& bitmap, const gfx::Point& hotspot); 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BitmapCursorOzone(const std::vector<SkBitmap>& bitmaps, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Point& hotspot, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int frame_delay_ms); 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Point& hotspot(); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const SkBitmap& bitmap(); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // For animated cursors. 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<SkBitmap>& bitmaps(); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int frame_delay_ms(); 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) friend class base::RefCounted<BitmapCursorOzone>; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~BitmapCursorOzone(); 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<SkBitmap> bitmaps_; 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Point hotspot_; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int frame_delay_ms_; 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(BitmapCursorOzone); 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}; 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// CursorFactoryOzone implementation for bitmapped cursors. 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// This is a base class for platforms where PlatformCursor is an SkBitmap 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// combined with a gfx::Point for the hotspot. 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Subclasses need only implement SetBitmapCursor() as everything else is 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// implemented here. 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class UI_BASE_EXPORT BitmapCursorFactoryOzone : public CursorFactoryOzone { 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) BitmapCursorFactoryOzone(); 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual ~BitmapCursorFactoryOzone(); 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Convert PlatformCursor to BitmapCursorOzone. 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static scoped_refptr<BitmapCursorOzone> GetBitmapCursor( 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PlatformCursor platform_cursor); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // CursorFactoryOzone: 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual PlatformCursor GetDefaultCursor(int type) OVERRIDE; 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual PlatformCursor CreateImageCursor(const SkBitmap& bitmap, 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const gfx::Point& hotspot) OVERRIDE; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual PlatformCursor CreateAnimatedCursor( 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<SkBitmap>& bitmaps, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Point& hotspot, 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int frame_delay_ms) OVERRIDE; 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void RefImageCursor(PlatformCursor cursor) OVERRIDE; 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void UnrefImageCursor(PlatformCursor cursor) OVERRIDE; 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Get cached BitmapCursorOzone for a default cursor. 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<BitmapCursorOzone> GetDefaultCursorInternal(int type); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Default cursors are cached & owned by the factory. 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch typedef std::map<int, scoped_refptr<BitmapCursorOzone> > DefaultCursorMap; 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DefaultCursorMap default_cursors_; 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(BitmapCursorFactoryOzone); 8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}; 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace ui 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif // UI_BASE_CURSOR_OZONE_BITMAP_CURSOR_FACTORY_OZONE_H_ 87