X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ff4aedc55481dfb2bf3ddfc9a604189809af79d6..ede3a6d68af66772b4f5f94208b4126bab566cc8:/src/common/mediactrlcmn.cpp?ds=sidebyside diff --git a/src/common/mediactrlcmn.cpp b/src/common/mediactrlcmn.cpp index 53ba95509a..074777d486 100644 --- a/src/common/mediactrlcmn.cpp +++ b/src/common/mediactrlcmn.cpp @@ -41,7 +41,7 @@ //=========================================================================== // // Implementation -// +// //=========================================================================== //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -67,17 +67,17 @@ DEFINE_EVENT_TYPE(wxEVT_MEDIA_STOP); // Searches for a backend that is installed on the system (backends // starting with lower characters in the alphabet are given priority), // and creates the control from it -// +// // This searches by searching the global RTTI hashtable, class by class, // attempting to call CreateControl on each one found that is a derivative -// of wxMediaBackend - if it succeededs Create returns true, otherwise +// of wxMediaBackend - if it succeeded Create returns true, otherwise // it keeps iterating through the hashmap. //--------------------------------------------------------------------------- bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, const wxString& fileName, - const wxPoint& pos, + const wxPoint& pos, const wxSize& size, - long style, + long style, const wxString& szBackend, const wxValidator& validator, const wxString& name) @@ -93,7 +93,7 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, if (!fileName.empty()) { - if (!m_imp->Load(fileName)) + if (!Load(fileName)) { delete m_imp; m_imp = NULL; @@ -101,31 +101,36 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, } } + SetBestFittingSize(size); return true; } else { wxClassInfo::sm_classTable->BeginFind(); - wxClassInfo* classInfo = NextBackend(); + wxClassInfo* classInfo; - while(classInfo) + while((classInfo = NextBackend()) != NULL) { if(!DoCreate(classInfo, parent, id, pos, size, style, validator, name)) - continue; + continue; if (!fileName.empty()) { - if (m_imp->Load(fileName)) + if (Load(fileName)) + { + SetBestFittingSize(size); return true; + } else delete m_imp; } else + { + SetBestFittingSize(size); return true; - - classInfo = NextBackend(); + } } m_imp = NULL; @@ -135,9 +140,9 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, const wxURI& location, - const wxPoint& pos, + const wxPoint& pos, const wxSize& size, - long style, + long style, const wxString& szBackend, const wxValidator& validator, const wxString& name) @@ -151,33 +156,35 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, return false; } - if (!m_imp->Load(location)) + if (!Load(location)) { delete m_imp; m_imp = NULL; return false; } + SetBestFittingSize(size); return true; } else { wxClassInfo::sm_classTable->BeginFind(); - wxClassInfo* classInfo = NextBackend(); + wxClassInfo* classInfo; - while(classInfo) + while((classInfo = NextBackend()) != NULL) { if(!DoCreate(classInfo, parent, id, pos, size, style, validator, name)) - continue; + continue; - if (m_imp->Load(location)) + if (Load(location)) + { + SetBestFittingSize(size); return true; + } else delete m_imp; - - classInfo = NextBackend(); } m_imp = NULL; @@ -192,24 +199,20 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, //--------------------------------------------------------------------------- bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, wxWindow* parent, wxWindowID id, - const wxPoint& pos, + const wxPoint& pos, const wxSize& size, - long style, + long style, const wxValidator& validator, const wxString& name) { m_imp = (wxMediaBackend*)classInfo->CreateObject(); - + if( m_imp->CreateControl(this, parent, id, pos, size, style, validator, name) ) { - this->Connect(GetId(), wxEVT_MEDIA_FINISHED, - (wxObjectEventFunction) (wxEventFunction) - (wxMediaEventFunction) - &wxMediaCtrl::OnMediaFinished); return true; } - + delete m_imp; return false; } @@ -221,7 +224,7 @@ bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, // Search through the RTTI hashmap one at a // time, attempting to create each derivative // of wxMediaBackend -// +// // // STL isn't compatable with and will have a compilation error // on a wxNode, however, wxHashTable::compatibility_iterator is @@ -290,12 +293,12 @@ bool wxMediaCtrl::Load(const wxURI& location) // wxMediaCtrl::Stop // wxMediaCtrl::GetPlaybackRate // wxMediaCtrl::SetPlaybackRate -// wxMediaCtrl::SetPosition -// wxMediaCtrl::GetPosition -// wxMediaCtrl::GetDuration +// wxMediaCtrl::Seek --> SetPosition +// wxMediaCtrl::Tell --> GetPosition +// wxMediaCtrl::Length --> GetDuration // wxMediaCtrl::GetState // wxMediaCtrl::DoGetBestSize -// +// // 1) Check to see whether the backend exists and is loading // 2) Call the backend's version of the method, returning success // if the backend's version succeeds @@ -335,25 +338,43 @@ bool wxMediaCtrl::SetPlaybackRate(double dRate) return false; } -bool wxMediaCtrl::SetPosition(wxLongLong where) +wxFileOffset wxMediaCtrl::Seek(wxFileOffset where, wxSeekMode mode) { - if(m_imp && m_bLoaded) - return m_imp->SetPosition(where); - return false; + wxFileOffset offset; + + switch (mode) + { + case wxFromStart: + offset = where; + break; + case wxFromEnd: + offset = Length() - where; + break; +// case wxFromCurrent: + default: + offset = Tell() + where; + break; + } + + if(m_imp && m_bLoaded && m_imp->SetPosition(offset)) + return offset; + return wxInvalidOffset; } -wxLongLong wxMediaCtrl::GetPosition() +wxFileOffset wxMediaCtrl::Tell() { + //FIXME if(m_imp && m_bLoaded) - return m_imp->GetPosition(); - return 0; + return (wxFileOffset) m_imp->GetPosition().ToLong(); + return wxInvalidOffset; } -wxLongLong wxMediaCtrl::GetDuration() +wxFileOffset wxMediaCtrl::Length() { + //FIXME if(m_imp && m_bLoaded) - return m_imp->GetDuration(); - return 0; + return (wxFileOffset) m_imp->GetDuration().ToLong(); + return wxInvalidOffset; } wxMediaState wxMediaCtrl::GetState() @@ -372,7 +393,7 @@ wxSize wxMediaCtrl::DoGetBestSize() const //--------------------------------------------------------------------------- // wxMediaCtrl::DoMoveWindow -// +// // 1) Call parent's version so that our control's window moves where // it's supposed to // 2) If the backend exists and is loaded, move the video @@ -386,32 +407,10 @@ void wxMediaCtrl::DoMoveWindow(int x, int y, int w, int h) m_imp->Move(x, y, w, h); } -void wxMediaCtrl::Loop(bool bLoop) -{ - m_bLoop = bLoop; -} - -bool wxMediaCtrl::IsLooped() -{ - return m_bLoop; -} - -void wxMediaCtrl::OnMediaFinished(const wxMediaEvent& WXUNUSED(evt)) -{ - if(m_bLoop) - { -#ifdef __WXDEBUG__ - wxASSERT( Play() ); -#else - Play(); -#endif - } -} - //DARWIN gcc compiler badly screwed up - needs destructor impl in source wxMediaBackend::~wxMediaBackend() { } -#include +#include "wx/html/forcelnk.h" FORCE_LINK(basewxmediabackends); //---------------------------------------------------------------------------