1/*
2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 *     * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *     * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 *     * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef WebCursorInfo_h
32#define WebCursorInfo_h
33
34#include "WebImage.h"
35#include "WebPoint.h"
36
37#ifdef WIN32
38typedef struct HICON__* HICON;
39typedef HICON HCURSOR;
40#endif
41
42namespace blink {
43
44class Cursor;
45
46struct WebCursorInfo {
47    enum Type {
48        TypePointer,
49        TypeCross,
50        TypeHand,
51        TypeIBeam,
52        TypeWait,
53        TypeHelp,
54        TypeEastResize,
55        TypeNorthResize,
56        TypeNorthEastResize,
57        TypeNorthWestResize,
58        TypeSouthResize,
59        TypeSouthEastResize,
60        TypeSouthWestResize,
61        TypeWestResize,
62        TypeNorthSouthResize,
63        TypeEastWestResize,
64        TypeNorthEastSouthWestResize,
65        TypeNorthWestSouthEastResize,
66        TypeColumnResize,
67        TypeRowResize,
68        TypeMiddlePanning,
69        TypeEastPanning,
70        TypeNorthPanning,
71        TypeNorthEastPanning,
72        TypeNorthWestPanning,
73        TypeSouthPanning,
74        TypeSouthEastPanning,
75        TypeSouthWestPanning,
76        TypeWestPanning,
77        TypeMove,
78        TypeVerticalText,
79        TypeCell,
80        TypeContextMenu,
81        TypeAlias,
82        TypeProgress,
83        TypeNoDrop,
84        TypeCopy,
85        TypeNone,
86        TypeNotAllowed,
87        TypeZoomIn,
88        TypeZoomOut,
89        TypeGrab,
90        TypeGrabbing,
91        TypeCustom
92    };
93
94    Type type;
95    WebPoint hotSpot;
96    float imageScaleFactor;
97    WebImage customImage;
98
99#ifdef WIN32
100    // On Windows, TypeCustom may alternatively reference an externally
101    // defined HCURSOR. If type is TypeCustom and externalHandle is non-
102    // null, then customData should be ignored. The WebCursorInfo is not
103    // responsible for managing the lifetime of this cursor handle.
104    HCURSOR externalHandle;
105#endif
106
107    explicit WebCursorInfo(Type type = TypePointer)
108        : type(type)
109        , imageScaleFactor(1)
110    {
111#ifdef WIN32
112        externalHandle = 0;
113#endif
114    }
115
116#if INSIDE_BLINK
117    BLINK_PLATFORM_EXPORT explicit WebCursorInfo(const Cursor&);
118#endif
119};
120
121} // namespace blink
122
123#endif
124