1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_OZONE_PUBLIC_CURSOR_FACTORY_OZONE_H_
6#define UI_OZONE_PUBLIC_CURSOR_FACTORY_OZONE_H_
7
8#include <vector>
9
10#include "ui/gfx/native_widget_types.h"
11#include "ui/ozone/ozone_base_export.h"
12
13namespace gfx {
14class Point;
15}
16
17namespace ui {
18
19typedef void* PlatformCursor;
20
21class OZONE_BASE_EXPORT CursorFactoryOzone {
22 public:
23  CursorFactoryOzone();
24  virtual ~CursorFactoryOzone();
25
26  // Returns the singleton instance.
27  static CursorFactoryOzone* GetInstance();
28
29  // Return the default cursor of the specified type. The types are listed in
30  // ui/base/cursor/cursor.h. Default cursors are managed by the implementation
31  // and must live indefinitely; there's no way to know when to free them.
32  virtual PlatformCursor GetDefaultCursor(int type);
33
34  // Return a image cursor from the specified image & hotspot. Image cursors
35  // are referenced counted and have an initial refcount of 1. Therefore, each
36  // CreateImageCursor call must be matched with a call to UnrefImageCursor.
37  virtual PlatformCursor CreateImageCursor(const SkBitmap& bitmap,
38                                           const gfx::Point& hotspot);
39
40  // Return a animated cursor from the specified image & hotspot. Animated
41  // cursors are referenced counted and have an initial refcount of 1.
42  // Therefore, each CreateAnimatedCursor call must be matched with a call to
43  // UnrefImageCursor.
44  virtual PlatformCursor CreateAnimatedCursor(
45      const std::vector<SkBitmap>& bitmaps,
46      const gfx::Point& hotspot,
47      int frame_delay_ms);
48
49  // Increment platform image cursor refcount.
50  virtual void RefImageCursor(PlatformCursor cursor);
51
52  // Decrement platform image cursor refcount.
53  virtual void UnrefImageCursor(PlatformCursor cursor);
54
55 private:
56  static CursorFactoryOzone* impl_;  // not owned
57};
58
59}  // namespace ui
60
61#endif  // UI_OZONE_PUBLIC_CURSOR_FACTORY_OZONE_H_
62