From 23d3cf9854ef0eef6de48840c46729ed90a3e996 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 --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40169 --- 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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 z 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 Iv3R)t1I?w)D*ylh 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 @@ static NSString *gAppName = 0; 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 @@ static NSString *gAppName = 0; 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 @@ static NSString *gAppName = 0; 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&ub(_6t3PRo6-C*u0JkoU=D&Tp2m~rV$Ws?JK%KGK6nhBnR2Ffd%9=r58;m!{EW6ljx}@Sz;(I*eV2~>U04`g08G9i^KeSS7Q$cM-s_WoOrRGOS5GpQR{K++fCE?KpukVw$Cr&Sp-L zG~-xt-VbU1G_RD1qoq%ekB?CV025Zft`Bj`4}%K6))tzFWtSRG4RerEmx#S^x{fQi z8%}VW^9a5X--47A*-M#xf~z)lDCRsuQ5?k)kKulttSp%bp$89^&;&Zc{5o2F+DDf? zdXrS~S&l}XUl=r!2F=ns4qE(TjGSHf7xG2dy}bN(PCPw8shc@}4_;^(A?@f)rD?1F~_F1A6+ktbtY;9~cj<>*Jz zgRab-svvei%KpCKdhkb|Y#mGyz>sC@OB;+5;xQ~IIqmg|Wm{x^+V^PSyVJhs;R^Kw zhK|yWmpx^+7uzskn&v?SUHM$A?l0(eP3hkMw7R0JnDm1x4rT)1qc(NCsuNVxz4E@} zVYlzN-T^6Jt&=KFXY$O}YxOcDkkHenqU)Xu0eCsBVK$^Lre{m|d9`x{ zQs%1I#kF+vXs(;uHgqQ>v=6YWD|)GkgOB~7p{Ky1VL%o&K93KRt8mFA4;kvHUm1$k z217#aGUKZHgBe%Ufv>ii@tWFX=ri?bQT@Wu=ju0xq*`N$tCcCW&d?X?cZR-K`?pkY zQYnV^)Dc79sY8bTR(~=huO2hhRa#_I`+p(`g!*Qfo8@5}^F K126b`z5W9bw&@Z8 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 WMcursor* QZ_CreateWMCursor (_THIS, Uint8 *data, Uint8 *mask, 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; } }