# HG changeset patch # User Sam Lantinga # Date 999645525 0 # Node ID e92aa316c51728312f1b662a79de713f0eb88ea8 # Parent cb384ef627f667ccb0fbf9b48fb896e96b41d793 Added Max's patches for building MacOS X apps on command line diff -r cb384ef627f6 -r e92aa316c517 Makefile.am --- a/Makefile.am Tue Sep 04 22:53:46 2001 +0000 +++ b/Makefile.am Tue Sep 04 23:18:45 2001 +0000 @@ -61,7 +61,7 @@ PBProjects.tar.gz: rm -f `find . -name .DS_Store` if [ -d PBProjects ]; then \ - tar zcvf $@ PBProjects src/main/macosx/SDLMain.nib; \ + tar zcvf $@ PBProjects; \ fi # Rule to force automake to rebuild the library diff -r cb384ef627f6 -r e92aa316c517 PBProjects.tar.gz Binary file PBProjects.tar.gz has changed diff -r cb384ef627f6 -r e92aa316c517 configure.in --- a/configure.in Tue Sep 04 22:53:46 2001 +0000 +++ b/configure.in Tue Sep 04 23:18:45 2001 +0000 @@ -2191,6 +2191,7 @@ include/Makefile src/Makefile src/main/Makefile +src/main/macosx/Makefile src/audio/Makefile src/audio/alsa/Makefile src/audio/arts/Makefile diff -r cb384ef627f6 -r e92aa316c517 sdl-config.in --- a/sdl-config.in Tue Sep 04 22:53:46 2001 +0000 +++ b/sdl-config.in Tue Sep 04 23:18:45 2001 +0000 @@ -56,6 +56,12 @@ @ENABLE_STATIC_TRUE@ libdirs="-L@libdir@ @SDL_RLD_FLAGS@" @ENABLE_STATIC_TRUE@ echo $libdirs @SDL_LIBS@ @SYSTEM_LIBS@ @ENABLE_STATIC_TRUE@ ;; +@TARGET_MACOSX_TRUE@ --nib) +@TARGET_MACOSX_TRUE@ echo @datadir@/sdl/SDLMain.nib +@TARGET_MACOSX_TRUE@ ;; +@TARGET_MACOSX_TRUE@ --plist) +@TARGET_MACOSX_TRUE@ echo @datadir@/sdl/Info.plist +@TARGET_MACOSX_TRUE@ ;; *) echo "${usage}" 1>&2 exit 1 diff -r cb384ef627f6 -r e92aa316c517 sdl.m4 --- a/sdl.m4 Tue Sep 04 22:53:46 2001 +0000 +++ b/sdl.m4 Tue Sep 04 23:18:45 2001 +0000 @@ -58,6 +58,17 @@ dnl checks the results of sdl-config to some extent dnl rm -f conf.sdltest + case "$target" in + *-*-darwin*) + cp -r `$SDL_CONFIG --nib` . + dnl create an Info.plist file, unless one exists + if test -f Info.plist ; then + : + else + cp `$SDL_CONFIG --plist` . + fi + ;; + esac AC_TRY_RUN([ #include #include @@ -169,5 +180,11 @@ fi AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) + case "$target" in + *-*-darwin*) + SDL_APPLE_CREATOR="????" + AC_SUBST(SDL_APPLE_CREATOR) + ;; + esac rm -f conf.sdltest ]) diff -r cb384ef627f6 -r e92aa316c517 src/main/Makefile.am --- a/src/main/Makefile.am Tue Sep 04 22:53:46 2001 +0000 +++ b/src/main/Makefile.am Tue Sep 04 23:18:45 2001 +0000 @@ -4,6 +4,8 @@ # This is necessary because some platforms have special program # entry points, which require special application initialization. +SUBDIRS = macosx + ARCH_SUBDIRS = $(srcdir)/beos $(srcdir)/linux \ $(srcdir)/macos $(srcdir)/macosx $(srcdir)/win32 diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/Info.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/macosx/Info.plist Tue Sep 04 23:18:45 2001 +0000 @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + dummy + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + dummy + CFBundlePackageType + APPL + CFBundleSignature + ???? + NSMainNibFile + SDLMain.nib + NSPrincipalClass + NSApplication + + diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/Makefile.am --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/macosx/Makefile.am Tue Sep 04 23:18:45 2001 +0000 @@ -0,0 +1,17 @@ +# On OS X, install the SDLMain.nib. +# We use an ugly hack to force the creation of the +# destination dir, maybe somebody with more automake +# experience knows how to do this properly? + +if TARGET_MACOSX +masternibdatadir = $(datadir)/sdl/SDLMain.nib +masternibdata_DATA = \ + SDLMain.nib + +nibdatadir = $(datadir)/sdl +nibdata_DATA = \ + SDLMain.nib/classes.nib \ + SDLMain.nib/info.nib \ + SDLMain.nib/objects.nib \ + Info.plist +endif diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/SDLMain.h --- a/src/main/macosx/SDLMain.h Tue Sep 04 22:53:46 2001 +0000 +++ b/src/main/macosx/SDLMain.h Tue Sep 04 23:18:45 2001 +0000 @@ -10,5 +10,6 @@ { } - (IBAction)quit:(id)sender; +- (IBAction)makeFullscreen:(id)sender; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/SDLMain.m --- a/src/main/macosx/SDLMain.m Tue Sep 04 22:53:46 2001 +0000 +++ b/src/main/macosx/SDLMain.m Tue Sep 04 23:18:45 2001 +0000 @@ -12,6 +12,7 @@ static int gArgc; static char **gArgv; static NSString *gAppName = 0; +static BOOL gFinderLaunch; @interface NSString (ReplaceSubString) - (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString; @@ -29,15 +30,21 @@ SDL_PushEvent(&event); } +/* Invoked from the Make Full-Screen menu item */ +- (void) makeFullscreen:(id)sender +{ + /* TODO */ +} + /* Set the working directory to the .app's parent directory */ -- (void) setupWorkingDirectory +- (void) setupWorkingDirectory:(BOOL)shouldChdir { char parentdir[MAXPATHLEN]; char *c; strncpy ( parentdir, gArgv[0], sizeof(parentdir) ); c = (char*) parentdir; - + while (*c != '\0') /* go to end */ c++; @@ -45,11 +52,13 @@ c--; *c++ = '\0'; /* cut off last part (binary name) */ - - assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */ - assert ( chdir ("../../../") == 0 ); /* chdir to the .app's parent */ - - gAppName = [ NSString stringWithCString: c ]; + + if (shouldChdir) + { + assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */ + assert ( chdir ("../../../") == 0 ); /* chdir to the .app's parent */ + } + /* gAppName = [ NSString stringWithCString: c ]; */ } /* Fix menu to contain the real app name instead of "SDL App" */ @@ -81,9 +90,10 @@ int status; /* Set the working directory to the .app's parent directory */ - [ self setupWorkingDirectory ]; + [ self setupWorkingDirectory: gFinderLaunch ]; /* Set the main menu to contain the real app name instead of "SDL App" */ + gAppName = [ [ NSBundle mainBundle ] bundleIdentifier ]; [ self fixMenu: [ NSApp mainMenu ] ]; /* Hand off to main application code */ @@ -148,8 +158,10 @@ /* This is passed if we are launched by double-clicking */ if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { gArgc = 1; + gFinderLaunch = YES; } else { gArgc = argc; + gFinderLaunch = NO; } gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1)); assert (gArgv != NULL); diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/SDLMain.nib/classes.nib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/macosx/SDLMain.nib/classes.nib Tue Sep 04 23:18:45 2001 +0000 @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {makeFullscreen = id; quit = id; }; + CLASS = SDLMain; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + } + ); + IBVersion = 1; +} \ No newline at end of file diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/SDLMain.nib/info.nib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/macosx/SDLMain.nib/info.nib Tue Sep 04 23:18:45 2001 +0000 @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 49 97 356 240 0 0 987 746 + IBMainMenuLocation + 20 515 195 44 0 46 800 532 + IBUserGuides + + + diff -r cb384ef627f6 -r e92aa316c517 src/main/macosx/SDLMain.nib/objects.nib Binary file src/main/macosx/SDLMain.nib/objects.nib has changed diff -r cb384ef627f6 -r e92aa316c517 src/video/maccommon/SDL_macevents.c --- a/src/video/maccommon/SDL_macevents.c Tue Sep 04 22:53:46 2001 +0000 +++ b/src/video/maccommon/SDL_macevents.c Tue Sep 04 23:18:45 2001 +0000 @@ -72,7 +72,7 @@ SDL_SetCursor(NULL); /* put our mask back case it changed during context switch */ - SetEventMask(everyEvent - autoKeyMask); + SetEventMask(everyEvent & ~autoKeyMask); } else { #if TARGET_API_MAC_CARBON { Cursor cursor; @@ -617,7 +617,7 @@ FlushEvents(everyEvent, 0); /* Allow every event but keyrepeat */ - SetEventMask(everyEvent - autoKeyMask); + SetEventMask(everyEvent & ~autoKeyMask); } void Mac_QuitEvents(_THIS) diff -r cb384ef627f6 -r e92aa316c517 src/video/maccommon/SDL_macmouse.c --- a/src/video/maccommon/SDL_macmouse.c Tue Sep 04 22:53:46 2001 +0000 +++ b/src/video/maccommon/SDL_macmouse.c Tue Sep 04 23:18:45 2001 +0000 @@ -67,18 +67,22 @@ return(NULL); } memset(cursor, 0, sizeof(*cursor)); - - bytes = (w/8); - if ( bytes > 2 ) { - bytes = 2; + + if (w > 16) + w = 16; + + if (h > 16) + h = 16; + + bytes = (w+7)/8; + + for ( row=0; rowcurs.data[row], data, bytes); + data += bytes; } - for ( row=0; rowcurs.data[row], data, bytes); - data += w/8; - } - for ( row=0; rowcurs.mask[row], mask, bytes); - mask += w/8; + mask += bytes; } cursor->curs.hotSpot.h = hot_x; cursor->curs.hotSpot.v = hot_y; diff -r cb384ef627f6 -r e92aa316c517 src/video/quartz/Makefile.am --- a/src/video/quartz/Makefile.am Tue Sep 04 22:53:46 2001 +0000 +++ b/src/video/quartz/Makefile.am Tue Sep 04 23:18:45 2001 +0000 @@ -11,7 +11,7 @@ SDL_QuartzVideo.m # These files are included by SDL_QuartzVideo.m (is that right??) -EXTRA_DIST = \ +noinst_HEADERS = \ SDL_QuartzEvents.m \ SDL_QuartzWM.m \ SDL_QuartzWindow.m diff -r cb384ef627f6 -r e92aa316c517 src/video/quartz/SDL_QuartzEvents.m --- a/src/video/quartz/SDL_QuartzEvents.m Tue Sep 04 22:53:46 2001 +0000 +++ b/src/video/quartz/SDL_QuartzEvents.m Tue Sep 04 23:18:45 2001 +0000 @@ -206,6 +206,12 @@ QZ_WarpWMCursor (this, SDL_VideoSurface->w / 2, SDL_VideoSurface->h / 2); CGAssociateMouseAndMouseCursorPosition (0); } + + /* Hide the mouse cursor if inside the app window */ + // FIXME + if (!QZ_cursor_visible) { + HideCursor (); + } SDL_PrivateAppActive (1, SDL_APPINPUTFOCUS); } @@ -218,6 +224,12 @@ if (currentGrabMode == SDL_GRAB_ON) { CGAssociateMouseAndMouseCursorPosition (1); } + + /* Show the mouse cursor */ + // FIXME + if (!QZ_cursor_visible) { + ShowCursor (); + } SDL_PrivateAppActive (0, SDL_APPINPUTFOCUS); } @@ -309,6 +321,8 @@ case NSRightMouseDragged: case 27: case NSMouseMoved: + if ( (SDL_VideoSurface->flags & SDL_FULLSCREEN) + || NSPointInRect([event locationInWindow], winRect) ) { static int moves = 0; NSPoint p; diff -r cb384ef627f6 -r e92aa316c517 src/video/quartz/SDL_QuartzWM.m --- a/src/video/quartz/SDL_QuartzWM.m Tue Sep 04 22:53:46 2001 +0000 +++ b/src/video/quartz/SDL_QuartzWM.m Tue Sep 04 23:18:45 2001 +0000 @@ -35,46 +35,52 @@ int w, int h, int hot_x, int hot_y) { WMcursor *cursor; int row, bytes; + + /* Allocate the cursor memory */ cursor = (WMcursor *)malloc(sizeof(WMcursor)); if ( cursor == NULL ) { SDL_OutOfMemory(); return(NULL); } memset(cursor, 0, sizeof(*cursor)); - - bytes = (w/8); - if ( bytes > 2 ) { - bytes = 2; + + if (w > 16) + w = 16; + + if (h > 16) + h = 16; + + bytes = (w+7)/8; + + for ( row=0; rowcurs.data[row], data, bytes); + data += bytes; } - for ( row=0; rowcurs.data[row], data, bytes); - data += w/8; - } - for ( row=0; rowcurs.mask[row], mask, bytes); - mask += w/8; + mask += bytes; } cursor->curs.hotSpot.h = hot_x; cursor->curs.hotSpot.v = hot_y; - return(cursor); + return(cursor); } +static int QZ_cursor_visible = 1; + static int QZ_ShowWMCursor (_THIS, WMcursor *cursor) { - static int visible = 1; - if ( cursor == NULL) { - if ( visible ) { + if ( QZ_cursor_visible ) { HideCursor (); - visible = 0; + QZ_cursor_visible = 0; } } else { SetCursor(&cursor->curs); - if ( ! visible ) { + if ( ! QZ_cursor_visible ) { ShowCursor (); - visible = 1; + QZ_cursor_visible = 1; } }