]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/mediactrl.cpp
must be static of course, otherwise items just get appended for every menu-build
[wxWidgets.git] / src / mac / carbon / mediactrl.cpp
index 497cb3cc81a901f121f37f9463bff5f0a5a24f67..d41c30cf9b69d5341932fc2b50e78896d4894630 100644 (file)
@@ -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 <wx/html/forcelnk.h>
+#include "wx/html/forcelnk.h"
 FORCE_LINK_ME(basewxmediabackends);
 
 #endif //wxUSE_MEDIACTRL