X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c5191fbd2b543de54aede153c2c6f8dee29119d1..3e822cd8d0bdf04cd2c7a3dddff61dcc211f7439:/src/common/mediactrlcmn.cpp diff --git a/src/common/mediactrlcmn.cpp b/src/common/mediactrlcmn.cpp index 59a420aa81..8128dfddd3 100644 --- a/src/common/mediactrlcmn.cpp +++ b/src/common/mediactrlcmn.cpp @@ -9,6 +9,8 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +// TODO: Platform specific backend defaults? + //=========================================================================== // Definitions //=========================================================================== @@ -17,10 +19,6 @@ // Pre-compiled header stuff //--------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "mediactrl.h" -#endif - #include "wx/wxprec.h" #ifdef __BORLANDC__ @@ -48,12 +46,15 @@ // RTTI and Event implementations //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -IMPLEMENT_CLASS(wxMediaCtrl, wxControl); -IMPLEMENT_CLASS(wxMediaBackend, wxObject); -IMPLEMENT_DYNAMIC_CLASS(wxMediaEvent, wxEvent); -DEFINE_EVENT_TYPE(wxEVT_MEDIA_FINISHED); -DEFINE_EVENT_TYPE(wxEVT_MEDIA_LOADED); -DEFINE_EVENT_TYPE(wxEVT_MEDIA_STOP); +IMPLEMENT_CLASS(wxMediaCtrl, wxControl) +DEFINE_EVENT_TYPE(wxEVT_MEDIA_STATECHANGED) +DEFINE_EVENT_TYPE(wxEVT_MEDIA_PLAY) +DEFINE_EVENT_TYPE(wxEVT_MEDIA_PAUSE) +IMPLEMENT_CLASS(wxMediaBackend, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxMediaEvent, wxEvent) +DEFINE_EVENT_TYPE(wxEVT_MEDIA_FINISHED) +DEFINE_EVENT_TYPE(wxEVT_MEDIA_LOADED) +DEFINE_EVENT_TYPE(wxEVT_MEDIA_STOP) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // @@ -232,7 +233,7 @@ bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, } //--------------------------------------------------------------------------- -// wxMediaCtrl::NextBackend +// wxMediaCtrl::NextBackend (static) // // // Search through the RTTI hashmap one at a @@ -243,8 +244,7 @@ bool wxMediaCtrl::DoCreate(wxClassInfo* classInfo, // STL isn't compatible with and will have a compilation error // on a wxNode, however, wxHashTable::compatibility_iterator is // incompatible with the old 2.4 stable version - but since -// we're in 2.5 only we don't need to worry about this -// static +// we're in 2.5+ only we don't need to worry about the new version //--------------------------------------------------------------------------- wxClassInfo* wxMediaCtrl::NextBackend() { @@ -468,9 +468,80 @@ void wxMediaCtrl::DoMoveWindow(int x, int y, int w, int h) m_imp->Move(x, y, w, h); } +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// +// wxMediaBackendCommonBase +// +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +void wxMediaBackendCommonBase::NotifyMovieSizeChanged() +{ + // our best size changed after opening a new file + m_ctrl->InvalidateBestSize(); + m_ctrl->SetSize(m_ctrl->GetSize()); + + // if the parent of the control has a sizer ask it to refresh our size + wxWindow * const parent = m_ctrl->GetParent(); + if ( parent->GetSizer() ) + { + m_ctrl->GetParent()->Layout(); + m_ctrl->GetParent()->Refresh(); + m_ctrl->GetParent()->Update(); + } +} + +void wxMediaBackendCommonBase::NotifyMovieLoaded() +{ + NotifyMovieSizeChanged(); + + // notify about movie being fully loaded + QueueEvent(wxEVT_MEDIA_LOADED); +} + +bool wxMediaBackendCommonBase::SendStopEvent() +{ + wxMediaEvent theEvent(wxEVT_MEDIA_STOP, m_ctrl->GetId()); + + return !m_ctrl->ProcessEvent(theEvent) || theEvent.IsAllowed(); +} + +void wxMediaBackendCommonBase::QueueEvent(wxEventType evtType) +{ + wxMediaEvent theEvent(evtType, m_ctrl->GetId()); + m_ctrl->AddPendingEvent(theEvent); +} + +void wxMediaBackendCommonBase::QueuePlayEvent() +{ + QueueEvent(wxEVT_MEDIA_STATECHANGED); + QueueEvent(wxEVT_MEDIA_PLAY); +} + +void wxMediaBackendCommonBase::QueuePauseEvent() +{ + QueueEvent(wxEVT_MEDIA_STATECHANGED); + QueueEvent(wxEVT_MEDIA_PAUSE); +} + +void wxMediaBackendCommonBase::QueueStopEvent() +{ + QueueEvent(wxEVT_MEDIA_STATECHANGED); + QueueEvent(wxEVT_MEDIA_STOP); +} + + +// +// Force link default backends in - +// see http://wiki.wxwidgets.org/wiki.pl?RTTI +// #include "wx/html/forcelnk.h" -FORCE_LINK(basewxmediabackends); +#ifdef __WXMSW__ // MSW has huge backends so we do it seperately +FORCE_LINK(wxmediabackend_am) +FORCE_LINK(wxmediabackend_wmp10) +#else +FORCE_LINK(basewxmediabackends) +#endif //--------------------------------------------------------------------------- // End of compilation guard and of file //---------------------------------------------------------------------------