Mercurial > sdl-ios-xcode
annotate src/video/cocoa/SDL_cocoamodes.m @ 3485:e77a69aae239
Mason Wheeler to sdl
I updated SDL, and suddenly my SDL frames stopped working. They'd "initialize" full of gibberish, and I couldn't render anything to them. After a bit of digging, I found a problem: the renderer initialization routine in my SDL frame code wasn't getting called anymore.
procedure TSdlFrame.Paint;
begin
if SDL_SelectRenderer(FWindowID) = -1 then
CreateRenderer;
SDL_RenderPresent;
end;
function TSdlFrame.CreateRenderer: boolean;
const
pf: tagPIXELFORMATDESCRIPTOR = (nSize: sizeof(pf); nVersion: 1;
dwFlags: PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
iPixelType: PFD_TYPE_RGBA; cColorBits: 24; cAlphaBits: 8;
iLayerType: PFD_MAIN_PLANE);
RENDERERS: array[TRendererType] of AnsiString = ('software', 'gdi', 'opengl', 'd3d');
var
pFormat: integer;
begin
if (SDL_SelectRenderer(FWindowID) = 0) then
begin
result := true;
Exit;
end;
if FRendererType = rtOpenGL then
begin
pFormat := ChoosePixelFormat(canvas.Handle, @pf);
if not SetPixelFormat(canvas.Handle, pFormat, @pf) then
outputDebugString(PChar(SysErrorMessage(GetLastError)));
if wglCreateContext(canvas.Handle) = 0 then
outputDebugString(PChar(SysErrorMessage(GetLastError)));
end;
if (SDL_CreateRenderer(FWindowID, SDL_RendererIndex(RENDERERS[FRendererType]), [sdlrPresentFlip3, sdlrAccelerated]) = 0) then
begin
SDL_ShowWindow(FWindowID);
assert(SDL_SetRenderDrawColor(0, 0, 0, 255) = 0);
FFlags := SDL_GetWindowFlags(FWindowID);
if assigned(FOnAvailable) then
FOnAvailable(self);
end
else outputDebugString(pChar(format('SDL_CreateRenderer failed: %s', [sdl_GetError])));
result := SDL_SelectRenderer(FWindowID) = 0;
end;
This is a critical issue. The Paint method gets called when the control receives a WM_PAINT message from Windows. I can't create the renderer before then, or it will fail and cause trouble. And when I do create it, it needs to be created with certain parameters. So imagine my surprise when I started debugging into the DLL and found that SDL_SelectRenderer was trying to be "helpful" by creating the renderer for me if it didn't already exist! Now not only does my initialization code not get called, I end up with the wrong renderer and so things don't render as expected when I try to use the window.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 24 Nov 2009 04:48:12 +0000 |
parents | 00cace2d9080 |
children | 4b594623401b |
rev | line source |
---|---|
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
2859 | 3 Copyright (C) 1997-2009 Sam Lantinga |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #include "SDL_cocoavideo.h" |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
3248
cde30895105d
Added 64-bit architectures to the fat build script
Sam Lantinga <slouken@libsdl.org>
parents:
3246
diff
changeset
|
26 #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
27 /* |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
28 Add methods to get at private members of NSScreen. |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
29 Since there is a bug in Apple's screen switching code |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
30 that does not update this variable when switching |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
31 to fullscreen, we'll set it manually (but only for the |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
32 main screen). |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
33 */ |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
34 @interface NSScreen (NSScreenAccess) |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
35 - (void) setFrame:(NSRect)frame; |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
36 @end |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
37 |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
38 @implementation NSScreen (NSScreenAccess) |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
39 - (void) setFrame:(NSRect)frame; |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
40 { |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
41 _frame = frame; |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
42 } |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
43 @end |
3246
c843261f74a4
From: Jjgod Jiang <gzjjgod@gmail.com>
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
44 #endif |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
45 |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
46 static void |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
47 CG_SetError(const char *prefix, CGDisplayErr result) |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
48 { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
49 const char *error; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
50 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
51 switch (result) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
52 case kCGErrorFailure: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
53 error = "kCGErrorFailure"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
54 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
55 case kCGErrorIllegalArgument: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
56 error = "kCGErrorIllegalArgument"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
57 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
58 case kCGErrorInvalidConnection: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
59 error = "kCGErrorInvalidConnection"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
60 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
61 case kCGErrorInvalidContext: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
62 error = "kCGErrorInvalidContext"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
63 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
64 case kCGErrorCannotComplete: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
65 error = "kCGErrorCannotComplete"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
66 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
67 case kCGErrorNameTooLong: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
68 error = "kCGErrorNameTooLong"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
69 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
70 case kCGErrorNotImplemented: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
71 error = "kCGErrorNotImplemented"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
72 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
73 case kCGErrorRangeCheck: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
74 error = "kCGErrorRangeCheck"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
75 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
76 case kCGErrorTypeCheck: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
77 error = "kCGErrorTypeCheck"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
78 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
79 case kCGErrorNoCurrentPoint: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
80 error = "kCGErrorNoCurrentPoint"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
81 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
82 case kCGErrorInvalidOperation: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
83 error = "kCGErrorInvalidOperation"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
84 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
85 case kCGErrorNoneAvailable: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
86 error = "kCGErrorNoneAvailable"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
87 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
88 default: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
89 error = "Unknown Error"; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
90 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
91 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
92 SDL_SetError("%s: %s", prefix, error); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
93 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
94 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
95 static SDL_bool |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
96 GetDisplayMode(CFDictionaryRef moderef, SDL_DisplayMode *mode) |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
97 { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
98 SDL_DisplayModeData *data; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
99 CFNumberRef number; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
100 long width, height, bpp, refreshRate; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
101 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
102 data = (SDL_DisplayModeData *) SDL_malloc(sizeof(*data)); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
103 if (!data) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
104 return SDL_FALSE; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
105 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
106 data->moderef = moderef; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
107 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
108 number = CFDictionaryGetValue(moderef, kCGDisplayWidth); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
109 CFNumberGetValue(number, kCFNumberLongType, &width); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
110 number = CFDictionaryGetValue(moderef, kCGDisplayHeight); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
111 CFNumberGetValue(number, kCFNumberLongType, &height); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
112 number = CFDictionaryGetValue(moderef, kCGDisplayBitsPerPixel); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
113 CFNumberGetValue(number, kCFNumberLongType, &bpp); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
114 number = CFDictionaryGetValue(moderef, kCGDisplayRefreshRate); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
115 CFNumberGetValue(number, kCFNumberLongType, &refreshRate); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
116 |
1969
5d3724f64f2b
Clarified the difference between render drivers and render contexts
Sam Lantinga <slouken@libsdl.org>
parents:
1934
diff
changeset
|
117 mode->format = SDL_PIXELFORMAT_UNKNOWN; |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
118 switch (bpp) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
119 case 8: |
1969
5d3724f64f2b
Clarified the difference between render drivers and render contexts
Sam Lantinga <slouken@libsdl.org>
parents:
1934
diff
changeset
|
120 mode->format = SDL_PIXELFORMAT_INDEX8; |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
121 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
122 case 16: |
2237
e57a883ffa86
Advertise the most efficient format for the screen. Of course SDL code needs
Sam Lantinga <slouken@libsdl.org>
parents:
1973
diff
changeset
|
123 mode->format = SDL_PIXELFORMAT_ARGB1555; |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
124 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
125 case 32: |
2237
e57a883ffa86
Advertise the most efficient format for the screen. Of course SDL code needs
Sam Lantinga <slouken@libsdl.org>
parents:
1973
diff
changeset
|
126 mode->format = SDL_PIXELFORMAT_ARGB8888; |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
127 break; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
128 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
129 mode->w = width; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
130 mode->h = height; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
131 mode->refresh_rate = refreshRate; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
132 mode->driverdata = data; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
133 return SDL_TRUE; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
134 } |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 void |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 Cocoa_InitModes(_THIS) |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 { |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
139 CGDisplayErr result; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
140 CGDirectDisplayID *displays; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
141 CGDisplayCount numDisplays; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
142 int i; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
143 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
144 result = CGGetOnlineDisplayList(0, NULL, &numDisplays); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
145 if (result != kCGErrorSuccess) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
146 CG_SetError("CGGetOnlineDisplayList()", result); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
147 return; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
148 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
149 displays = SDL_stack_alloc(CGDirectDisplayID, numDisplays); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
150 result = CGGetOnlineDisplayList(numDisplays, displays, &numDisplays); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
151 if (result != kCGErrorSuccess) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
152 CG_SetError("CGGetOnlineDisplayList()", result); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
153 SDL_stack_free(displays); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
154 return; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
155 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
156 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
157 for (i = 0; i < numDisplays; ++i) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
158 SDL_VideoDisplay display; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
159 SDL_DisplayData *displaydata; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
160 SDL_DisplayMode mode; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
161 CFDictionaryRef moderef; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
162 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
163 if (CGDisplayIsInMirrorSet(displays[i])) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
164 continue; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
165 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
166 moderef = CGDisplayCurrentMode(displays[i]); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
167 if (!moderef) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
168 continue; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
169 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
170 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
171 displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
172 if (!displaydata) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
173 continue; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
174 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
175 displaydata->display = displays[i]; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
176 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
177 SDL_zero(display); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
178 if (!GetDisplayMode (moderef, &mode)) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
179 SDL_free(displaydata); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
180 continue; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
181 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
182 display.desktop_mode = mode; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
183 display.current_mode = mode; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
184 display.driverdata = displaydata; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
185 SDL_AddVideoDisplay(&display); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
186 } |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
187 SDL_stack_free(displays); |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
188 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
189 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
190 static void |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
191 AddDisplayMode(const void *moderef, void *context) |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
192 { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
193 SDL_VideoDevice *_this = (SDL_VideoDevice *) context; |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 SDL_DisplayMode mode; |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
196 if (GetDisplayMode(moderef, &mode)) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
197 SDL_AddDisplayMode(_this->current_display, &mode); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
198 } |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 } |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 void |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 Cocoa_GetDisplayModes(_THIS) |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 { |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
204 SDL_DisplayData *data = (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
205 CFArrayRef modes; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
206 CFRange range; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
207 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
208 modes = CGDisplayAvailableModes(data->display); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
209 if (!modes) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
210 return; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
211 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
212 range.location = 0; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
213 range.length = CFArrayGetCount(modes); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
214 CFArrayApplyFunction(modes, range, AddDisplayMode, _this); |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 } |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 int |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 Cocoa_SetDisplayMode(_THIS, SDL_DisplayMode * mode) |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 { |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
220 SDL_DisplayData *displaydata = (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
221 SDL_DisplayModeData *data = (SDL_DisplayModeData *) mode->driverdata; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
222 CGDisplayFadeReservationToken fade_token = kCGDisplayFadeReservationInvalidToken; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
223 CGError result; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
224 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
225 /* Fade to black to hide resolution-switching flicker */ |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
226 if (CGAcquireDisplayFadeReservation(5, &fade_token) == kCGErrorSuccess) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
227 CGDisplayFade(fade_token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
228 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
229 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
230 /* Put up the blanking window (a window above all other windows) */ |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
231 result = CGDisplayCapture(displaydata->display); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
232 if (result != kCGErrorSuccess) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
233 CG_SetError("CGDisplayCapture()", result); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
234 goto ERR_NO_CAPTURE; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
235 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
236 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
237 /* Do the physical switch */ |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
238 result = CGDisplaySwitchToMode(displaydata->display, data->moderef); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
239 if (result != kCGErrorSuccess) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
240 CG_SetError("CGDisplaySwitchToMode()", result); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
241 goto ERR_NO_SWITCH; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
242 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
243 |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
244 /* Hide the menu bar so it doesn't intercept events */ |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
245 HideMenuBar(); |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
246 |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
247 /* Fade in again (asynchronously) */ |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
248 if (fade_token != kCGDisplayFadeReservationInvalidToken) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
249 CGDisplayFade(fade_token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
250 CGReleaseDisplayFadeReservation(fade_token); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
251 } |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
252 |
3280
00cace2d9080
Merged a cleaned up version of Jiang's code changes from Google Summer of Code 2009
Sam Lantinga <slouken@libsdl.org>
parents:
3248
diff
changeset
|
253 [[NSApp mainWindow] makeKeyAndOrderFront: nil]; |
00cace2d9080
Merged a cleaned up version of Jiang's code changes from Google Summer of Code 2009
Sam Lantinga <slouken@libsdl.org>
parents:
3248
diff
changeset
|
254 |
3248
cde30895105d
Added 64-bit architectures to the fat build script
Sam Lantinga <slouken@libsdl.org>
parents:
3246
diff
changeset
|
255 #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
256 /* |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
257 There is a bug in Cocoa where NSScreen doesn't synchronize |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
258 with CGDirectDisplay, so the main screen's frame is wrong. |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
259 As a result, coordinate translation produces incorrect results. |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
260 We can hack around this bug by setting the screen rect |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
261 ourselves. This hack should be removed if/when the bug is fixed. |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
262 */ |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
263 [[NSScreen mainScreen] setFrame:NSMakeRect(0,0,mode->w,mode->h)]; |
3246
c843261f74a4
From: Jjgod Jiang <gzjjgod@gmail.com>
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
264 #endif |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
265 |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
266 return 0; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
267 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
268 /* Since the blanking window covers *all* windows (even force quit) correct recovery is crucial */ |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
269 ERR_NO_SWITCH: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
270 CGDisplayRelease(displaydata->display); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
271 ERR_NO_CAPTURE: |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
272 if (fade_token != kCGDisplayFadeReservationInvalidToken) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
273 CGDisplayFade (fade_token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
274 CGReleaseDisplayFadeReservation(fade_token); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
275 } |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 return -1; |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 } |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 void |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 Cocoa_QuitModes(_THIS) |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 { |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
282 int i, saved_display; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
283 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
284 saved_display = _this->current_display; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
285 for (i = 0; i < _this->num_displays; ++i) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
286 SDL_VideoDisplay *display = &_this->displays[i]; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
287 |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
288 if (display->current_mode.driverdata != display->desktop_mode.driverdata) { |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
289 _this->current_display = i; |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
290 Cocoa_SetDisplayMode(_this, &display->desktop_mode); |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
291 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
292 } |
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
293 CGReleaseAllDisplays(); |
1973
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
294 ShowMenuBar(); |
81255f93dfcd
Fixed fullscreen modes with Cocoa video driver.
Sam Lantinga <slouken@libsdl.org>
parents:
1969
diff
changeset
|
295 |
1934
70139af5ac27
Implemented Mac OS X video mode selection.
Sam Lantinga <slouken@libsdl.org>
parents:
1931
diff
changeset
|
296 _this->current_display = saved_display; |
1931
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 } |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 |
103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 /* vi: set ts=4 sw=4 expandtab: */ |