Implemented wxScreenDC the hard way
[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 //-----------------------------------------------------------------------------
18 // wxCursor
19 //-----------------------------------------------------------------------------
20
21 class wxCursorRefData: public wxObjectRefData
22 {
23 public:
24
25 wxCursorRefData(void);
26 ~wxCursorRefData(void);
27
28 GdkCursor *m_cursor;
29 };
30
31 wxCursorRefData::wxCursorRefData(void)
32 {
33 m_cursor = (GdkCursor *) NULL;
34 }
35
36 wxCursorRefData::~wxCursorRefData(void)
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(void)
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( const wxCursor *cursor )
107 {
108 UnRef();
109 if (cursor) Ref( *cursor );
110 }
111
112 wxCursor::~wxCursor(void)
113 {
114 }
115
116 wxCursor& wxCursor::operator = ( const wxCursor& cursor )
117 {
118 if (*this == cursor) return (*this);
119 Ref( cursor );
120 return *this;
121 }
122
123 bool wxCursor::operator == ( const wxCursor& cursor )
124 {
125 return m_refData == cursor.m_refData;
126 }
127
128 bool wxCursor::operator != ( const wxCursor& cursor )
129 {
130 return m_refData != cursor.m_refData;
131 }
132
133 bool wxCursor::Ok(void) const
134 {
135 return (m_refData != NULL);
136 }
137
138 GdkCursor *wxCursor::GetCursor(void) const
139 {
140 return M_CURSORDATA->m_cursor;
141 }
142
143 //-----------------------------------------------------------------------------
144 // busy cursor routines
145 //-----------------------------------------------------------------------------
146
147 bool g_isBusy = FALSE;
148
149 void wxEndBusyCursor(void)
150 {
151 g_isBusy = FALSE;
152 }
153
154 void wxBeginBusyCursor( wxCursor *WXUNUSED(cursor) )
155 {
156 g_isBusy = TRUE;
157 }
158
159 bool wxIsBusy(void)
160 {
161 return g_isBusy;
162 }
163
164 void wxSetCursor( const wxCursor& cursor )
165 {
166 extern wxCursor *g_globalCursor;
167 if (g_globalCursor) (*g_globalCursor) = cursor;
168
169 if (cursor.Ok()) {}
170 }
171
172