[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 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_H_ |
| 6 | #define UI_BASE_CURSOR_CURSOR_H_ |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 7 | |
| 8 | #include "build/build_config.h" |
[email protected] | 9552c2d | 2014-01-06 02:05:32 | [diff] [blame] | 9 | #include "ui/base/ui_base_export.h" |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 10 | |
| 11 | namespace gfx { |
| 12 | class Point; |
| 13 | class Size; |
| 14 | } |
| 15 | |
| 16 | #if defined(OS_WIN) |
| 17 | typedef struct HINSTANCE__* HINSTANCE; |
| 18 | typedef struct HICON__* HICON; |
| 19 | typedef HICON HCURSOR; |
| 20 | #endif |
| 21 | |
| 22 | namespace ui { |
| 23 | |
| 24 | #if defined(OS_WIN) |
| 25 | typedef ::HCURSOR PlatformCursor; |
| 26 | #elif defined(USE_X11) |
| 27 | typedef unsigned long PlatformCursor; |
| 28 | #else |
| 29 | typedef void* PlatformCursor; |
| 30 | #endif |
| 31 | |
| 32 | // TODO(jamescook): Once we're on C++0x we could change these constants |
| 33 | // to an enum and forward declare it in native_widget_types.h. |
| 34 | |
| 35 | // Equivalent to a NULL HCURSOR on Windows. |
| 36 | const int kCursorNull = 0; |
| 37 | |
| 38 | // These cursors mirror WebKit cursors from WebCursorInfo, but are replicated |
| 39 | // here so we don't introduce a WebKit dependency. |
| 40 | const int kCursorPointer = 1; |
| 41 | const int kCursorCross = 2; |
| 42 | const int kCursorHand = 3; |
| 43 | const int kCursorIBeam = 4; |
| 44 | const int kCursorWait = 5; |
| 45 | const int kCursorHelp = 6; |
| 46 | const int kCursorEastResize = 7; |
| 47 | const int kCursorNorthResize = 8; |
| 48 | const int kCursorNorthEastResize = 9; |
| 49 | const int kCursorNorthWestResize = 10; |
| 50 | const int kCursorSouthResize = 11; |
| 51 | const int kCursorSouthEastResize = 12; |
| 52 | const int kCursorSouthWestResize = 13; |
| 53 | const int kCursorWestResize = 14; |
| 54 | const int kCursorNorthSouthResize = 15; |
| 55 | const int kCursorEastWestResize = 16; |
| 56 | const int kCursorNorthEastSouthWestResize = 17; |
| 57 | const int kCursorNorthWestSouthEastResize = 18; |
| 58 | const int kCursorColumnResize = 19; |
| 59 | const int kCursorRowResize = 20; |
| 60 | const int kCursorMiddlePanning = 21; |
| 61 | const int kCursorEastPanning = 22; |
| 62 | const int kCursorNorthPanning = 23; |
| 63 | const int kCursorNorthEastPanning = 24; |
| 64 | const int kCursorNorthWestPanning = 25; |
| 65 | const int kCursorSouthPanning = 26; |
| 66 | const int kCursorSouthEastPanning = 27; |
| 67 | const int kCursorSouthWestPanning = 28; |
| 68 | const int kCursorWestPanning = 29; |
| 69 | const int kCursorMove = 30; |
| 70 | const int kCursorVerticalText = 31; |
| 71 | const int kCursorCell = 32; |
| 72 | const int kCursorContextMenu = 33; |
| 73 | const int kCursorAlias = 34; |
| 74 | const int kCursorProgress = 35; |
| 75 | const int kCursorNoDrop = 36; |
| 76 | const int kCursorCopy = 37; |
| 77 | const int kCursorNone = 38; |
| 78 | const int kCursorNotAllowed = 39; |
| 79 | const int kCursorZoomIn = 40; |
| 80 | const int kCursorZoomOut = 41; |
| 81 | const int kCursorGrab = 42; |
| 82 | const int kCursorGrabbing = 43; |
| 83 | const int kCursorCustom = 44; |
| 84 | |
[email protected] | 2a08226 | 2013-08-26 12:40:22 | [diff] [blame] | 85 | enum CursorSetType { |
| 86 | CURSOR_SET_NORMAL, |
[email protected] | 2a08226 | 2013-08-26 12:40:22 | [diff] [blame] | 87 | CURSOR_SET_LARGE |
| 88 | }; |
| 89 | |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 90 | // Ref-counted cursor that supports both default and custom cursors. |
[email protected] | 9552c2d | 2014-01-06 02:05:32 | [diff] [blame] | 91 | class UI_BASE_EXPORT Cursor { |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 92 | public: |
| 93 | Cursor(); |
| 94 | |
| 95 | // Implicit constructor. |
| 96 | Cursor(int type); |
| 97 | |
| 98 | // Allow copy. |
| 99 | Cursor(const Cursor& cursor); |
| 100 | |
| 101 | ~Cursor(); |
| 102 | |
| 103 | void SetPlatformCursor(const PlatformCursor& platform); |
| 104 | |
| 105 | void RefCustomCursor(); |
| 106 | void UnrefCustomCursor(); |
| 107 | |
| 108 | int native_type() const { return native_type_; } |
| 109 | PlatformCursor platform() const { return platform_cursor_; } |
[email protected] | 151ffdff | 2012-09-11 20:18:35 | [diff] [blame] | 110 | float device_scale_factor() const { |
| 111 | return device_scale_factor_; |
| 112 | } |
| 113 | void set_device_scale_factor(float device_scale_factor) { |
| 114 | device_scale_factor_ = device_scale_factor; |
| 115 | } |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 116 | |
| 117 | bool operator==(int type) const { return native_type_ == type; } |
| 118 | bool operator==(const Cursor& cursor) const { |
| 119 | return native_type_ == cursor.native_type_ && |
[email protected] | 151ffdff | 2012-09-11 20:18:35 | [diff] [blame] | 120 | platform_cursor_ == cursor.platform_cursor_ && |
| 121 | device_scale_factor_ == cursor.device_scale_factor_; |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 122 | } |
| 123 | bool operator!=(int type) const { return native_type_ != type; } |
| 124 | bool operator!=(const Cursor& cursor) const { |
| 125 | return native_type_ != cursor.native_type_ || |
[email protected] | 151ffdff | 2012-09-11 20:18:35 | [diff] [blame] | 126 | platform_cursor_ != cursor.platform_cursor_ || |
| 127 | device_scale_factor_ != cursor.device_scale_factor_; |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 128 | } |
| 129 | |
[email protected] | 4196ec80d | 2012-08-23 00:48:45 | [diff] [blame] | 130 | void operator=(const Cursor& cursor) { |
| 131 | Assign(cursor); |
| 132 | } |
| 133 | |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 134 | private: |
[email protected] | 4196ec80d | 2012-08-23 00:48:45 | [diff] [blame] | 135 | void Assign(const Cursor& cursor); |
| 136 | |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 137 | // See definitions above. |
| 138 | int native_type_; |
| 139 | |
| 140 | PlatformCursor platform_cursor_; |
[email protected] | 151ffdff | 2012-09-11 20:18:35 | [diff] [blame] | 141 | |
| 142 | // The device scale factor for the cursor. |
| 143 | float device_scale_factor_; |
[email protected] | c783955 | 2012-04-03 21:14:36 | [diff] [blame] | 144 | }; |
| 145 | |
| 146 | } // namespace ui |
| 147 | |
| 148 | #endif // UI_BASE_CURSOR_CURSOR_H_ |