From c80db4d21140fd7f6150f7ef5fbe38753ef65d0e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 4 Sep 2001 23:18:45 +0000 Subject: [PATCH] Added Max's patches for building MacOS X apps on command line --- Makefile.am | 2 +- PBProjects.tar.gz | Bin 21267 -> 20136 bytes configure.in | 1 + sdl-config.in | 6 ++++ sdl.m4 | 17 +++++++++++ src/main/Makefile.am | 2 ++ src/main/macosx/Info.plist | 22 ++++++++++++++ src/main/macosx/Makefile.am | 17 +++++++++++ src/main/macosx/SDLMain.h | 1 + src/main/macosx/SDLMain.m | 28 ++++++++++++----- src/main/macosx/SDLMain.nib/classes.nib | 12 ++++++++ src/main/macosx/SDLMain.nib/info.nib | 12 ++++++++ src/main/macosx/SDLMain.nib/objects.nib | Bin 0 -> 1701 bytes src/video/maccommon/SDL_macevents.c | 4 +-- src/video/maccommon/SDL_macmouse.c | 22 ++++++++------ src/video/quartz/Makefile.am | 2 +- src/video/quartz/SDL_QuartzEvents.m | 14 +++++++++ src/video/quartz/SDL_QuartzWM.m | 38 ++++++++++++++---------- 18 files changed, 163 insertions(+), 37 deletions(-) create mode 100644 src/main/macosx/Info.plist create mode 100644 src/main/macosx/Makefile.am create mode 100644 src/main/macosx/SDLMain.nib/classes.nib create mode 100644 src/main/macosx/SDLMain.nib/info.nib create mode 100644 src/main/macosx/SDLMain.nib/objects.nib diff --git a/Makefile.am b/Makefile.am index ca20e2729..e01df80be 100644 --- a/Makefile.am +++ b/Makefile.am @@ -61,7 +61,7 @@ exports: 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 --git a/PBProjects.tar.gz b/PBProjects.tar.gz index 61ee11bd9b1da9d70ae0507d9efd6058bcbad2f9..f95c874bb6a00d47c17bf490587c845cf732b42e 100644 GIT binary patch literal 20136 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 X%P#%D!qy5Z`&e#Lc@W0|C&&K)JyVu! literal 21267 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 diff --git a/configure.in b/configure.in index 761a96c94..6b83669f9 100644 --- a/configure.in +++ b/configure.in @@ -2191,6 +2191,7 @@ docs/man3/Makefile include/Makefile src/Makefile src/main/Makefile +src/main/macosx/Makefile src/audio/Makefile src/audio/alsa/Makefile src/audio/arts/Makefile diff --git a/sdl-config.in b/sdl-config.in index c163a29b3..4b7b2e752 100644 --- a/sdl-config.in +++ b/sdl-config.in @@ -56,6 +56,12 @@ while test $# -gt 0; do @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 --git a/sdl.m4 b/sdl.m4 index 36fb04afb..d2a478594 100644 --- a/sdl.m4 +++ b/sdl.m4 @@ -58,6 +58,17 @@ dnl Now check if the installed SDL is sufficiently new. (Also sanity 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 @@ int main(int argc, char *argv[]) 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 --git a/src/main/Makefile.am b/src/main/Makefile.am index a74c430b3..dc5057df1 100644 --- a/src/main/Makefile.am +++ b/src/main/Makefile.am @@ -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 --git a/src/main/macosx/Info.plist b/src/main/macosx/Info.plist new file mode 100644 index 000000000..63dfafbef --- /dev/null +++ b/src/main/macosx/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + dummy + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + dummy + CFBundlePackageType + APPL + CFBundleSignature + ???? + NSMainNibFile + SDLMain.nib + NSPrincipalClass + NSApplication + + diff --git a/src/main/macosx/Makefile.am b/src/main/macosx/Makefile.am new file mode 100644 index 000000000..d8ab0d4bf --- /dev/null +++ b/src/main/macosx/Makefile.am @@ -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 --git a/src/main/macosx/SDLMain.h b/src/main/macosx/SDLMain.h index 1ed070e05..b2a81abbf 100644 --- a/src/main/macosx/SDLMain.h +++ b/src/main/macosx/SDLMain.h @@ -10,5 +10,6 @@ { } - (IBAction)quit:(id)sender; +- (IBAction)makeFullscreen:(id)sender; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end diff --git a/src/main/macosx/SDLMain.m b/src/main/macosx/SDLMain.m index ac11e75b5..42cc8a4ef 100644 --- a/src/main/macosx/SDLMain.m +++ b/src/main/macosx/SDLMain.m @@ -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 @@ - (void) quit:(id)sender 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 @@ - (void) setupWorkingDirectory 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 @@ - (void) applicationDidFinishLaunching: (NSNotification *) note 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 @@ int main (int argc, char **argv) { /* 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 --git a/src/main/macosx/SDLMain.nib/classes.nib b/src/main/macosx/SDLMain.nib/classes.nib new file mode 100644 index 000000000..99f175475 --- /dev/null +++ b/src/main/macosx/SDLMain.nib/classes.nib @@ -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 --git a/src/main/macosx/SDLMain.nib/info.nib b/src/main/macosx/SDLMain.nib/info.nib new file mode 100644 index 000000000..2211cf9d7 --- /dev/null +++ b/src/main/macosx/SDLMain.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 49 97 356 240 0 0 987 746 + IBMainMenuLocation + 20 515 195 44 0 46 800 532 + IBUserGuides + + + diff --git a/src/main/macosx/SDLMain.nib/objects.nib b/src/main/macosx/SDLMain.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..9f697b0ee789b08c47c65d0f88be7ebaaa2ca3f8 GIT binary patch literal 1701 zcma)6&1)n@6t6bPW;Bx+*N@8@n1djTr}d<{*t1!}4mcCF4<4mwrp)wif6P{Q6L&9C zp{DR8ILs88a#==KB~&1U%^?F}Am|VX7~-F>ipU~@c=RCgRre&$8rC>-=;D3+e!uss z-W#8aZr5=&j0mX{Ux5MhrRf3}*EO#@J&pwY~E zCqbOfmxDOUo#J*nh@;hykB^U010ZHgR$AA4I1FM^!IxV?>wu1U_A=&h)+K__g&MBh z^lWmI^9K7`d;=ax)}EsC5w2R19bs@myWr28?2D%Cu9^s;`}bGTEIQ%*s3XqEk!ji(fOW?> zhxV|~@19(F(RO^!?#Z#{j&5A9s~s2Kcl>Iwaz-wj3FEQ{DEW$hQu9g26R@?@9KbR( zQa?e;6dm93oIA;N8s2}&oB^3BZAZZZ`#ejU5@GjhHhKrVJ6YU-b{1-!j8mZKj;4>B{ST@ZbU z8SV?X55}^9Fx)ygg2gaVvMe~jz9}FGxF<6@>cx^(a>@%Ji3BcueAsURq39^tc&RJ3 zJ=bDmrfD8DfcEJS=0soDJO`*B*SorkxqwtLStNi3gYH*tQcd>CJGPJAVc=#PRK8S$ zNls>RWb1{)hz%Vvp(BQdtt2J(wFxHkObTN!BsDC>k&C0z5`J259|2gVie0>%Y#yz3 zTiYgX!C(#v_H;$h*D?7pAfBEAJBkSm0=RkeP+o#9?mVEVt$v}XskSH*YL6P1)bG@| zs15?POO2P+HbtMPhj-M^6n(0GrKqDeDB`L+uQndh%d(Lfzh^sPFi z=r8pLHFD|^MQdv34JF@HgJspH#++&!k{Yi_)C6&}g{uoeC9oHX?ctR`uh+i;5Vq+O literal 0 HcmV?d00001 diff --git a/src/video/maccommon/SDL_macevents.c b/src/video/maccommon/SDL_macevents.c index ca72d96d5..be40c029f 100644 --- a/src/video/maccommon/SDL_macevents.c +++ b/src/video/maccommon/SDL_macevents.c @@ -72,7 +72,7 @@ static int Mac_HandleActivate(int activate) 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 @@ void Mac_InitEvents(_THIS) FlushEvents(everyEvent, 0); /* Allow every event but keyrepeat */ - SetEventMask(everyEvent - autoKeyMask); + SetEventMask(everyEvent & ~autoKeyMask); } void Mac_QuitEvents(_THIS) diff --git a/src/video/maccommon/SDL_macmouse.c b/src/video/maccommon/SDL_macmouse.c index cb3d9e8e0..d1bd65998 100644 --- a/src/video/maccommon/SDL_macmouse.c +++ b/src/video/maccommon/SDL_macmouse.c @@ -67,18 +67,22 @@ WMcursor *Mac_CreateWMCursor(_THIS, return(NULL); } memset(cursor, 0, sizeof(*cursor)); - - bytes = (w/8); - if ( bytes > 2 ) { - bytes = 2; - } - for ( row=0; row 16) + w = 16; + + if (h > 16) + h = 16; + + bytes = (w+7)/8; + + for ( row=0; rowcurs.data[row], data, bytes); - data += w/8; + data += bytes; } - 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 --git a/src/video/quartz/Makefile.am b/src/video/quartz/Makefile.am index 9c109b639..09aaa72cb 100644 --- a/src/video/quartz/Makefile.am +++ b/src/video/quartz/Makefile.am @@ -11,7 +11,7 @@ QUARTZ_SRCS = \ 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 --git a/src/video/quartz/SDL_QuartzEvents.m b/src/video/quartz/SDL_QuartzEvents.m index 002a1d2db..79ea3930a 100644 --- a/src/video/quartz/SDL_QuartzEvents.m +++ b/src/video/quartz/SDL_QuartzEvents.m @@ -206,6 +206,12 @@ static void QZ_DoActivate (_THIS) 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 @@ static void QZ_DoDeactivate (_THIS) { 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 @@ static void QZ_PumpEvents (_THIS) case NSRightMouseDragged: case 27: case NSMouseMoved: + if ( (SDL_VideoSurface->flags & SDL_FULLSCREEN) + || NSPointInRect([event locationInWindow], winRect) ) { static int moves = 0; NSPoint p; diff --git a/src/video/quartz/SDL_QuartzWM.m b/src/video/quartz/SDL_QuartzWM.m index 2bc6d2ef6..707f86de9 100644 --- a/src/video/quartz/SDL_QuartzWM.m +++ b/src/video/quartz/SDL_QuartzWM.m @@ -35,46 +35,52 @@ static void QZ_FreeWMCursor (_THIS, WMcursor *cursor) { 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; - } - for ( row=0; row 16) + w = 16; + + if (h > 16) + h = 16; + + bytes = (w+7)/8; + + for ( row=0; rowcurs.data[row], data, bytes); - data += w/8; + data += bytes; } - 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; } }