Fix1005.patch

GelluleX, 09/26/2011 06:54 am

Download (5.7 kB)

b/code/nel/src/3d/driver/opengl/driver_opengl.h
793 793
	NSAutoreleasePool*         _autoreleasePool;
794 794
	uint16                     _backBufferHeight;
795 795
	uint16                     _backBufferWidth;
796
    NSWindow*                  _cocoaWindow;
796 797

797 798
	NSView* containerView() { return (NSView*)_win; }
799
    NSWindow* cocoaWindow() { return _cocoaWindow; }
798 800
	void setupApplicationMenu();
799 801

800 802
#elif defined (NL_OS_UNIX)
b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp
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)