]> git.saurik.com Git - wxWidgets.git/blob - src/cocoa/cursor.mm
fix a bunch of warnings in unicode build
[wxWidgets.git] / src / cocoa / cursor.mm
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: cursor.mm
3 // Purpose: wxCursor class for wxCocoa
4 // Author: Ryan Norton
5 // Modified by:
6 // Created: 2004-10-05
7 // RCS-ID: $Id$
8 // Copyright: (c) Ryan Norton
9 // Licence: wxWidgets licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
13 #pragma implementation "cursor.h"
14 #endif
15
16 #include "wx/wxprec.h"
17 #ifndef WX_PRECOMP
18 #include "wx/icon.h"
19 #include "wx/cursor.h"
20 #endif //WX_PRECOMP
21
22 #import <AppKit/NSCursor.h>
23 #import <AppKit/NSImage.h>
24 #include <wx/cocoa/string.h>
25
26 #if !USE_SHARED_LIBRARIES
27 IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxBitmap)
28 #endif
29
30 wxCursorRefData::wxCursorRefData() :
31 m_width(32), m_height(32), m_hCursor(nil)
32 {
33 }
34
35 wxCursorRefData::~wxCursorRefData()
36 {
37 if (m_hCursor)
38 [m_hCursor release];
39 }
40
41 // Cursors
42 wxCursor::wxCursor()
43 {
44 }
45
46 wxCursor::wxCursor(const char WXUNUSED(bits)[], int WXUNUSED(width), int WXUNUSED(height),
47 int WXUNUSED(hotSpotX), int WXUNUSED(hotSpotY), const char WXUNUSED(maskBits)[])
48 {
49
50 }
51
52 wxCursor::wxCursor(const wxString& cursor_file, long flags, int hotSpotX, int hotSpotY)
53 {
54 m_refData = new wxCursorRefData;
55
56 //TODO: Not sure if this works or not
57 NSImage* theImage;
58
59 if (flags & wxBITMAP_TYPE_MACCURSOR_RESOURCE)
60 {
61 //[NSBundle bundleForClass:[self class]]?
62 theImage = [[NSImage alloc]
63 initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:wxNSStringWithWxString(cursor_file) ofType:nil]
64 ];
65
66 }
67 else
68 theImage = [[NSImage alloc] initByReferencingFile:wxNSStringWithWxString(cursor_file)
69 ];
70
71 wxASSERT(theImage);
72
73 M_CURSORDATA->m_hCursor = [[NSCursor alloc] initWithImage:theImage
74 hotSpot:NSMakePoint(hotSpotX, hotSpotY)
75 ];
76
77 [theImage release];
78 }
79
80 // Cursors by stock number
81 wxCursor::wxCursor(int cursor_type)
82 {
83 m_refData = new wxCursorRefData;
84
85 switch (cursor_type)
86 {
87 case wxCURSOR_IBEAM:
88 M_CURSORDATA->m_hCursor = [[NSCursor IBeamCursor] retain];
89 break;
90 case wxCURSOR_ARROW:
91 M_CURSORDATA->m_hCursor = [[NSCursor arrowCursor] retain];
92 break;
93 /* TODO
94 case wxCURSOR_WAIT:
95 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_WAIT);
96 break;
97 case wxCURSOR_CROSS:
98 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_CROSS);
99 break;
100 case wxCURSOR_SIZENWSE:
101 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZENWSE);
102 break;
103 case wxCURSOR_SIZENESW:
104 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZENESW);
105 break;
106 case wxCURSOR_SIZEWE:
107 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZEWE);
108 break;
109 case wxCURSOR_SIZENS:
110 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZENS);
111 break;
112 case wxCURSOR_CHAR:
113 {
114 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW);
115 break;
116 }
117 case wxCURSOR_HAND:
118 {
119 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_HAND");
120 break;
121 }
122 case wxCURSOR_BULLSEYE:
123 {
124 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_BULLSEYE");
125 break;
126 }
127 case wxCURSOR_PENCIL:
128 {
129 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PENCIL");
130 break;
131 }
132 case wxCURSOR_MAGNIFIER:
133 {
134 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_MAGNIFIER");
135 break;
136 }
137 case wxCURSOR_NO_ENTRY:
138 {
139 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_NO_ENTRY");
140 break;
141 }
142 case wxCURSOR_LEFT_BUTTON:
143 {
144 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW);
145 break;
146 }
147 case wxCURSOR_RIGHT_BUTTON:
148 {
149 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW);
150 break;
151 }
152 case wxCURSOR_MIDDLE_BUTTON:
153 {
154 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW);
155 break;
156 }
157 case wxCURSOR_SIZING:
158 {
159 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_SIZING");
160 break;
161 }
162 case wxCURSOR_WATCH:
163 {
164 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_WATCH");
165 break;
166 }
167 case wxCURSOR_SPRAYCAN:
168 {
169 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_ROLLER");
170 break;
171 }
172 case wxCURSOR_PAINT_BRUSH:
173 {
174 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PBRUSH");
175 break;
176 }
177 case wxCURSOR_POINT_LEFT:
178 {
179 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PLEFT");
180 break;
181 }
182 case wxCURSOR_POINT_RIGHT:
183 {
184 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PRIGHT");
185 break;
186 }
187 case wxCURSOR_QUESTION_ARROW:
188 {
189 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_QARROW");
190 break;
191 }
192 case wxCURSOR_BLANK:
193 {
194 M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_BLANK");
195 break;
196 }
197 */
198 default:
199 break;
200 }
201
202 }
203
204 wxCursor::~wxCursor()
205 {
206 }
207
208 // Global cursor setting
209 void wxSetCursor(const wxCursor& cursor)
210 {
211 if (cursor.GetNSCursor())
212 [cursor.GetNSCursor() push];
213 }
214
215 static int wxBusyCursorCount = 0;
216
217 // Set the cursor to the busy cursor for all windows
218 void wxBeginBusyCursor(wxCursor *cursor)
219 {
220 wxBusyCursorCount ++;
221 if (wxBusyCursorCount == 1)
222 {
223 // TODO
224 }
225 else
226 {
227 // TODO
228 }
229 }
230
231 // Restore cursor to normal
232 void wxEndBusyCursor()
233 {
234 if (wxBusyCursorCount == 0)
235 return;
236
237 wxBusyCursorCount --;
238 if (wxBusyCursorCount == 0)
239 {
240 // TODO
241 }
242 }
243
244 // TRUE if we're between the above two calls
245 bool wxIsBusy()
246 {
247 return (wxBusyCursorCount > 0);
248 }
249