"wxGDIObject * => &" related changes (see mail to the list)
[wxWidgets.git] / src / gtk1 / cursor.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: cursor.cpp
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10
11 #ifdef __GNUG__
12 #pragma implementation "cursor.h"
13 #endif
14
15 #include "wx/cursor.h"
16
17 //-----------------------------------------------------------------------------
18 // wxCursor
19 //-----------------------------------------------------------------------------
20
21 class wxCursorRefData: public wxObjectRefData
22 {
23 public:
24
25 wxCursorRefData();
26 ~wxCursorRefData();
27
28 GdkCursor *m_cursor;
29 };
30
31 wxCursorRefData::wxCursorRefData()
32 {
33 m_cursor = (GdkCursor *) NULL;
34 }
35
36 wxCursorRefData::~wxCursorRefData()
37 {
38 if (m_cursor) gdk_cursor_destroy( m_cursor );
39 }
40
41 //-----------------------------------------------------------------------------
42
43 #define M_CURSORDATA ((wxCursorRefData *)m_refData)
44
45 IMPLEMENT_DYNAMIC_CLASS(wxCursor,wxObject)
46
47 wxCursor::wxCursor()
48 {
49 }
50
51 wxCursor::wxCursor( int cursorId )
52 {
53 m_refData = new wxCursorRefData();
54
55 GdkCursorType gdk_cur = GDK_LEFT_PTR;
56 switch (cursorId)
57 {
58 case wxCURSOR_HAND: gdk_cur = GDK_HAND1; break;
59 case wxCURSOR_CROSS: gdk_cur = GDK_CROSSHAIR; break;
60 case wxCURSOR_SIZEWE: gdk_cur = GDK_SB_H_DOUBLE_ARROW; break;
61 case wxCURSOR_SIZENS: gdk_cur = GDK_SB_V_DOUBLE_ARROW; break;
62 case wxCURSOR_WAIT: gdk_cur = GDK_WATCH; break;
63 case wxCURSOR_WATCH: gdk_cur = GDK_WATCH; break;
64 case wxCURSOR_SIZING: gdk_cur = GDK_SIZING; break;
65 case wxCURSOR_SPRAYCAN: gdk_cur = GDK_SPRAYCAN; break;
66 case wxCURSOR_IBEAM: gdk_cur = GDK_XTERM; break;
67 case wxCURSOR_PENCIL: gdk_cur = GDK_PENCIL; break;
68 case wxCURSOR_NO_ENTRY: gdk_cur = GDK_PIRATE; break;
69 }
70
71 M_CURSORDATA->m_cursor = gdk_cursor_new( gdk_cur );
72
73 /*
74 do that yourself
75
76 wxCURSOR_BULLSEYE,
77 wxCURSOR_CHAR,
78 wxCURSOR_LEFT_BUTTON,
79 wxCURSOR_MAGNIFIER,
80 wxCURSOR_MIDDLE_BUTTON,
81 wxCURSOR_NO_ENTRY,
82 wxCURSOR_PAINT_BRUSH,
83 wxCURSOR_POINT_LEFT,
84 wxCURSOR_POINT_RIGHT,
85 wxCURSOR_QUESTION_ARROW,
86 wxCURSOR_RIGHT_BUTTON,
87 wxCURSOR_SIZENESW,
88 wxCURSOR_SIZENS,
89 wxCURSOR_SIZENWSE,
90 wxCURSOR_SIZEWE,
91 wxCURSOR_BLANK
92 ,
93 wxCURSOR_CROSS_REVERSE,
94 wxCURSOR_DOUBLE_ARROW,
95 wxCURSOR_BASED_ARROW_UP,
96 wxCURSOR_BASED_ARROW_DOWN
97 */
98
99 }
100
101 wxCursor::wxCursor( const wxCursor &cursor )
102 {
103 Ref( cursor );
104 }
105
106 wxCursor::~wxCursor()
107 {
108 }
109
110 wxCursor& wxCursor::operator = ( const wxCursor& cursor )
111 {
112 if (*this == cursor) return (*this);
113 Ref( cursor );
114 return *this;
115 }
116
117 bool wxCursor::operator == ( const wxCursor& cursor ) const
118 {
119 return m_refData == cursor.m_refData;
120 }
121
122 bool wxCursor::operator != ( const wxCursor& cursor ) const
123 {
124 return m_refData != cursor.m_refData;
125 }
126
127 bool wxCursor::Ok() const
128 {
129 return (m_refData != NULL);
130 }
131
132 GdkCursor *wxCursor::GetCursor() const
133 {
134 return M_CURSORDATA->m_cursor;
135 }
136
137 //-----------------------------------------------------------------------------
138 // busy cursor routines
139 //-----------------------------------------------------------------------------
140
141 bool g_isBusy = FALSE;
142
143 void wxEndBusyCursor()
144 {
145 g_isBusy = FALSE;
146 }
147
148 void wxBeginBusyCursor( wxCursor *WXUNUSED(cursor) )
149 {
150 g_isBusy = TRUE;
151 }
152
153 bool wxIsBusy()
154 {
155 return g_isBusy;
156 }
157
158 void wxSetCursor( const wxCursor& cursor )
159 {
160 extern wxCursor *g_globalCursor;
161 if (g_globalCursor) (*g_globalCursor) = cursor;
162
163 if (cursor.Ok()) {}
164 }
165
166