X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ff2b312fc82a30843500494235f93272d8846dc5..107d0fd493dc4d750ba18518a2eea5b93d988965:/src/common/mediactrlcmn.cpp diff --git a/src/common/mediactrlcmn.cpp b/src/common/mediactrlcmn.cpp index 6cc8e5865e..51ba32f6c8 100644 --- a/src/common/mediactrlcmn.cpp +++ b/src/common/mediactrlcmn.cpp @@ -51,8 +51,8 @@ IMPLEMENT_CLASS(wxMediaCtrl, wxControl); IMPLEMENT_CLASS(wxMediaBackend, wxObject); IMPLEMENT_DYNAMIC_CLASS(wxMediaEvent, wxEvent); -DEFINE_LOCAL_EVENT_TYPE(wxEVT_MEDIA_FINISHED); -DEFINE_LOCAL_EVENT_TYPE(wxEVT_MEDIA_STOP); +DEFINE_EVENT_TYPE(wxEVT_MEDIA_FINISHED); +DEFINE_EVENT_TYPE(wxEVT_MEDIA_STOP); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // @@ -70,7 +70,7 @@ DEFINE_LOCAL_EVENT_TYPE(wxEVT_MEDIA_STOP); // // 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, @@ -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,6 +101,7 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, } } + SetBestFittingSize(size); return true; } else @@ -117,13 +118,19 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, 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(); } @@ -151,13 +158,14 @@ 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 @@ -172,8 +180,11 @@ bool wxMediaCtrl::Create(wxWindow* parent, wxWindowID id, pos, size, style, validator, name)) continue; - if (m_imp->Load(location)) + if (Load(location)) + { + SetBestFittingSize(size); return true; + } else delete m_imp; @@ -290,9 +301,9 @@ 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 // @@ -335,25 +346,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()