blob: bb832fa9631cafdb635e7768ec7d3fb9338498c6 [file] [log] [blame]
// Copyright (c) 2012 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.
#ifndef UI_BASE_CURSOR_CURSOR_H_
#define UI_BASE_CURSOR_CURSOR_H_
#include "build/build_config.h"
#include "ui/base/ui_export.h"
namespace gfx {
class Point;
class Size;
}
#if defined(OS_WIN)
typedef struct HINSTANCE__* HINSTANCE;
typedef struct HICON__* HICON;
typedef HICON HCURSOR;
#endif
namespace ui {
#if defined(OS_WIN)
typedef ::HCURSOR PlatformCursor;
#elif defined(USE_X11)
typedef unsigned long PlatformCursor;
#else
typedef void* PlatformCursor;
#endif
// TODO(jamescook): Once we're on C++0x we could change these constants
// to an enum and forward declare it in native_widget_types.h.
// Equivalent to a NULL HCURSOR on Windows.
const int kCursorNull = 0;
// These cursors mirror WebKit cursors from WebCursorInfo, but are replicated
// here so we don't introduce a WebKit dependency.
const int kCursorPointer = 1;
const int kCursorCross = 2;
const int kCursorHand = 3;
const int kCursorIBeam = 4;
const int kCursorWait = 5;
const int kCursorHelp = 6;
const int kCursorEastResize = 7;
const int kCursorNorthResize = 8;
const int kCursorNorthEastResize = 9;
const int kCursorNorthWestResize = 10;
const int kCursorSouthResize = 11;
const int kCursorSouthEastResize = 12;
const int kCursorSouthWestResize = 13;
const int kCursorWestResize = 14;
const int kCursorNorthSouthResize = 15;
const int kCursorEastWestResize = 16;
const int kCursorNorthEastSouthWestResize = 17;
const int kCursorNorthWestSouthEastResize = 18;
const int kCursorColumnResize = 19;
const int kCursorRowResize = 20;
const int kCursorMiddlePanning = 21;
const int kCursorEastPanning = 22;
const int kCursorNorthPanning = 23;
const int kCursorNorthEastPanning = 24;
const int kCursorNorthWestPanning = 25;
const int kCursorSouthPanning = 26;
const int kCursorSouthEastPanning = 27;
const int kCursorSouthWestPanning = 28;
const int kCursorWestPanning = 29;
const int kCursorMove = 30;
const int kCursorVerticalText = 31;
const int kCursorCell = 32;
const int kCursorContextMenu = 33;
const int kCursorAlias = 34;
const int kCursorProgress = 35;
const int kCursorNoDrop = 36;
const int kCursorCopy = 37;
const int kCursorNone = 38;
const int kCursorNotAllowed = 39;
const int kCursorZoomIn = 40;
const int kCursorZoomOut = 41;
const int kCursorGrab = 42;
const int kCursorGrabbing = 43;
const int kCursorCustom = 44;
enum CursorSetType {
CURSOR_SET_NORMAL,
CURSOR_SET_LARGE
};
// Ref-counted cursor that supports both default and custom cursors.
class UI_EXPORT Cursor {
public:
Cursor();
// Implicit constructor.
Cursor(int type);
// Allow copy.
Cursor(const Cursor& cursor);
~Cursor();
void SetPlatformCursor(const PlatformCursor& platform);
void RefCustomCursor();
void UnrefCustomCursor();
int native_type() const { return native_type_; }
PlatformCursor platform() const { return platform_cursor_; }
float device_scale_factor() const {
return device_scale_factor_;
}
void set_device_scale_factor(float device_scale_factor) {
device_scale_factor_ = device_scale_factor;
}
bool operator==(int type) const { return native_type_ == type; }
bool operator==(const Cursor& cursor) const {
return native_type_ == cursor.native_type_ &&
platform_cursor_ == cursor.platform_cursor_ &&
device_scale_factor_ == cursor.device_scale_factor_;
}
bool operator!=(int type) const { return native_type_ != type; }
bool operator!=(const Cursor& cursor) const {
return native_type_ != cursor.native_type_ ||
platform_cursor_ != cursor.platform_cursor_ ||
device_scale_factor_ != cursor.device_scale_factor_;
}
void operator=(const Cursor& cursor) {
Assign(cursor);
}
private:
void Assign(const Cursor& cursor);
// See definitions above.
int native_type_;
PlatformCursor platform_cursor_;
// The device scale factor for the cursor.
float device_scale_factor_;
};
} // namespace ui
#endif // UI_BASE_CURSOR_CURSOR_H_