]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/cursor.cpp
improved memory liberation (explicitly set to NULL after delete)
[wxWidgets.git] / src / mac / cursor.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: cursor.cpp
3// Purpose: wxCursor class
4// Author: AUTHOR
5// Modified by:
6// Created: ??/??/98
7// RCS-ID: $Id$
8// Copyright: (c) AUTHOR
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "cursor.h"
14#endif
15
16#include "wx/defs.h"
17
18#include "wx/app.h"
19#include "wx/cursor.h"
20#include "wx/icon.h"
21#include "wx/mac/private.h"
22
23#if !USE_SHARED_LIBRARIES
24IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxBitmap)
25#endif
26
27const short kwxCursorHandId = 9 ;
28const short kwxCursorSizeWEId = 10 ;
29const short kwxCursorSizeNSId = 11 ;
30#if !TARGET_CARBON
31Cursor* MacArrowCursorPtr = &qd.arrow ;
32CursHandle MacArrowCursor = &MacArrowCursorPtr ;
33#else
34bool MacArrowInstalled = false ;
35Cursor MacArrow ;
36Cursor* MacArrowCursorPtr = &MacArrow ;
37CursHandle MacArrowCursor = &MacArrowCursorPtr ;
38#endif
39CursHandle gMacCurrentCursor = NULL ;
40
41wxCursorRefData::wxCursorRefData()
42{
43#if TARGET_CARBON
44 if ( !MacArrowInstalled )
45 {
46 MacArrowCursorPtr = GetQDGlobalsArrow( &MacArrow ) ;
47 MacArrowInstalled = true ;
48 }
49#endif
50 m_width = 32;
51 m_height = 32;
52 m_hCursor = NULL ;
53}
54
55wxCursorRefData::~wxCursorRefData()
56{
57// if ( m_hCursor && ( m_hCursor != MacArrowCursor ) )
58// ::ReleaseResource( (Handle) m_hCursor ) ;
59}
60
61// Cursors
62wxCursor::wxCursor()
63{
64}
65
66wxCursor::wxCursor(const char WXUNUSED(bits)[], int WXUNUSED(width), int WXUNUSED(height),
67 int WXUNUSED(hotSpotX), int WXUNUSED(hotSpotY), const char WXUNUSED(maskBits)[])
68{
69}
70
71wxCursor::wxCursor(const wxString& cursor_file, long flags, int hotSpotX, int hotSpotY)
72{
73 m_refData = new wxCursorRefData;
74
75 // TODO: create cursor from a file
76}
77
78// Cursors by stock number
79wxCursor::wxCursor(int cursor_type)
80{
81 m_refData = new wxCursorRefData;
82
83
84 switch (cursor_type)
85 {
86 case wxCURSOR_WAIT:
87 M_CURSORDATA->m_hCursor = ::GetCursor(watchCursor);
88 break;
89 case wxCURSOR_IBEAM:
90 M_CURSORDATA->m_hCursor = ::GetCursor(iBeamCursor);
91 break;
92 case wxCURSOR_CROSS:
93 M_CURSORDATA->m_hCursor = ::GetCursor(crossCursor);
94 break;
95 case wxCURSOR_SIZENWSE:
96 {
97 wxStAppResource resload ;
98 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeWEId);
99 }
100 break;
101 case wxCURSOR_SIZENESW:
102 {
103 wxStAppResource resload ;
104 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeWEId);
105 }
106 break;
107 case wxCURSOR_SIZEWE:
108 {
109 wxStAppResource resload ;
110 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeWEId);
111 }
112 break;
113 case wxCURSOR_SIZENS:
114 {
115 wxStAppResource resload ;
116 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeNSId);
117 }
118 break;
119 case wxCURSOR_CHAR:
120 {
121 M_CURSORDATA->m_hCursor = MacArrowCursor;
122 break;
123 }
124 case wxCURSOR_HAND:
125 {
126 wxStAppResource resload ;
127 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId);
128 }
129 break;
130 case wxCURSOR_BULLSEYE:
131 {
132 wxStAppResource resload ;
133 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId);
134 }
135 break;
136 case wxCURSOR_PENCIL:
137 {
138 wxStAppResource resload ;
139 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId);
140 }
141 break;
142 case wxCURSOR_MAGNIFIER:
143 {
144 wxStAppResource resload ;
145 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId);
146 }
147 break;
148 case wxCURSOR_NO_ENTRY:
149 {
150 wxStAppResource resload ;
151 M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId);
152 }
153 break;
154 case wxCURSOR_LEFT_BUTTON:
155 {
156 M_CURSORDATA->m_hCursor = MacArrowCursor;
157 break;
158 }
159 case wxCURSOR_RIGHT_BUTTON:
160 {
161 M_CURSORDATA->m_hCursor = MacArrowCursor;
162 break;
163 }
164 case wxCURSOR_MIDDLE_BUTTON:
165 {
166 M_CURSORDATA->m_hCursor = MacArrowCursor;
167 break;
168 }
169 case wxCURSOR_SIZING:
170 {
171 M_CURSORDATA->m_hCursor = MacArrowCursor;
172 break;
173 }
174 case wxCURSOR_WATCH:
175 {
176 M_CURSORDATA->m_hCursor = ::GetCursor(watchCursor);
177 break;
178 }
179 case wxCURSOR_SPRAYCAN:
180 {
181 M_CURSORDATA->m_hCursor = MacArrowCursor;
182 break;
183 }
184 case wxCURSOR_PAINT_BRUSH:
185 {
186 M_CURSORDATA->m_hCursor = MacArrowCursor;
187 break;
188 }
189 case wxCURSOR_POINT_LEFT:
190 {
191 M_CURSORDATA->m_hCursor = MacArrowCursor;
192 break;
193 }
194 case wxCURSOR_POINT_RIGHT:
195 {
196 M_CURSORDATA->m_hCursor = MacArrowCursor;
197 break;
198 }
199 case wxCURSOR_QUESTION_ARROW:
200 {
201 M_CURSORDATA->m_hCursor = MacArrowCursor;
202 break;
203 }
204 case wxCURSOR_BLANK:
205 {
206 M_CURSORDATA->m_hCursor = MacArrowCursor;
207 break;
208 }
209 default:
210 case wxCURSOR_ARROW:
211 M_CURSORDATA->m_hCursor = MacArrowCursor;
212 break;
213 }
214}
215
216void wxCursor::MacInstall() const
217{
218 if ( m_refData && M_CURSORDATA->m_hCursor )
219 {
220 ::SetCursor( *((CursHandle)M_CURSORDATA->m_hCursor) ) ;
221 gMacCurrentCursor = (CursHandle)M_CURSORDATA->m_hCursor ;
222 }
223 else
224 {
225 ::SetCursor( *MacArrowCursor ) ;
226 gMacCurrentCursor = NULL ;
227 }
228}
229
230wxCursor::~wxCursor()
231{
232}
233
234// Global cursor setting
235void wxSetCursor(const wxCursor& cursor)
236{
237 cursor.MacInstall() ;
238}
239
240