X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a2b772607a87ffe6fe9af8c0b64b7259ef10a4a4..bf473da729e2be34f890d8b9c9af4a4143f1647b:/src/mac/carbon/sound.cpp diff --git a/src/mac/carbon/sound.cpp b/src/mac/carbon/sound.cpp index 1911d62d7f..9af87b7e0e 100644 --- a/src/mac/carbon/sound.cpp +++ b/src/mac/carbon/sound.cpp @@ -2,16 +2,14 @@ // Name: sound.cpp // Purpose: wxSound class implementation: optional // Author: Ryan Norton -// Modified by: +// Modified by: Stefan Csomor // Created: 1998-01-01 // RCS-ID: $Id$ -// Copyright: (c) Ryan Norton, Stefan Csomor +// Copyright: (c) Ryan Norton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "sound.h" -#endif +#include "wx/wxprec.h" #include "wx/object.h" #include "wx/string.h" @@ -19,6 +17,7 @@ #include "wx/file.h" #include "wx/sound.h" #include "wx/timer.h" +#include "wx/intl.h" #if wxUSE_SOUND @@ -42,9 +41,11 @@ #ifdef __WXMAC__ #include "wx/mac/uma.h" +#ifndef __DARWIN__ #include #include #endif +#endif #if defined __WXMAC__ && defined __DARWIN__/*TARGET_CARBON*/ #ifdef __APPLE_CC__ @@ -61,7 +62,11 @@ #include #endif +#ifndef __DARWIN__ #include +#else +#include +#endif //Time between timer calls #define MOVIE_DELAY 100 @@ -89,7 +94,7 @@ public: DisposeMovie(m_movie); Stop(); - //Note that ExitMovies() is not neccessary, but + //Note that ExitMovies() is not necessary, but //the docs are fuzzy on whether or not TerminateQTML is ExitMovies(); @@ -222,7 +227,7 @@ inline bool wxInitQT () int nError; //-2093 no dll if ((nError = InitializeQTML(0)) != noErr) - wxLogSysError(wxString::Format("Couldn't Initialize Quicktime-%i", nError)); + wxLogSysError(wxString::Format(wxT("Couldn't Initialize Quicktime-%i"), nError)); #endif EnterMovies(); return true; @@ -376,6 +381,17 @@ bool wxSound::DoPlay(unsigned flags) const return false; OSErr err = noErr ; +//NB: RN: Stefan - I think the 10.3 path functions are broken if kQTNativeDefaultPathStyle is +//going to trigger a warning every time it is used - where its _supposed to be used_!! +//(kQTNativePathStyle is negative but the function argument is unsigned!) +//../src/mac/carbon/sound.cpp: In member function `virtual bool +// wxSound::DoPlay(unsigned int) const': +//../src/mac/carbon/sound.cpp:387: warning: passing negative value ` +// kQTNativeDefaultPathStyle' for argument passing 2 of `OSErr +// QTNewDataReferenceFromFullPathCFString(const __CFString*, long unsigned int, +// long unsigned int, char***, OSType*)' +//../src/mac/carbon/sound.cpp:387: warning: argument of negative value ` +// kQTNativeDefaultPathStyle' to `long unsigned int' #if defined( __WXMAC__ ) && TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2 ) if ( UMAGetSystemVersion() >= 0x1030 ) { @@ -383,11 +399,17 @@ bool wxSound::DoPlay(unsigned flags) const OSType dataRefType; err = QTNewDataReferenceFromFullPathCFString(wxMacCFStringHolder(m_sndname,wxLocale::GetSystemEncoding()), - kQTNativeDefaultPathStyle, 0, &dataRef, &dataRefType); + //FIXME: Why does this have to be casted? + (unsigned int)kQTNativeDefaultPathStyle, + //FIXME: End + 0, &dataRef, &dataRefType); - if (NULL != dataRef) + wxASSERT(err == noErr); + + if (NULL != dataRef || err != noErr) { err = NewMovieFromDataRef( &movie, newMovieDontAskUnresolvedDataRefs , NULL, dataRef, dataRefType ); + wxASSERT(err == noErr); DisposeHandle(dataRef); } } @@ -402,8 +424,10 @@ bool wxSound::DoPlay(unsigned flags) const int nError; if ((nError = NativePathNameToFSSpec ((char*) m_sndname.c_str(), &sfFile, 0)) != noErr) { +/* wxLogSysError(wxString::Format(wxT("File:%s does not exist\nError:%i"), m_sndname.c_str(), nError)); +*/ return false; } #endif @@ -456,8 +480,10 @@ bool wxSound::DoPlay(unsigned flags) const wxASSERT_MSG(!(flags & wxSOUND_LOOP), wxT("Can't loop and play syncronously at the same time")); //Play movie until it ends, then exit + //Note that due to quicktime caching this may not always + //work 100% correctly while (!IsMovieDone(movie)) - MoviesTask(movie, 0); + MoviesTask(movie, 1); DisposeMovie(movie); }