1// Copyright (c) 2012 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_BASE_CURSOR_CURSOR_LOADER_H_
6#define UI_BASE_CURSOR_CURSOR_LOADER_H_
7
8#include "base/logging.h"
9#include "base/strings/string16.h"
10#include "ui/base/ui_base_export.h"
11#include "ui/gfx/display.h"
12#include "ui/gfx/native_widget_types.h"
13#include "ui/gfx/point.h"
14
15namespace ui {
16
17class UI_BASE_EXPORT CursorLoader {
18 public:
19  CursorLoader() : scale_(1.f), rotation_(gfx::Display::ROTATE_0) {}
20  virtual ~CursorLoader() {}
21
22  gfx::Display::Rotation rotation() const {
23    return rotation_;
24  }
25
26  void set_rotation(gfx::Display::Rotation rotation) {
27    rotation_ = rotation;
28  }
29
30  // Returns the current scale of the mouse cursor icon.
31  float scale() const {
32    return scale_;
33  }
34
35  // Sets the scale of the mouse cursor icon.
36  void set_scale(const float scale) {
37    scale_ = scale;
38  }
39
40  // Creates a cursor from an image resource and puts it in the cursor map.
41  virtual void LoadImageCursor(int id,
42                               int resource_id,
43                               const gfx::Point& hot) = 0;
44
45  // Creates an animated cursor from an image resource and puts it in the
46  // cursor map. The image is assumed to be a concatenation of animation frames
47  // from left to right. Also, each frame is assumed to be square
48  // (width == height).
49  // |frame_delay_ms| is the delay between frames in millisecond.
50  virtual void LoadAnimatedCursor(int id,
51                                  int resource_id,
52                                  const gfx::Point& hot,
53                                  int frame_delay_ms) = 0;
54
55  // Unloads all the cursors.
56  virtual void UnloadAll() = 0;
57
58  // Sets the platform cursor based on the native type of |cursor|.
59  virtual void SetPlatformCursor(gfx::NativeCursor* cursor) = 0;
60
61  // Creates a CursorLoader.
62  static CursorLoader* Create();
63
64 private:
65  // The current scale of the mouse cursor icon.
66  float scale_;
67
68  // The current rotation of the mouse cursor icon.
69  gfx::Display::Rotation rotation_;
70
71  DISALLOW_COPY_AND_ASSIGN(CursorLoader);
72};
73
74}  // namespace ui
75
76#endif  // UI_BASE_CURSOR_CURSOR_LOADER_H_
77