• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2004, 2006, 2008 Apple 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
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef Cursor_h
27 #define Cursor_h
28 
29 #include "platform/PlatformExport.h"
30 #include "platform/geometry/IntPoint.h"
31 #include "platform/graphics/Image.h"
32 #include "wtf/Assertions.h"
33 #include "wtf/RefPtr.h"
34 
35 namespace blink {
36 
37 class PLATFORM_EXPORT Cursor {
38     WTF_MAKE_FAST_ALLOCATED;
39 public:
40     enum Type {
41         Pointer = 0,
42         Cross,
43         Hand,
44         IBeam,
45         Wait,
46         Help,
47         EastResize,
48         NorthResize,
49         NorthEastResize,
50         NorthWestResize,
51         SouthResize,
52         SouthEastResize,
53         SouthWestResize,
54         WestResize,
55         NorthSouthResize,
56         EastWestResize,
57         NorthEastSouthWestResize,
58         NorthWestSouthEastResize,
59         ColumnResize,
60         RowResize,
61         MiddlePanning,
62         EastPanning,
63         NorthPanning,
64         NorthEastPanning,
65         NorthWestPanning,
66         SouthPanning,
67         SouthEastPanning,
68         SouthWestPanning,
69         WestPanning,
70         Move,
71         VerticalText,
72         Cell,
73         ContextMenu,
74         Alias,
75         Progress,
76         NoDrop,
77         Copy,
78         None,
79         NotAllowed,
80         ZoomIn,
81         ZoomOut,
82         Grab,
83         Grabbing,
84         Custom
85     };
86 
87     static const Cursor& fromType(Cursor::Type);
88 
Cursor()89     Cursor()
90         // This is an invalid Cursor and should never actually get used.
91         : m_type(static_cast<Type>(-1))
92     {
93     }
94 
95     Cursor(Image*, const IntPoint& hotSpot);
96 
97     // Hot spot is in image pixels.
98     Cursor(Image*, const IntPoint& hotSpot, float imageScaleFactor);
99 
100     Cursor(const Cursor&);
101     ~Cursor();
102     Cursor& operator=(const Cursor&);
103 
104     explicit Cursor(Type);
type()105     Type type() const
106     {
107         ASSERT(m_type >= 0 && m_type <= Custom);
108         return m_type;
109     }
image()110     Image* image() const { return m_image.get(); }
hotSpot()111     const IntPoint& hotSpot() const { return m_hotSpot; }
112     // Image scale in image pixels per logical (UI) pixel.
imageScaleFactor()113     float imageScaleFactor() const { return m_imageScaleFactor; }
114 
115 private:
116     Type m_type;
117     RefPtr<Image> m_image;
118     IntPoint m_hotSpot;
119     float m_imageScaleFactor;
120 };
121 
122 PLATFORM_EXPORT IntPoint determineHotSpot(Image*, const IntPoint& specifiedHotSpot);
123 
124 PLATFORM_EXPORT const Cursor& pointerCursor();
125 PLATFORM_EXPORT const Cursor& crossCursor();
126 PLATFORM_EXPORT const Cursor& handCursor();
127 PLATFORM_EXPORT const Cursor& moveCursor();
128 PLATFORM_EXPORT const Cursor& iBeamCursor();
129 PLATFORM_EXPORT const Cursor& waitCursor();
130 PLATFORM_EXPORT const Cursor& helpCursor();
131 PLATFORM_EXPORT const Cursor& eastResizeCursor();
132 PLATFORM_EXPORT const Cursor& northResizeCursor();
133 PLATFORM_EXPORT const Cursor& northEastResizeCursor();
134 PLATFORM_EXPORT const Cursor& northWestResizeCursor();
135 PLATFORM_EXPORT const Cursor& southResizeCursor();
136 PLATFORM_EXPORT const Cursor& southEastResizeCursor();
137 PLATFORM_EXPORT const Cursor& southWestResizeCursor();
138 PLATFORM_EXPORT const Cursor& westResizeCursor();
139 PLATFORM_EXPORT const Cursor& northSouthResizeCursor();
140 PLATFORM_EXPORT const Cursor& eastWestResizeCursor();
141 PLATFORM_EXPORT const Cursor& northEastSouthWestResizeCursor();
142 PLATFORM_EXPORT const Cursor& northWestSouthEastResizeCursor();
143 PLATFORM_EXPORT const Cursor& columnResizeCursor();
144 PLATFORM_EXPORT const Cursor& rowResizeCursor();
145 PLATFORM_EXPORT const Cursor& middlePanningCursor();
146 PLATFORM_EXPORT const Cursor& eastPanningCursor();
147 PLATFORM_EXPORT const Cursor& northPanningCursor();
148 PLATFORM_EXPORT const Cursor& northEastPanningCursor();
149 PLATFORM_EXPORT const Cursor& northWestPanningCursor();
150 PLATFORM_EXPORT const Cursor& southPanningCursor();
151 PLATFORM_EXPORT const Cursor& southEastPanningCursor();
152 PLATFORM_EXPORT const Cursor& southWestPanningCursor();
153 PLATFORM_EXPORT const Cursor& westPanningCursor();
154 PLATFORM_EXPORT const Cursor& verticalTextCursor();
155 PLATFORM_EXPORT const Cursor& cellCursor();
156 PLATFORM_EXPORT const Cursor& contextMenuCursor();
157 PLATFORM_EXPORT const Cursor& noDropCursor();
158 PLATFORM_EXPORT const Cursor& notAllowedCursor();
159 PLATFORM_EXPORT const Cursor& progressCursor();
160 PLATFORM_EXPORT const Cursor& aliasCursor();
161 PLATFORM_EXPORT const Cursor& zoomInCursor();
162 PLATFORM_EXPORT const Cursor& zoomOutCursor();
163 PLATFORM_EXPORT const Cursor& copyCursor();
164 PLATFORM_EXPORT const Cursor& noneCursor();
165 PLATFORM_EXPORT const Cursor& grabCursor();
166 PLATFORM_EXPORT const Cursor& grabbingCursor();
167 
168 } // namespace blink
169 
170 #endif // Cursor_h
171