Mercurial > sdl-ios-xcode
annotate src/events/SDL_mouse.c @ 1722:5daa04d862f1 SDL-1.3
Added a userdata parameter for event filters.
Added a function to filter the existing queued events.
Added explicit support for relative mouse mode to the API.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 30 Jun 2006 08:18:44 +0000 |
parents | a1ebb17f9c52 |
children | 6c63fc2bd986 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1283
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 /* General mouse handling code for SDL */ | |
25 | |
26 #include "SDL_events.h" | |
27 #include "SDL_events_c.h" | |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
28 #include "default_cursor.h" |
0 | 29 |
30 | |
1670 | 31 static int SDL_num_mice; |
32 static int SDL_current_mouse; | |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
33 static SDL_Mouse **SDL_mice; |
0 | 34 |
35 | |
36 /* Public functions */ | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
37 int |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
38 SDL_MouseInit(void) |
0 | 39 { |
1670 | 40 return (0); |
41 } | |
42 | |
43 SDL_Mouse * | |
44 SDL_GetMouse(int index) | |
45 { | |
46 if (index < 0 || index >= SDL_num_mice) { | |
47 return NULL; | |
48 } | |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
49 return SDL_mice[index]; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
50 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
51 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
52 int |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
53 SDL_AddMouse(const SDL_Mouse * mouse, int index) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
54 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
55 SDL_Mouse **mice; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
56 int selected_mouse; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
57 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
58 /* Add the mouse to the list of mice */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
59 if (index < 0 || index >= SDL_num_mice || SDL_mice[index]) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
60 mice = |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
61 (SDL_Mouse **) SDL_realloc(SDL_mice, |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
62 (SDL_num_mice + 1) * sizeof(*mice)); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
63 if (!mice) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
64 SDL_OutOfMemory(); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
65 return -1; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
66 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
67 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
68 SDL_mice = mice; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
69 index = SDL_num_mice++; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
70 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
71 SDL_mice[index] = (SDL_Mouse *) SDL_malloc(sizeof(*SDL_mice[index])); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
72 if (!SDL_mice[index]) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
73 SDL_OutOfMemory(); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
74 return -1; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
75 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
76 *SDL_mice[index] = *mouse; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
77 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
78 /* Create the default cursor for the mouse */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
79 SDL_mice[index]->cursor_shown = SDL_TRUE; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
80 selected_mouse = SDL_SelectMouse(index); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
81 SDL_mice[index]->cur_cursor = NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
82 SDL_mice[index]->def_cursor = |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
83 SDL_CreateCursor(default_cdata, default_cmask, DEFAULT_CWIDTH, |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
84 DEFAULT_CHEIGHT, DEFAULT_CHOTX, DEFAULT_CHOTY); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
85 SDL_SetCursor(SDL_mice[index]->def_cursor); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
86 SDL_SelectMouse(selected_mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
87 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
88 return index; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
89 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
90 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
91 void |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
92 SDL_DelMouse(int index) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
93 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
94 SDL_Mouse *mouse = SDL_GetMouse(index); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
95 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
96 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
97 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
98 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
99 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
100 mouse->def_cursor = NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
101 while (mouse->cursors) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
102 SDL_FreeCursor(mouse->cursors); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
103 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
104 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
105 if (mouse->FreeMouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
106 mouse->FreeMouse(mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
107 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
108 SDL_free(mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
109 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
110 SDL_mice[index] = NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
111 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
112 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
113 void |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
114 SDL_ResetMouse(int index) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
115 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
116 SDL_Mouse *mouse = SDL_GetMouse(index); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
117 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
118 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
119 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
120 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
121 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
122 /* FIXME */ |
0 | 123 } |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
124 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
125 void |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
126 SDL_MouseQuit(void) |
1123
28ac87a38c17
Date: Fri, 08 Jul 2005 22:43:48 +0200 (CEST)
Sam Lantinga <slouken@libsdl.org>
parents:
943
diff
changeset
|
127 { |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
128 int i; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
129 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
130 for (i = 0; i < SDL_num_mice; ++i) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
131 SDL_DelMouse(i); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
132 } |
1670 | 133 SDL_num_mice = 0; |
134 SDL_current_mouse = 0; | |
135 | |
136 if (SDL_mice) { | |
137 SDL_free(SDL_mice); | |
138 SDL_mice = NULL; | |
139 } | |
140 } | |
141 | |
142 int | |
143 SDL_GetNumMice(void) | |
144 { | |
145 return SDL_num_mice; | |
1123
28ac87a38c17
Date: Fri, 08 Jul 2005 22:43:48 +0200 (CEST)
Sam Lantinga <slouken@libsdl.org>
parents:
943
diff
changeset
|
146 } |
0 | 147 |
1670 | 148 int |
149 SDL_SelectMouse(int index) | |
460
a888b3ae31ff
Reset mouse state when changing video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
150 { |
1670 | 151 if (index >= 0 && index < SDL_num_mice) { |
152 SDL_current_mouse = index; | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
153 } |
1670 | 154 return SDL_current_mouse; |
155 } | |
156 | |
157 SDL_WindowID | |
158 SDL_GetMouseFocusWindow() | |
159 { | |
160 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); | |
161 | |
162 if (!mouse) { | |
163 return 0; | |
164 } | |
165 return mouse->focus; | |
460
a888b3ae31ff
Reset mouse state when changing video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
166 } |
a888b3ae31ff
Reset mouse state when changing video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
167 |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
168 static int |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
169 FlushMouseMotion(void *param, SDL_Event * event) |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
170 { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
171 if (event->type == SDL_MOUSEMOTION |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
172 && event->motion.which == (Uint8) SDL_current_mouse) { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
173 return 0; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
174 } else { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
175 return 1; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
176 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
177 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
178 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
179 int |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
180 SDL_SetRelativeMouseMode(SDL_bool enabled) |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
181 { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
182 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
183 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
184 if (!mouse) { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
185 return -1; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
186 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
187 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
188 /* Flush pending mouse motion */ |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
189 mouse->flush_motion = SDL_TRUE; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
190 SDL_PumpEvents(); |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
191 mouse->flush_motion = SDL_FALSE; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
192 SDL_FilterEvents(FlushMouseMotion, mouse); |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
193 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
194 /* Set the relative mode */ |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
195 mouse->relative_mode = enabled; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
196 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
197 /* Update cursor visibility */ |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
198 SDL_SetCursor(NULL); |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
199 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
200 if (!enabled) { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
201 /* Restore the expected mouse position */ |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
202 SDL_WarpMouseInWindow(mouse->focus, mouse->x, mouse->y); |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
203 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
204 return 0; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
205 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
206 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
207 SDL_bool |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
208 SDL_GetRelativeMouseMode() |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
209 { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
210 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
211 |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
212 if (!mouse) { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
213 return SDL_FALSE; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
214 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
215 return mouse->relative_mode; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
216 } |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
217 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
218 Uint8 |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
219 SDL_GetMouseState(int *x, int *y) |
0 | 220 { |
1670 | 221 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
222 | |
223 if (!mouse) { | |
224 if (x) { | |
225 *x = 0; | |
226 } | |
227 if (y) { | |
228 *y = 0; | |
229 } | |
230 return 0; | |
231 } | |
232 | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
233 if (x) { |
1670 | 234 *x = mouse->x; |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
235 } |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
236 if (y) { |
1670 | 237 *y = mouse->y; |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
238 } |
1670 | 239 return mouse->buttonstate; |
0 | 240 } |
241 | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
242 Uint8 |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
243 SDL_GetRelativeMouseState(int *x, int *y) |
0 | 244 { |
1670 | 245 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
246 |
1670 | 247 if (!mouse) { |
248 if (x) { | |
249 *x = 0; | |
250 } | |
251 if (y) { | |
252 *y = 0; | |
253 } | |
254 return 0; | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
255 } |
0 | 256 |
1670 | 257 if (x) { |
258 *x = mouse->xdelta; | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
259 } |
1670 | 260 if (y) { |
261 *y = mouse->ydelta; | |
262 } | |
263 mouse->xdelta = 0; | |
264 mouse->ydelta = 0; | |
265 return mouse->buttonstate; | |
266 } | |
0 | 267 |
1670 | 268 int |
269 SDL_SendMouseMotion(int index, SDL_WindowID windowID, int relative, int x, | |
270 int y) | |
271 { | |
272 SDL_Mouse *mouse = SDL_GetMouse(index); | |
273 int posted; | |
274 int xrel; | |
275 int yrel; | |
276 | |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
277 if (!mouse || mouse->flush_motion) { |
1670 | 278 return 0; |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
279 } |
0 | 280 |
1670 | 281 if (windowID) { |
282 mouse->focus = windowID; | |
283 } | |
0 | 284 |
1670 | 285 if (relative) { |
286 /* Push the cursor around */ | |
287 xrel = x; | |
288 yrel = y; | |
289 x = (mouse->x + xrel); | |
290 y = (mouse->y + yrel); | |
291 } else { | |
292 xrel = x - mouse->x; | |
293 yrel = y - mouse->y; | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
294 } |
0 | 295 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
296 /* Drop events that don't change state */ |
1670 | 297 if (!xrel && !yrel) { |
1283
f214b6fae45a
Date: Fri, 14 Jan 2005 21:52:46 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1123
diff
changeset
|
298 #if 0 |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
299 printf("Mouse event didn't change state - dropped!\n"); |
1283
f214b6fae45a
Date: Fri, 14 Jan 2005 21:52:46 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1123
diff
changeset
|
300 #endif |
1670 | 301 return 0; |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
302 } |
1283
f214b6fae45a
Date: Fri, 14 Jan 2005 21:52:46 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1123
diff
changeset
|
303 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
304 /* Update internal mouse state */ |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
305 if (!mouse->relative_mode) { |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
306 mouse->x = x; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
307 mouse->y = y; |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
308 } |
1670 | 309 mouse->xdelta += xrel; |
310 mouse->ydelta += yrel; | |
0 | 311 |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
312 /* Move the mouse cursor, if needed */ |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
313 if (mouse->cursor_shown && !mouse->relative_mode && |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
314 mouse->MoveCursor && mouse->cur_cursor) { |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
315 mouse->MoveCursor(mouse->cur_cursor); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
316 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
317 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
318 /* Post the event, if desired */ |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
319 posted = 0; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
320 if (SDL_ProcessEvents[SDL_MOUSEMOTION] == SDL_ENABLE) { |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
321 SDL_Event event; |
1670 | 322 event.motion.type = SDL_MOUSEMOTION; |
323 event.motion.which = (Uint8) index; | |
324 event.motion.state = mouse->buttonstate; | |
325 event.motion.x = mouse->x; | |
326 event.motion.y = mouse->y; | |
327 event.motion.xrel = xrel; | |
328 event.motion.yrel = yrel; | |
329 event.motion.windowID = mouse->focus; | |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
330 if ((SDL_EventOK == NULL) |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
331 || (*SDL_EventOK) (SDL_EventOKParam, &event)) { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
332 posted = 1; |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
333 SDL_PushEvent(&event); |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
334 } |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
335 } |
1670 | 336 return posted; |
0 | 337 } |
338 | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
339 int |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
340 SDL_SendMouseButton(int index, SDL_WindowID windowID, Uint8 state, |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
341 Uint8 button) |
0 | 342 { |
1670 | 343 SDL_Mouse *mouse = SDL_GetMouse(index); |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
344 int posted; |
1670 | 345 Uint8 type; |
0 | 346 |
1670 | 347 if (!mouse) { |
348 return 0; | |
349 } | |
0 | 350 |
1670 | 351 if (windowID) { |
352 mouse->focus = windowID; | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
353 } |
0 | 354 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
355 /* Figure out which event to perform */ |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
356 switch (state) { |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
357 case SDL_PRESSED: |
1670 | 358 if (mouse->buttonstate & SDL_BUTTON(button)) { |
359 /* Ignore this event, no state change */ | |
360 return 0; | |
361 } | |
362 type = SDL_MOUSEBUTTONDOWN; | |
363 mouse->buttonstate |= SDL_BUTTON(button); | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
364 break; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
365 case SDL_RELEASED: |
1670 | 366 if (!(mouse->buttonstate & SDL_BUTTON(button))) { |
367 /* Ignore this event, no state change */ | |
368 return 0; | |
369 } | |
370 type = SDL_MOUSEBUTTONUP; | |
371 mouse->buttonstate &= ~SDL_BUTTON(button); | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
372 break; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
373 default: |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
374 /* Invalid state -- bail */ |
1670 | 375 return 0; |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
376 } |
0 | 377 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
378 /* Post the event, if desired */ |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
379 posted = 0; |
1670 | 380 if (SDL_ProcessEvents[type] == SDL_ENABLE) { |
381 SDL_Event event; | |
382 event.type = type; | |
383 event.button.which = (Uint8) index; | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
384 event.button.state = state; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
385 event.button.button = button; |
1670 | 386 event.button.x = mouse->x; |
387 event.button.y = mouse->y; | |
1674
7688a73b25b1
Finishing up keyboard code revamp, at least for now...
Sam Lantinga <slouken@libsdl.org>
parents:
1671
diff
changeset
|
388 event.button.windowID = mouse->focus; |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
389 if ((SDL_EventOK == NULL) |
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
390 || (*SDL_EventOK) (SDL_EventOKParam, &event)) { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
391 posted = 1; |
1668
4da1ee79c9af
more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents:
1662
diff
changeset
|
392 SDL_PushEvent(&event); |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
393 } |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
394 } |
1670 | 395 return posted; |
0 | 396 } |
397 | |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
398 void |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
399 SDL_WarpMouseInWindow(SDL_WindowID windowID, int x, int y) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
400 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
401 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
402 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
403 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
404 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
405 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
406 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
407 if (mouse->WarpMouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
408 mouse->WarpMouse(mouse, windowID, x, y); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
409 } else { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
410 SDL_SendMouseMotion(SDL_current_mouse, windowID, 0, x, y); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
411 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
412 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
413 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
414 SDL_Cursor * |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
415 SDL_CreateCursor(const Uint8 * data, const Uint8 * mask, |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
416 int w, int h, int hot_x, int hot_y) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
417 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
418 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
419 SDL_Surface *surface; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
420 SDL_Cursor *cursor; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
421 int x, y; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
422 Uint32 *pixel; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
423 Uint8 datab, maskb; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
424 const Uint32 black = 0xFF000000; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
425 const Uint32 white = 0xFFFFFFFF; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
426 const Uint32 transparent = 0x00000000; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
427 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
428 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
429 SDL_SetError("No mice are initialized"); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
430 return NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
431 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
432 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
433 if (!mouse->CreateCursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
434 SDL_SetError("Current mouse doesn't have cursor support"); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
435 return NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
436 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
437 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
438 /* Sanity check the hot spot */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
439 if ((hot_x < 0) || (hot_y < 0) || (hot_x >= w) || (hot_y >= h)) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
440 SDL_SetError("Cursor hot spot doesn't lie within cursor"); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
441 return NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
442 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
443 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
444 /* Make sure the width is a multiple of 8 */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
445 w = ((w + 7) & ~7); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
446 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
447 /* Create the surface from a bitmap */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
448 surface = |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
449 SDL_CreateRGBSurface(0, w, h, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
450 0xFF000000); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
451 if (!surface) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
452 return NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
453 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
454 for (y = 0; y < h; ++y) { |
1720
a1ebb17f9c52
Cleaned up a bunch of warnings, started adding Win32 event support
Sam Lantinga <slouken@libsdl.org>
parents:
1674
diff
changeset
|
455 pixel = (Uint32 *) ((Uint8 *) surface->pixels + y * surface->pitch); |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
456 for (x = 0; x < w; ++x) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
457 if ((x % 8) == 0) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
458 datab = *data++; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
459 maskb = *mask++; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
460 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
461 if (maskb & 0x80) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
462 *pixel++ = (datab & 0x80) ? black : white; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
463 } else { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
464 *pixel++ = (datab & 0x80) ? black : transparent; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
465 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
466 datab <<= 1; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
467 maskb <<= 1; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
468 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
469 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
470 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
471 cursor = mouse->CreateCursor(surface, hot_x, hot_y); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
472 if (cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
473 cursor->mouse = mouse; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
474 cursor->next = mouse->cursors; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
475 mouse->cursors = cursor; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
476 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
477 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
478 SDL_FreeSurface(surface); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
479 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
480 return cursor; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
481 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
482 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
483 /* SDL_SetCursor(NULL) can be used to force the cursor redraw, |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
484 if this is desired for any reason. This is used when setting |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
485 the video mode and when the SDL window gains the mouse focus. |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
486 */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
487 void |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
488 SDL_SetCursor(SDL_Cursor * cursor) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
489 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
490 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
491 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
492 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
493 SDL_SetError("No mice are initialized"); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
494 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
495 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
496 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
497 /* Set the new cursor */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
498 if (cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
499 /* Make sure the cursor is still valid for this mouse */ |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
500 SDL_Cursor *found; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
501 for (found = mouse->cursors; found; found = found->next) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
502 if (found == cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
503 break; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
504 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
505 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
506 if (!found) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
507 SDL_SetError("Cursor not associated with the current mouse"); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
508 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
509 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
510 mouse->cur_cursor = cursor; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
511 } else { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
512 cursor = mouse->cur_cursor; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
513 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
514 |
1722
5daa04d862f1
Added a userdata parameter for event filters.
Sam Lantinga <slouken@libsdl.org>
parents:
1720
diff
changeset
|
515 if (cursor && mouse->cursor_shown && !mouse->relative_mode) { |
1671
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
516 if (mouse->ShowCursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
517 mouse->ShowCursor(cursor); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
518 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
519 } else { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
520 if (mouse->ShowCursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
521 mouse->ShowCursor(NULL); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
522 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
523 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
524 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
525 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
526 SDL_Cursor * |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
527 SDL_GetCursor(void) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
528 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
529 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
530 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
531 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
532 return NULL; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
533 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
534 return mouse->cur_cursor; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
535 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
536 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
537 void |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
538 SDL_FreeCursor(SDL_Cursor * cursor) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
539 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
540 SDL_Mouse *mouse; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
541 SDL_Cursor *curr, *prev; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
542 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
543 if (!cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
544 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
545 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
546 mouse = cursor->mouse; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
547 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
548 if (cursor == mouse->def_cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
549 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
550 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
551 if (cursor == mouse->cur_cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
552 SDL_SetCursor(mouse->def_cursor); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
553 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
554 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
555 for (prev = NULL, curr = mouse->cursors; curr; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
556 prev = curr, curr = curr->next) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
557 if (curr == cursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
558 if (prev) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
559 prev->next = curr->next; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
560 } else { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
561 mouse->cursors = curr->next; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
562 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
563 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
564 if (mouse->FreeCursor) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
565 mouse->FreeCursor(curr); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
566 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
567 return; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
568 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
569 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
570 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
571 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
572 int |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
573 SDL_ShowCursor(int toggle) |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
574 { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
575 SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
576 SDL_bool shown; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
577 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
578 if (!mouse) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
579 return 0; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
580 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
581 |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
582 shown = mouse->cursor_shown; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
583 if (toggle >= 0) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
584 if (toggle) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
585 mouse->cursor_shown = SDL_TRUE; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
586 } else { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
587 mouse->cursor_shown = SDL_FALSE; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
588 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
589 if (mouse->cursor_shown != shown) { |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
590 SDL_SetCursor(NULL); |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
591 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
592 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
593 return shown; |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
594 } |
89f7510fe17a
Moved the cursor handling into the mouse code.
Sam Lantinga <slouken@libsdl.org>
parents:
1670
diff
changeset
|
595 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1525
diff
changeset
|
596 /* vi: set ts=4 sw=4 expandtab: */ |