X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3b5023b99a2a78f4f328175297412e21d1917458..a71dec776e22b9bdaa73027d67ec5c0c7d0b21df:/src/mac/carbon/mediactrl.cpp?ds=inline diff --git a/src/mac/carbon/mediactrl.cpp b/src/mac/carbon/mediactrl.cpp index 497cb3cc81..d41c30cf9b 100644 --- a/src/mac/carbon/mediactrl.cpp +++ b/src/mac/carbon/mediactrl.cpp @@ -118,7 +118,11 @@ public: void FinishLoad(); wxSize m_bestSize; //Original movie size +#ifdef __WXMAC_OSX__ struct MovieType** m_movie; //QT Movie handle/instance +#else + Movie m_movie ; +#endif wxControl* m_ctrl; //Parent control bool m_bVideo; //Whether or not we have video class _wxQTTimer* m_timer; //Timer for streaming the movie @@ -257,17 +261,21 @@ bool wxQTMediaBackend::CreateControl(wxControl* ctrl, wxWindow* parent, if ( ! #if wxUSE_CREATEMOVIECONTROL - ctrl->wxControl::Create(parent, id, pos, size, - m_ctrl->MacRemoveBordersFromStyle(style), - validator, name) -#else ctrl->wxWindow::Create(parent, id, pos, size, m_ctrl->MacRemoveBordersFromStyle(style), name) +#else + ctrl->wxControl::Create(parent, id, pos, size, + m_ctrl->MacRemoveBordersFromStyle(style), + validator, name) #endif ) return false; +#if wxUSE_VALIDATORS + ctrl->SetValidator(validator); +#endif + m_ctrl = ctrl; return true; } @@ -290,6 +298,12 @@ bool wxQTMediaBackend::Load(const wxString& fileName) short movieResFile; FSSpec sfFile; + //FIXME:wxMacFilename2FSSpec crashes on empty string - + //does it crash on other strings too and should this + //"fix" be put in the carbon wxSound? + if (fileName.empty()) + return false; + wxMacFilename2FSSpec( fileName , &sfFile ); if (OpenMovieFile (&sfFile, &movieResFile, fsRdPerm) != noErr) @@ -401,9 +415,16 @@ void wxQTMediaBackend::FinishLoad() //Native CreateMovieControl QT control (Thanks to Kevin Olliver's //wxQTMovie for some of this). // + #define GetControlPeer(whatever) ctrl->m_peer + wxMediaCtrl* ctrl = (wxMediaCtrl*) m_ctrl; Rect bounds = wxMacGetBoundsForControl(m_ctrl, m_ctrl->GetPosition(), m_ctrl->GetSize()); + + //Dispose of old control for new one + if (GetControlPeer(m_ctrl) && GetControlPeer(m_ctrl)->Ok() ) + GetControlPeer(m_ctrl)->Dispose(); + //Options- //kMovieControlOptionXXX //HideController - hide the movie controller @@ -414,7 +435,7 @@ void wxQTMediaBackend::FinishLoad() //ManuallyIdled - app handles movie idling rather than internal timer event loop ::CreateMovieControl( (WindowRef) - m_ctrl->MacGetTopLevelWindowRef(), //parent + ctrl->MacGetTopLevelWindowRef(), //parent &bounds, //control bounds m_movie, //movie handle kMovieControlOptionHideController @@ -422,10 +443,9 @@ void wxQTMediaBackend::FinishLoad() | kMovieControlOptionSetKeysEnabled // | kMovieControlOptionManuallyIdled , //flags - GetControlPeer(m_ctrl)->GetControlRefAddr() ); + ctrl->m_peer->GetControlRefAddr() ); - ::EmbedControl(GetControlPeer(m_ctrl)->GetControlRef(), - (ControlRef) m_ctrl->GetParent()->GetHandle()); + ::EmbedControl(ctrl->m_peer->GetControlRef(), (ControlRef)ctrl->GetParent()->GetHandle()); #else // //"Emulation" @@ -595,7 +615,7 @@ void wxQTMediaBackend::Cleanup() m_timer = NULL; #if wxUSE_CREATEMOVIECONTROL - DisposeControl(GetControlPeer(m_ctrl)->GetControlRef()); + DisposeControl(((wxMediaCtrl*)m_ctrl)->m_peer->GetControlRef()); #endif StopMovie(m_movie); @@ -615,8 +635,8 @@ wxSize wxQTMediaBackend::GetVideoSize() const //--------------------------------------------------------------------------- // wxQTMediaBackend::Move // -// If not using a native 10.2 QT control performs some emulated window -// movement stuff +// We need to do this even when using native qt control because +// CreateMovieControl is broken in this regard... //--------------------------------------------------------------------------- void wxQTMediaBackend::Move(int x, int y, int w, int h) { @@ -633,12 +653,21 @@ void wxQTMediaBackend::Move(int x, int y, int w, int h) ::SetMovieBox(m_movie, &theRect); wxASSERT(::GetMoviesError() == noErr); } +#else + if(m_timer && m_ctrl) + { + m_ctrl->GetParent()->MacWindowToRootWindow(&x, &y); + + ::MoveControl( (ControlRef) m_ctrl->GetHandle(), x, y ); + m_ctrl->GetParent()->Refresh(); + m_ctrl->GetParent()->Update(); + } #endif } //in source file that contains stuff you don't directly use -#include +#include "wx/html/forcelnk.h" FORCE_LINK_ME(basewxmediabackends); #endif //wxUSE_MEDIACTRL