| 1507 |
1507 |
nldebug("cannot create cocoa view for cocoa window");
|
| 1508 |
1508 |
return false;
|
| 1509 |
1509 |
}
|
|
1510 |
|
|
1511 |
_cocoaWindow = cocoa_window;
|
| 1510 |
1512 |
|
| 1511 |
1513 |
#elif defined (NL_OS_UNIX)
|
| 1512 |
1514 |
|
| ... | ... | |
| 1688 |
1690 |
#elif defined(NL_OS_MAC)
|
| 1689 |
1691 |
|
| 1690 |
1692 |
// leave fullscreen mode, enter windowed mode
|
| 1691 |
|
if(windowStyle == EWSWindowed && [containerView() isInFullScreenMode])
|
|
1693 |
if(windowStyle == EWSWindowed && !_CurrentMode.Windowed)
|
| 1692 |
1694 |
{
|
| 1693 |
|
// disable manual setting of back buffer size, cocoa handles this
|
| 1694 |
|
// automatically as soon as the view gets resized
|
| 1695 |
|
CGLError error = CGLDisable((CGLContextObj)[_ctx CGLContextObj],
|
| 1696 |
|
kCGLCESurfaceBackingSize);
|
| 1697 |
|
|
| 1698 |
|
if(error != kCGLNoError)
|
| 1699 |
|
nlerror("cannot disable kCGLCESurfaceBackingSize (%s)",
|
| 1700 |
|
CGLErrorString(error));
|
| 1701 |
|
|
| 1702 |
|
// pull the view back from fullscreen restoring window options
|
| 1703 |
|
[containerView() exitFullScreenModeWithOptions:nil];
|
| 1704 |
|
|
|
1695 |
// disable manual setting of back buffer size, cocoa handles this
|
|
1696 |
// automatically as soon as the view gets resized
|
|
1697 |
CGLError error = CGLDisable((CGLContextObj)[_ctx CGLContextObj], kCGLCESurfaceBackingSize);
|
|
1698 |
if(error != kCGLNoError)
|
|
1699 |
nlerror("cannot disable kCGLCESurfaceBackingSize (%s)", CGLErrorString(error));
|
|
1700 |
|
|
1701 |
// Makes the cocoaWindow a regular window
|
|
1702 |
[cocoaWindow() setStyleMask:(NSTitledWindowMask | NSClosableWindowMask |
|
|
1703 |
NSMiniaturizableWindowMask | NSResizableWindowMask)];
|
|
1704 |
[cocoaWindow() setFrame:[[NSScreen mainScreen] visibleFrame] display:true];
|
|
1705 |
[cocoaWindow() setLevel:NSNormalWindowLevel];
|
|
1706 |
|
| 1705 |
1707 |
// let the gl view receive key events
|
| 1706 |
1708 |
[[containerView() window] makeFirstResponder:_glView];
|
| 1707 |
|
|
| 1708 |
|
// bring the window containing the gl view to the front
|
| 1709 |
|
[[containerView() window] makeKeyAndOrderFront:nil];
|
| 1710 |
1709 |
}
|
| 1711 |
1710 |
|
| 1712 |
1711 |
// enter fullscreen, leave windowed mode
|
| 1713 |
|
else if(windowStyle == EWSFullscreen && ![containerView() isInFullScreenMode])
|
|
1712 |
else if(windowStyle == EWSFullscreen && _CurrentMode.Windowed)
|
| 1714 |
1713 |
{
|
| 1715 |
|
// enable manual back buffer size for mode setting in fullscreen
|
| 1716 |
|
CGLError error = CGLEnable((CGLContextObj)[_ctx CGLContextObj],
|
| 1717 |
|
kCGLCESurfaceBackingSize);
|
| 1718 |
|
|
| 1719 |
|
if(error != kCGLNoError)
|
| 1720 |
|
nlerror("cannot enable kCGLCESurfaceBackingSize (%s)",
|
| 1721 |
|
CGLErrorString(error));
|
| 1722 |
|
|
| 1723 |
|
// put the view in fullscreen mode, hiding the dock but enabling the menubar
|
| 1724 |
|
// to pop up if the mouse hits the top screen border.
|
| 1725 |
|
// NOTE: withOptions:nil disables <CMD>+<Tab> application switching!
|
| 1726 |
|
#if defined(MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
| 1727 |
|
[containerView() enterFullScreenMode:[NSScreen mainScreen] withOptions:
|
| 1728 |
|
[NSDictionary dictionaryWithObjectsAndKeys:
|
| 1729 |
|
[NSNumber numberWithInt:
|
| 1730 |
|
NSApplicationPresentationHideDock |
|
| 1731 |
|
NSApplicationPresentationAutoHideMenuBar],
|
| 1732 |
|
NSFullScreenModeApplicationPresentationOptions, nil]];
|
| 1733 |
|
#endif
|
| 1734 |
|
/*
|
| 1735 |
|
TODO check if simply using NSView enterFullScreenMode is a good idea.
|
| 1736 |
|
the context can be set to full screen as well, performance differences?
|
| 1737 |
|
*/
|
| 1738 |
|
|
|
1714 |
// enable manual back buffer size for mode setting in fullscreen
|
|
1715 |
CGLError error = CGLEnable((CGLContextObj)[_ctx CGLContextObj], kCGLCESurfaceBackingSize);
|
|
1716 |
if(error != kCGLNoError)
|
|
1717 |
nlerror("cannot enable kCGLCESurfaceBackingSize (%s)", CGLErrorString(error));
|
|
1718 |
|
|
1719 |
// Makes the cocoaWindow borderless, fullscreen, and one level above the menu bar
|
|
1720 |
[cocoaWindow() setStyleMask:NSBorderlessWindowMask];
|
|
1721 |
[cocoaWindow() setFrame:[[NSScreen mainScreen] frame] display:true];
|
|
1722 |
[cocoaWindow() setLevel:NSMainMenuWindowLevel+1];
|
|
1723 |
|
| 1739 |
1724 |
// let the gl view receive key events
|
| 1740 |
1725 |
[[containerView() window] makeFirstResponder:_glView];
|
| 1741 |
1726 |
}
|
| ... | ... | |
| 2072 |
2057 |
mode.Depth = NSBitsPerPixelFromDepth([screen depth]);
|
| 2073 |
2058 |
|
| 2074 |
2059 |
// in fullscreen mode
|
| 2075 |
|
if([containerView() isInFullScreenMode])
|
|
2060 |
if(!_CurrentMode.Windowed)
|
| 2076 |
2061 |
{
|
| 2077 |
2062 |
// return the size of the back buffer (like having switched monitor mode)
|
| 2078 |
2063 |
mode.Windowed = false;
|
| ... | ... | |
| 2396 |
2381 |
else
|
| 2397 |
2382 |
{
|
| 2398 |
2383 |
#ifdef NL_OS_MAC
|
| 2399 |
|
if([containerView() isInFullScreenMode])
|
|
2384 |
if(!_CurrentMode.Windowed)
|
| 2400 |
2385 |
{
|
| 2401 |
2386 |
width = _backBufferWidth;
|
| 2402 |
2387 |
height = _backBufferHeight;
|
| ... | ... | |
| 2439 |
2424 |
#elif defined(NL_OS_MAC)
|
| 2440 |
2425 |
|
| 2441 |
2426 |
// for fullscreen mode, adjust the back buffer size to desired resolution
|
| 2442 |
|
if([containerView() isInFullScreenMode])
|
|
2427 |
if(!_CurrentMode.Windowed)
|
| 2443 |
2428 |
{
|
| 2444 |
2429 |
// disable and re-enable fullscreen
|
| 2445 |
2430 |
// fixes #1062 (http://dev.ryzom.com/issues/1062)
|