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