Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
298 lines (272 loc) · 10.7 KB

SDL_QuartzVideo.h

File metadata and controls

298 lines (272 loc) · 10.7 KB
 
1
2
/*
SDL - Simple DirectMedia Layer
Jan 4, 2004
Jan 4, 2004
3
Copyright (C) 1997-2003 Sam Lantinga
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
Dec 14, 2001
Dec 14, 2001
20
slouken@libsdl.org
Feb 21, 2006
Feb 21, 2006
22
#include "SDL_config.h"
Jun 1, 2002
Jun 1, 2002
24
/*
25
@file SDL_QuartzVideo.h
Oct 5, 2002
Oct 5, 2002
26
@author Darrell Walisser, Max Horn, et al.
Oct 5, 2002
Oct 5, 2002
28
@abstract SDL video driver for Mac OS X.
29
30
31
32
33
34
35
36
@discussion
TODO
- Hardware Cursor support with NSCursor instead of Carbon
- Keyboard repeat/mouse speed adjust (if needed)
- Multiple monitor support (currently only main display)
- Accelerated blitting support
Oct 5, 2002
Oct 5, 2002
37
38
- Fix white OpenGL window on minimize (fixed) (update: broken again on 10.2)
- Find out what events should be sent/ignored if window is minimized
Jun 1, 2002
Jun 1, 2002
39
- Find a way to deal with external resolution/depth switch while app is running
Jan 22, 2002
Jan 22, 2002
40
- Check accuracy of QZ_SetGamma()
41
42
43
Problems:
- OGL not working in full screen with software renderer
- SetColors sets palette correctly but clears framebuffer
Jun 1, 2002
Jun 1, 2002
44
- Crash in CG after several mode switches (I think this has been fixed)
Jan 22, 2002
Jan 22, 2002
45
- Retained windows don't draw their title bar quite right (OS Bug) (not using retained windows)
Oct 5, 2002
Oct 5, 2002
46
- Cursor in 8 bit modes is screwy (might just be Radeon PCI bug) (update: not just Radeon)
Jan 22, 2002
Jan 22, 2002
47
48
- Warping cursor delays mouse events for a fraction of a second,
there is a hack around this that helps a bit
Mar 8, 2006
Mar 8, 2006
51
52
53
/* Needs to be first, so QuickTime.h doesn't include glext.h (10.4) */
#include "SDL_opengl.h"
54
55
#include <Cocoa/Cocoa.h>
#include <Carbon/Carbon.h>
Jun 1, 2002
Jun 1, 2002
56
#include <QuickTime/QuickTime.h>
May 28, 2006
May 28, 2006
57
58
#include <OpenGL/CGLTypes.h> /* For CGLContextObj */
#include <IOKit/IOKitLib.h> /* For powersave handling */
Feb 1, 2003
Feb 1, 2003
59
#include <pthread.h>
Feb 1, 2003
Feb 1, 2003
61
#include "SDL_thread.h"
62
63
#include "SDL_video.h"
#include "SDL_error.h"
Jan 22, 2002
Jan 22, 2002
64
#include "SDL_timer.h"
Nov 23, 2005
Nov 23, 2005
65
#include "SDL_loadso.h"
Feb 16, 2006
Feb 16, 2006
66
67
68
69
#include "SDL_syswm.h"
#include "../SDL_sysvideo.h"
#include "../SDL_pixels_c.h"
#include "../../events/SDL_events_c.h"
Jan 4, 2004
Jan 4, 2004
71
72
73
74
/*
This is a workaround to directly access NSOpenGLContext's CGL context
We need this to check for errors NSOpenGLContext doesn't support
*/
May 28, 2006
May 28, 2006
75
@ interface NSOpenGLContext (CGLContextAccess) - (CGLContextObj) cglContext;
Jan 4, 2004
Jan 4, 2004
76
@end
May 28, 2006
May 28, 2006
77
78
79
/* Main driver structure to store required state information */
typedef struct SDL_PrivateVideoData
{
Jan 4, 2004
Jan 4, 2004
80
May 28, 2006
May 28, 2006
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
CGDirectDisplayID
display; /* 0 == main display (only support single display) */
CFDictionaryRef
mode; /* current mode of the display */
CFDictionaryRef
save_mode; /* original mode of the display */
CFArrayRef
mode_list; /* list of available fullscreen modes */
CGDirectPaletteRef
palette; /* palette of an 8-bit display */
NSOpenGLContext *
gl_context; /* OpenGL rendering context */
Uint32
width,
height,
bpp; /* frequently used data about the display */
Uint32
flags; /* flags for current mode, for teardown purposes */
Uint32
video_set; /* boolean; indicates if video was set correctly */
Uint32
warp_flag; /* boolean; notify to event loop that a warp just occured */
Uint32
warp_ticks; /* timestamp when the warp occured */
NSWindow *
window; /* Cocoa window to implement the SDL window */
NSQuickDrawView *
view; /* the window's view; draw 2D and OpenGL into this view */
SDL_Surface *
resize_icon; /* icon for the resize badge, we have to draw it by hand */
SDL_GrabMode
current_grab_mode; /* default value is SDL_GRAB_OFF */
SDL_Rect **
client_mode_list; /* resolution list to pass back to client */
SDLKey
keymap[256]; /* Mac OS X to SDL key mapping */
Uint32
current_mods; /* current keyboard modifiers, to track modifier state */
Uint32
last_virtual_button; /* last virtual mouse button pressed */
io_connect_t
power_connection; /* used with IOKit to detect wake from sleep */
Uint8
expect_mouse_up; /* used to determine when to send mouse up events */
Uint8
grab_state; /* used to manage grab behavior */
NSPoint
cursor_loc; /* saved cursor coords, for activate/deactivate when grabbed */
BOOL
cursor_should_be_visible; /* tells if cursor is supposed to be visible (SDL_ShowCursor) */
BOOL
cursor_visible; /* tells if cursor is *actually* visible or not */
Uint8 *
sw_buffers[2]; /* pointers to the two software buffers for double-buffer emulation */
SDL_Thread *
thread; /* thread for async updates to the screen */
SDL_sem *
sem1, *
sem2; /* synchronization for async screen updates */
Uint8 *
current_buffer; /* the buffer being copied to the screen */
BOOL
quit_thread; /* used to quit the async blitting thread */
SInt32
system_version; /* used to dis-/enable workarounds depending on the system version */
Jan 4, 2004
Jan 4, 2004
146
May 28, 2006
May 28, 2006
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
ImageDescriptionHandle
yuv_idh;
MatrixRecordPtr
yuv_matrix;
DecompressorComponent
yuv_codec;
ImageSequence
yuv_seq;
PlanarPixmapInfoYUV420 *
yuv_pixmap;
Sint16
yuv_width,
yuv_height;
CGrafPtr
yuv_port;
Jun 1, 2002
Jun 1, 2002
162
May 28, 2006
May 28, 2006
163
164
165
void *
opengl_library; /* dynamically loaded OpenGL library. */
} SDL_PrivateVideoData;
Jun 1, 2002
Jun 1, 2002
167
#define _THIS SDL_VideoDevice *this
168
169
170
171
172
173
174
175
176
177
#define display_id (this->hidden->display)
#define mode (this->hidden->mode)
#define save_mode (this->hidden->save_mode)
#define mode_list (this->hidden->mode_list)
#define palette (this->hidden->palette)
#define gl_context (this->hidden->gl_context)
#define device_width (this->hidden->width)
#define device_height (this->hidden->height)
#define device_bpp (this->hidden->bpp)
#define mode_flags (this->hidden->flags)
Aug 21, 2001
Aug 21, 2001
178
#define qz_window (this->hidden->window)
Jan 22, 2002
Jan 22, 2002
179
180
181
182
#define window_view (this->hidden->view)
#define video_set (this->hidden->video_set)
#define warp_ticks (this->hidden->warp_ticks)
#define warp_flag (this->hidden->warp_flag)
Oct 5, 2002
Oct 5, 2002
183
184
185
186
187
188
#define resize_icon (this->hidden->resize_icon)
#define current_grab_mode (this->hidden->current_grab_mode)
#define client_mode_list (this->hidden->client_mode_list)
#define keymap (this->hidden->keymap)
#define current_mods (this->hidden->current_mods)
#define last_virtual_button (this->hidden->last_virtual_button)
Dec 27, 2002
Dec 27, 2002
189
190
191
192
#define power_connection (this->hidden->power_connection)
#define expect_mouse_up (this->hidden->expect_mouse_up)
#define grab_state (this->hidden->grab_state)
#define cursor_loc (this->hidden->cursor_loc)
Jan 4, 2004
Jan 4, 2004
193
#define cursor_should_be_visible (this->hidden->cursor_should_be_visible)
Dec 27, 2002
Dec 27, 2002
194
#define cursor_visible (this->hidden->cursor_visible)
Feb 1, 2003
Feb 1, 2003
195
196
197
198
199
200
#define sw_buffers (this->hidden->sw_buffers)
#define thread (this->hidden->thread)
#define sem1 (this->hidden->sem1)
#define sem2 (this->hidden->sem2)
#define current_buffer (this->hidden->current_buffer)
#define quit_thread (this->hidden->quit_thread)
Mar 22, 2004
Mar 22, 2004
201
#define system_version (this->hidden->system_version)
Nov 23, 2005
Nov 23, 2005
202
#define opengl_library (this->hidden->opengl_library)
Oct 5, 2002
Oct 5, 2002
203
Dec 27, 2002
Dec 27, 2002
204
/* grab states - the input is in one of these states */
May 28, 2006
May 28, 2006
205
206
207
208
209
210
enum
{
QZ_UNGRABBED = 0,
QZ_VISIBLE_GRAB,
QZ_INVISIBLE_GRAB
};
Dec 27, 2002
Dec 27, 2002
211
212
/* grab actions - these can change the grabbed state */
May 28, 2006
May 28, 2006
213
214
215
216
217
218
219
enum
{
QZ_ENABLE_GRAB = 0,
QZ_DISABLE_GRAB,
QZ_HIDECURSOR,
QZ_SHOWCURSOR
};
Dec 27, 2002
Dec 27, 2002
220
221
/* Gamma Functions */
May 28, 2006
May 28, 2006
222
223
224
225
226
227
228
229
int
QZ_SetGamma (_THIS, float red, float green, float blue);
int
QZ_GetGamma (_THIS, float *red, float *green, float *blue);
int
QZ_SetGammaRamp (_THIS, Uint16 * ramp);
int
QZ_GetGammaRamp (_THIS, Uint16 * ramp);
230
231
/* OpenGL functions */
May 28, 2006
May 28, 2006
232
233
234
235
236
237
238
239
240
241
242
243
244
245
int
QZ_SetupOpenGL (_THIS, int bpp, Uint32 flags);
void
QZ_TearDownOpenGL (_THIS);
void *
QZ_GL_GetProcAddress (_THIS, const char *proc);
int
QZ_GL_GetAttribute (_THIS, SDL_GLattr attrib, int *value);
int
QZ_GL_MakeCurrent (_THIS);
void
QZ_GL_SwapBuffers (_THIS);
int
QZ_GL_LoadLibrary (_THIS, const char *location);
246
247
/* Cursor and Mouse functions */
May 28, 2006
May 28, 2006
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
void
QZ_FreeWMCursor (_THIS, WMcursor * cursor);
WMcursor *
QZ_CreateWMCursor (_THIS, Uint8 * data, Uint8 * mask,
int w, int h, int hot_x, int hot_y);
int
QZ_ShowWMCursor (_THIS, WMcursor * cursor);
void
QZ_WarpWMCursor (_THIS, Uint16 x, Uint16 y);
void
QZ_MoveWMCursor (_THIS, int x, int y);
void
QZ_CheckMouseMode (_THIS);
void
QZ_UpdateMouse (_THIS);
263
264
/* Event functions */
May 28, 2006
May 28, 2006
265
266
267
268
void
QZ_InitOSKeymap (_THIS);
void
QZ_PumpEvents (_THIS);
269
270
/* Window Manager functions */
May 28, 2006
May 28, 2006
271
272
273
274
275
276
277
278
void
QZ_SetCaption (_THIS, const char *title, const char *icon);
void
QZ_SetIcon (_THIS, SDL_Surface * icon, Uint8 * mask);
int
QZ_IconifyWindow (_THIS);
SDL_GrabMode
QZ_GrabInput (_THIS, SDL_GrabMode grab_mode);
Jan 4, 2004
Jan 4, 2004
279
/*int QZ_GetWMInfo (_THIS, SDL_SysWMinfo *info);*/
Jan 22, 2002
Jan 22, 2002
280
Jun 1, 2002
Jun 1, 2002
281
/* YUV functions */
May 28, 2006
May 28, 2006
282
283
SDL_Overlay *QZ_CreateYUVOverlay (_THIS, int width, int height,
Uint32 format, SDL_Surface * display);
Jan 4, 2004
Jan 4, 2004
284
285
286
/* Private functions (used internally) */
May 28, 2006
May 28, 2006
287
288
289
290
291
292
293
294
295
296
297
298
void QZ_PrivateWarpCursor (_THIS, int x, int y);
void QZ_ChangeGrabState (_THIS, int action);
void QZ_RegisterForSleepNotifications (_THIS);
void QZ_ShowMouse (_THIS);
void QZ_HideMouse (_THIS);
void QZ_PrivateGlobalToLocal (_THIS, NSPoint * p);
void QZ_PrivateCocoaToSDL (_THIS, NSPoint * p);
BOOL
QZ_IsMouseInWindow (_THIS);
void QZ_DoActivate (_THIS);
void QZ_DoDeactivate (_THIS);
/* vi: set ts=4 sw=4 expandtab: */