Fixed: Compilation under Mac OS X 10.5

This commit is contained in:
kervala 2010-10-04 21:47:26 +02:00
parent 7dee19dbf1
commit bf3883a457

View file

@ -30,27 +30,28 @@
#include <Carbon/Carbon.h>
#import <Cocoa/Cocoa.h>
#import <OpenGL/OpenGL.h>
namespace NL3D { namespace MAC {
// This cocoa adapter can be used in two environments:
// First: There is no other code which creates the NSApplication object, so
// First: There is no other code which creates the NSApplication object, so
// NeL is completely in charge of starting and setting up the application.
// In this case, the NSAutoreleasePool needed to handle the cocoa style memory
// In this case, the NSAutoreleasePool needed to handle the cocoa style memory
// management is created by this code.
// Second: There is already a NSApplication set up. This could be the case if
// NeL is used for example in a Qt widget. So Qt already created all the
// NeL is used for example in a Qt widget. So Qt already created all the
// NSApplication infrastructure, so it is not set up by this code again!
//
// Thats why, the g_pool variable (containing a pointer to the NSAutoreleasePool
// created by this code) can be used to check whether NeL created the
// Thats why, the g_pool variable (containing a pointer to the NSAutoreleasePool
// created by this code) can be used to check whether NeL created the
// NSApplication infrastructure itself or not.
//
// WARNING:
// Currently the NSApplication infrastructure is automatically created with the
// call to createWindow(). So if for example Qt already created NSApplication,
// createWindow() must not be called. Instead, setDisplay() can be provided with
// a window handle (on Mac OS Cocoa Qt this is a NSView*). In this case, this
// a window handle (on Mac OS Cocoa Qt this is a NSView*). In this case, this
// cocoa adapter will skip the NSApplication setup and embed itself into the
// provided view running in the already set up application.
@ -77,7 +78,7 @@ static void setupApplicationMenu()
// add the about menu item
title = [@"About " stringByAppendingString:appName];
[menu addItemWithTitle:title
[menu addItemWithTitle:title
action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
// separator
@ -85,16 +86,16 @@ static void setupApplicationMenu()
// add the hide application menu item
title = [@"Hide " stringByAppendingString:appName];
[menu addItemWithTitle:title
[menu addItemWithTitle:title
action:@selector(hide:) keyEquivalent:@"h"];
// add the hide others menu item
menuItem = [menu addItemWithTitle:@"Hide Others"
menuItem = [menu addItemWithTitle:@"Hide Others"
action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
// add the show all menu item
[menu addItemWithTitle:@"Show All"
[menu addItemWithTitle:@"Show All"
action:@selector(unhideAllApplications:) keyEquivalent:@""];
// separator
@ -105,11 +106,11 @@ static void setupApplicationMenu()
*/
// add the quit menu item
title = [@"Quit " stringByAppendingString:appName];
[menu addItemWithTitle:title
[menu addItemWithTitle:title
action:@selector(terminate:) keyEquivalent:@"q"];
// create an empty menu item and put the new menu into it as a subitem
menuItem = [[NSMenuItem alloc] initWithTitle:@""
menuItem = [[NSMenuItem alloc] initWithTitle:@""
action:nil keyEquivalent:@""];
[menuItem setSubmenu:menu];
@ -132,13 +133,13 @@ static bool setupNSApplication()
// init the application object
[NSApplication sharedApplication];
// create the menu in the top screen bar
setupApplicationMenu();
// finish the application launching
[NSApp finishLaunching];
return true;
}
@ -335,13 +336,14 @@ bool setWindowStyle(nlWindow wnd, bool fullscreen)
// put the view in fullscreen mode, hiding the dock but enabling the menubar
// to pop up if the mouse hits the top screen border.
// NOTE: withOptions:nil disables <CMD>+<Tab> application switching!
#ifdef MAC_OS_X_VERSION_10_6
[superview enterFullScreenMode:[NSScreen mainScreen] withOptions:
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:
NSApplicationPresentationHideDock |
NSApplicationPresentationAutoHideMenuBar],
NSFullScreenModeApplicationPresentationOptions, nil]];
#endif // MAC_OS_X_VERSION_10_6
/*
TODO check if simply using NSView enterFullScreenMode is a good idea.
the context can be set to full screen as well, performance differences?
@ -386,6 +388,7 @@ void getCurrentScreenMode(nlWindow wnd, GfxMode& mode)
}
}
#ifdef MAC_OS_X_VERSION_10_6
/// helper to extract bits per pixel value from screen mode, only 16 or 32 bits
static int bppFromDisplayMode(CGDisplayModeRef mode)
{
@ -401,6 +404,7 @@ static int bppFromDisplayMode(CGDisplayModeRef mode)
return 0;
}
#endif // MAC_OS_X_VERSION_10_6
/// get the list of available screen modes
bool getModes(std::vector<GfxMode> &modes)
@ -418,6 +422,7 @@ bool getModes(std::vector<GfxMode> &modes)
nldebug("3D: %d displays found", (int)numDisplays);
#ifdef MAC_OS_X_VERSION_10_6
for (CGDisplayCount i = 0; i < numDisplays; ++i)
{
CGDirectDisplayID dspy = display[i];
@ -455,6 +460,7 @@ bool getModes(std::vector<GfxMode> &modes)
}
}
}
#endif // MAC_OS_X_VERSION_10_6
return true;
}
@ -1076,7 +1082,7 @@ void submitEvents(NLMISC::CEventServer& server,
{
if(fabs(event.deltaY) > 0.1)
server.postEvent(new NLMISC::CEventMouseWheel(
mouseX, mouseY, (NLMISC::TMouseButton)modifiers,
mouseX, mouseY, (NLMISC::TMouseButton)modifiers,
(event.deltaY > 0), eventEmitter));
break;
@ -1086,12 +1092,14 @@ void submitEvents(NLMISC::CEventServer& server,
case NSOtherMouseDown:break;
case NSOtherMouseUp:break;
case NSOtherMouseDragged:break;
#ifdef MAC_OS_X_VERSION_10_6
case NSEventTypeGesture:break;
case NSEventTypeMagnify:break;
case NSEventTypeSwipe:break;
case NSEventTypeRotate:break;
case NSEventTypeBeginGesture:break;
case NSEventTypeEndGesture:break;
#endif // MAC_OS_X_VERSION_10_6
default:
{
nlwarning("Unknown event type. dropping.");