FROM : Dennis Munsie
DATE : Tue May 13 19:11:40 2008
Hello everyone,
I have an app right now that I've added a fullscreen mode to. RIght
now it works for fullscreen when I go to fullscreen on the main
display. If I attempt to do this on the secondary display, I get a
blank screen.
I think one problem is probably the way I am identifying which screen
to use -- I use [NSWindow screen] to find where my current window is
and use that to capture the screen and place a new fullscreen window
over it. One potential problem I see is when the window spans across
two displays -- how do I reasonably choose which screen to display it
on? What screen does [NSWindow screen] return?
So to recap -- this code currently works correctly in the case when
the _mainWindow is on the primary display. The code does not work
correctly when it is on a secondary display. And I haven't tested the
case where the code spans displays -- I am assuming that it just flat
out doesn't work :)
here is the code from my enterFullscreen method -- mostly pulled from
sample code off developer.apple.com:
-(void)enterFullscreen
{
NSScreen *windowScreen = [_mainWindow screen];
NSDictionary *screenInfo = [windowScreen deviceDescription];
NSNumber *screenID = [screenInfo objectForKey:@"NSScreenNumber"];
// capture the screen
CGDirectDisplayID displayID = (CGDirectDisplayID)[screenID longValue];
CGDisplayErr err = CGDisplayCapture(displayID);
if(err == CGDisplayNoErr) {
if(!_fullscreenWindow) {
// Create the full-screen window.
NSRect winRect = [windowScreen frame];
_fullscreenWindow = [[NSWindow alloc]
initWithContentRect:winRect styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered defer:NO screen:windowScreen];
// Establish the window attributes.
[_fullscreenWindow setReleasedWhenClosed:NO];
[_fullscreenWindow setDisplaysWhenScreenProfileChanges:YES];
[_fullscreenWindow setDelegate:self];
}
// move our view over to the fullscreen window
[_mainWindow setContentView:nil];
[_fullscreenWindow setContentView:_mainView];
[_mainWindow setNeedsDisplay:YES];
// The window has to be above the level of the shield window.
int32_t shieldLevel = CGShieldingWindowLevel();
[_fullscreenWindow setLevel:shieldLevel];
// Show the window.
[_fullscreenWindow makeKeyAndOrderFront:self];
_fullscreenFlag = YES;
}
}
Sorry about the formatting -- it got a bit messed up when i pasted it
into gmail.
Thanks!
dennis
DATE : Tue May 13 19:11:40 2008
Hello everyone,
I have an app right now that I've added a fullscreen mode to. RIght
now it works for fullscreen when I go to fullscreen on the main
display. If I attempt to do this on the secondary display, I get a
blank screen.
I think one problem is probably the way I am identifying which screen
to use -- I use [NSWindow screen] to find where my current window is
and use that to capture the screen and place a new fullscreen window
over it. One potential problem I see is when the window spans across
two displays -- how do I reasonably choose which screen to display it
on? What screen does [NSWindow screen] return?
So to recap -- this code currently works correctly in the case when
the _mainWindow is on the primary display. The code does not work
correctly when it is on a secondary display. And I haven't tested the
case where the code spans displays -- I am assuming that it just flat
out doesn't work :)
here is the code from my enterFullscreen method -- mostly pulled from
sample code off developer.apple.com:
-(void)enterFullscreen
{
NSScreen *windowScreen = [_mainWindow screen];
NSDictionary *screenInfo = [windowScreen deviceDescription];
NSNumber *screenID = [screenInfo objectForKey:@"NSScreenNumber"];
// capture the screen
CGDirectDisplayID displayID = (CGDirectDisplayID)[screenID longValue];
CGDisplayErr err = CGDisplayCapture(displayID);
if(err == CGDisplayNoErr) {
if(!_fullscreenWindow) {
// Create the full-screen window.
NSRect winRect = [windowScreen frame];
_fullscreenWindow = [[NSWindow alloc]
initWithContentRect:winRect styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered defer:NO screen:windowScreen];
// Establish the window attributes.
[_fullscreenWindow setReleasedWhenClosed:NO];
[_fullscreenWindow setDisplaysWhenScreenProfileChanges:YES];
[_fullscreenWindow setDelegate:self];
}
// move our view over to the fullscreen window
[_mainWindow setContentView:nil];
[_fullscreenWindow setContentView:_mainView];
[_mainWindow setNeedsDisplay:YES];
// The window has to be above the level of the shield window.
int32_t shieldLevel = CGShieldingWindowLevel();
[_fullscreenWindow setLevel:shieldLevel];
// Show the window.
[_fullscreenWindow makeKeyAndOrderFront:self];
_fullscreenFlag = YES;
}
}
Sorry about the formatting -- it got a bit messed up when i pasted it
into gmail.
Thanks!
dennis
| Related mails | Author | Date |
|---|---|---|
| Dennis Munsie | May 13, 19:11 | |
| Ricky Sharp | May 13, 22:23 | |
| Dennis Munsie | May 13, 22:40 | |
| John Stiles | May 13, 23:00 | |
| dan sinclair | May 13, 23:02 | |
| Dennis Munsie | May 13, 23:47 | |
| Jean-Daniel Dupas | May 14, 00:30 | |
| Dennis Munsie | May 14, 05:30 | |
| Jean-Daniel Dupas | May 14, 09:56 | |
| Sean McBride | May 14, 18:54 | |
| Mike Fischer | May 16, 18:18 |






Cocoa mail archive

