From 924ec820df1a531a58b9fc582af1ac4bbf114fa0 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 7 Jun 2001 14:28:11 +0000 Subject: [PATCH] Added initial support for Quartz video (thanks Darrell!) --- BUGS | 43 +- README.MacOSX | 79 ++- configure.in | 5 + docs.html | 1 + include/SDL_main.h | 2 +- include/SDL_video.h | 4 + src/audio/macrom/SDL_romaudio.c | 28 +- src/main/macosx/SDLMain.h | 8 + src/main/macosx/SDLMain.m | 88 ++++ src/main/macosx/exports/Makefile | 35 ++ src/main/macosx/exports/SDL.x | 177 +++++++ src/main/macosx/exports/gendef.pl | 20 + src/video/SDL_sysvideo.h | 6 +- src/video/SDL_video.c | 3 + src/video/macrom/SDL_romvideo.c | 2 +- src/video/quartz/Makefile.am | 14 + src/video/quartz/SDL_QuartzEvents.m | 368 ++++++++++++++ src/video/quartz/SDL_QuartzKeys.h | 140 ++++++ src/video/quartz/SDL_QuartzVideo.h | 183 +++++++ src/video/quartz/SDL_QuartzVideo.m | 756 ++++++++++++++++++++++++++++ src/video/quartz/SDL_QuartzWM.m | 175 +++++++ src/video/quartz/SDL_QuartzWindow.m | 25 + test/testtypes.c | 2 +- 23 files changed, 2131 insertions(+), 33 deletions(-) create mode 100644 src/main/macosx/SDLMain.h create mode 100644 src/main/macosx/SDLMain.m create mode 100644 src/main/macosx/exports/Makefile create mode 100644 src/main/macosx/exports/SDL.x create mode 100644 src/main/macosx/exports/gendef.pl create mode 100644 src/video/quartz/Makefile.am create mode 100644 src/video/quartz/SDL_QuartzEvents.m create mode 100644 src/video/quartz/SDL_QuartzKeys.h create mode 100644 src/video/quartz/SDL_QuartzVideo.h create mode 100644 src/video/quartz/SDL_QuartzVideo.m create mode 100644 src/video/quartz/SDL_QuartzWM.m create mode 100644 src/video/quartz/SDL_QuartzWindow.m diff --git a/BUGS b/BUGS index 0636142f2..bded19035 100644 --- a/BUGS +++ b/BUGS @@ -70,22 +70,35 @@ MacOS: Not all of the keys are properly recognized on the keyboard. MacOS X: - Fullscreen mode doesn't work - it requires the QuickTime framework - and that the new SDL window gets raised to the top of the Z order. - + Joystick and CD-ROM functions are not implemented yet. + + Closing window from window's close widget not implemented yet. + + Minimizing the window erases the framebuffer to the pinstripe pattern. + + Window may not close when unsetting video mode and resetting. + + Depth switching for windowed mode isn't implemented yet. + Palette handling isn't implemented in windowed mode yet. - - Native sound and video routines are not finished, though Carbon - seems to work fairly well. - - Joysticks and CD-ROM functions are not implemented yet. - - SDL_WM_GrabInput() is not implemented. - Does anyone know how to do this? SDL_WM_GrabInput() is designed - to prevent the user from switching input and mouse focus away from - the SDL application. - - Continuous relative mouse motion is not implemented. + + Command-line arguments Dialog is not implemented yet. + + Fullscreen drawing has some artifacts. + + Fullscreen window covers *all* other windows - even force quit. + + Fullscreen OpenGL for the software renderer is broken. + + Some OpenGL parameters are not accounted for, for example color bits customization. + + Getting OpenGL context parameters is not implemented. + + Continuous mouse motion perhaps is not as smooth as it should be. + + SDL_WM_GrabInput() is implemented, but it "freezes" the hardware + cursor in the center of the window/screen. Also, mouse moved events + are not generated, and the keyboard cannot be grabbed. Not all of the keys are properly recognized on the keyboard. diff --git a/README.MacOSX b/README.MacOSX index 0295bb3a4..745103f93 100644 --- a/README.MacOSX +++ b/README.MacOSX @@ -34,11 +34,80 @@ and linking, respectively: sdl-config knows about the linking path and -framework, so it's recommended to use it to fill in your Makefile variables. -[Add instructions for how to build using PB] +============================================================================== +Using the Simple DirectMedia Layer with Project Builder +============================================================================== + +These instructions are for using Apple's Project Builder IDE to build SDL applications. + +- Building the Framework + +The SDL Library is packaged as a framework bundle, an organized +relocatable folder heirarchy of executible code, interface headers, +and additional resources. For practical purposes, you can think of a +framework as a more user and system-friendly shared library, whose library +file behaves more or less like a standard UNIX shared library. + +To build the framework, simply open the framework project and build it. +By default, the framework bundle "SDL.framework" is installed in +~/Library/Frameworks. Therefore, the testers and project stationary expect +it to be located there. However, it will function the same in any of the +following locations: + + ~/Library/Frameworks + /Local/Library/Frameworks + /System/Library/Frameworks + +- Build Options + There are two "Build Styles" (See the "Targets" tab) for SDL. + "Deployment" should be used if you aren't tweaking the SDL library. + "Development" should be used to debug SDL apps or the library itself. + +- Building the Testers + Open the SDLTest project and build away! + +- Using the Project Stationary + Copy the stationary to the indicated folders to access it from + the "New Project" and "Add target" menus. What could be easier? -As of this writing (Sep 2000), OS X is in public beta. This means -that while most of the APIs are frozen, things are still subject to -change, and many of the known problems will be resolved before the -final release comes out. +- Setting up a new project by hand + Some of you won't want to use the Stationary so I'll give some tips: + * Create a new "Cocoa Application" + * Add src/main/macosx/SDLMain.m , .h and .nib to your project + * Remove "main.c" from your project + * Remove "MainMenu.nib" from your project + * Add "$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path + * Add "$(HOME)/Library/Frameworks" to the frameworks search path + * Add "-framework SDL" to the "OTHER_LDFLAGS" variable + * Set the "Main Nib File" under "Application Settings" to "SDLMain.nib" + * Add your files + * Clean and build +- Building from command line + Use pbxbuild in the same directory as your .pbproj file + +- Running your app + You can send command line args to your app by either invoking it from + the command line (in *.app/Contents/MacOS) or by entering them in the + "Executibles" panel of the target settings. + +- Implementation Notes + Some things that may be of interest about how it all works... + * Working directory + As defined in the SDLMain.m file, the working directory of your SDL app + is by default set to its parent. You may wish to change this to better + suit your needs. + * You have a Cocoa App! + Your SDL app is essentially a Cocoa application. When your app + starts up and the libraries finish loading, a Cocoa procedure is called, + which sets up the working directory and calls your main() method. + You are free to modify your Cocoa app with generally no consequence + to SDL. You cannot, however, easily change the SDL window itself. + Functionality may be added in the future to help this. + * My development setup: + I am using version 1.0.1 (v63.0) of Project Builder on MacOS X 10.0.3, + from the Developer Tools CD for May 2001. + As of May 31 2001, Apple hasn't released this version of the tools to the public, + but I expect that things will still work on older versions. + Known bugs are listed in the file "BUGS" diff --git a/configure.in b/configure.in index d2ba61bf2..1b4d7ccb8 100644 --- a/configure.in +++ b/configure.in @@ -63,6 +63,10 @@ case "$target" in *-*-linux*) AC_PROG_CXX ;; + *-*-darwin*) + OBJC="???" + AC_SUBST(OBJC) + ;; esac AC_PROG_INSTALL AC_FUNC_ALLOCA @@ -1979,6 +1983,7 @@ src/video/ggi/Makefile src/video/maccommon/Makefile src/video/macdsp/Makefile src/video/macrom/Makefile +src/video/quartz/Makefile src/video/svga/Makefile src/video/aalib/Makefile src/video/wincommon/Makefile diff --git a/docs.html b/docs.html index ea26c74e3..6d4f52684 100644 --- a/docs.html +++ b/docs.html @@ -16,6 +16,7 @@

Major changes since SDL 1.0.0: