Enable the wxMediaCtrl backend for wxOSX-cocoa in the build and fix some bugs that were causing it to not send the EVT_MEDIA_LOADED events and to not have a valid best size set. Closes #13065

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72282 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2012-08-02 20:25:16 +00:00
parent 440ddb750f
commit 0a898d4ca0
5 changed files with 63 additions and 26 deletions

View File

@@ -6584,7 +6584,7 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_1 = \
monodll_taskbarx11.o
@COND_TOOLKIT_X11@__ADVANCED_PLATFORM_SRC_OBJECTS_1 = $(COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_1)
@COND_TOOLKIT_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS = \
@COND_TOOLKIT_COCOA@ monodll_cocoa_mediactrl.o
@COND_TOOLKIT_COCOA@ monodll_src_cocoa_mediactrl.o
@COND_TOOLKIT_GTK@__MEDIA_PLATFORM_SRC_OBJECTS = monodll_unix_mediactrl.o
@COND_TOOLKIT_MOTIF@__MEDIA_PLATFORM_SRC_OBJECTS = monodll_unix_mediactrl.o
@COND_TOOLKIT_MSW@__MEDIA_PLATFORM_SRC_OBJECTS = \
@@ -6592,7 +6592,8 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_1 = \
@COND_TOOLKIT_MSW@ monodll_mediactrl_qt.o
@COND_TOOLKIT_OSX_CARBON@__MEDIA_PLATFORM_SRC_OBJECTS \
@COND_TOOLKIT_OSX_CARBON@ = monodll_carbon_mediactrl.o
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS =
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS \
@COND_TOOLKIT_OSX_COCOA@ = monodll_osx_cocoa_mediactrl.o
@COND_TOOLKIT_OSX_IPHONE@__MEDIA_PLATFORM_SRC_OBJECTS =
@COND_TOOLKIT_PM@__MEDIA_PLATFORM_SRC_OBJECTS =
@COND_TOOLKIT_WINCE@__MEDIA_PLATFORM_SRC_OBJECTS = \
@@ -8786,7 +8787,7 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_3 = \
monolib_taskbarx11.o
@COND_TOOLKIT_X11@__ADVANCED_PLATFORM_SRC_OBJECTS_3 = $(COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_3)
@COND_TOOLKIT_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_1 = \
@COND_TOOLKIT_COCOA@ monolib_cocoa_mediactrl.o
@COND_TOOLKIT_COCOA@ monolib_src_cocoa_mediactrl.o
@COND_TOOLKIT_GTK@__MEDIA_PLATFORM_SRC_OBJECTS_1 = \
@COND_TOOLKIT_GTK@ monolib_unix_mediactrl.o
@COND_TOOLKIT_MOTIF@__MEDIA_PLATFORM_SRC_OBJECTS_1 = \
@@ -8796,7 +8797,8 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_3 = \
@COND_TOOLKIT_MSW@ monolib_mediactrl_qt.o
@COND_TOOLKIT_OSX_CARBON@__MEDIA_PLATFORM_SRC_OBJECTS_1 \
@COND_TOOLKIT_OSX_CARBON@ = monolib_carbon_mediactrl.o
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_1 =
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_1 \
@COND_TOOLKIT_OSX_COCOA@ = monolib_osx_cocoa_mediactrl.o
@COND_TOOLKIT_OSX_IPHONE@__MEDIA_PLATFORM_SRC_OBJECTS_1 =
@COND_TOOLKIT_PM@__MEDIA_PLATFORM_SRC_OBJECTS_1 =
@COND_TOOLKIT_WINCE@__MEDIA_PLATFORM_SRC_OBJECTS_1 = \
@@ -13257,7 +13259,7 @@ COND_USE_SOVERSOLARIS_1___mediadll___so_symlinks_uninst_cmd = rm -f \
@COND_USE_SOVERSOLARIS_1@__mediadll___so_symlinks_uninst_cmd = $(COND_USE_SOVERSOLARIS_1___mediadll___so_symlinks_uninst_cmd)
@COND_PLATFORM_WIN32_1@__mediadll___win32rc = mediadll_version_rc.o
@COND_TOOLKIT_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_2 = \
@COND_TOOLKIT_COCOA@ mediadll_cocoa_mediactrl.o
@COND_TOOLKIT_COCOA@ mediadll_src_cocoa_mediactrl.o
@COND_TOOLKIT_GTK@__MEDIA_PLATFORM_SRC_OBJECTS_2 = \
@COND_TOOLKIT_GTK@ mediadll_unix_mediactrl.o
@COND_TOOLKIT_MOTIF@__MEDIA_PLATFORM_SRC_OBJECTS_2 = \
@@ -13269,7 +13271,8 @@ COND_TOOLKIT_MSW___MEDIA_PLATFORM_SRC_OBJECTS_2 = \
@COND_TOOLKIT_MSW@__MEDIA_PLATFORM_SRC_OBJECTS_2 = $(COND_TOOLKIT_MSW___MEDIA_PLATFORM_SRC_OBJECTS_2)
@COND_TOOLKIT_OSX_CARBON@__MEDIA_PLATFORM_SRC_OBJECTS_2 \
@COND_TOOLKIT_OSX_CARBON@ = mediadll_carbon_mediactrl.o
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_2 =
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_2 \
@COND_TOOLKIT_OSX_COCOA@ = mediadll_osx_cocoa_mediactrl.o
@COND_TOOLKIT_OSX_IPHONE@__MEDIA_PLATFORM_SRC_OBJECTS_2 =
@COND_TOOLKIT_PM@__MEDIA_PLATFORM_SRC_OBJECTS_2 =
@COND_TOOLKIT_WINCE@__MEDIA_PLATFORM_SRC_OBJECTS_2 = \
@@ -13290,7 +13293,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1___medialib___depname = \
@COND_USE_PCH_1@_____pch_wxprec_medialib_wx_wxprec_h_gch___depname \
@COND_USE_PCH_1@ = ./.pch/wxprec_medialib/wx/wxprec.h.gch
@COND_TOOLKIT_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_3 = \
@COND_TOOLKIT_COCOA@ medialib_cocoa_mediactrl.o
@COND_TOOLKIT_COCOA@ medialib_src_cocoa_mediactrl.o
@COND_TOOLKIT_GTK@__MEDIA_PLATFORM_SRC_OBJECTS_3 = \
@COND_TOOLKIT_GTK@ medialib_unix_mediactrl.o
@COND_TOOLKIT_MOTIF@__MEDIA_PLATFORM_SRC_OBJECTS_3 = \
@@ -13302,7 +13305,8 @@ COND_TOOLKIT_MSW___MEDIA_PLATFORM_SRC_OBJECTS_3 = \
@COND_TOOLKIT_MSW@__MEDIA_PLATFORM_SRC_OBJECTS_3 = $(COND_TOOLKIT_MSW___MEDIA_PLATFORM_SRC_OBJECTS_3)
@COND_TOOLKIT_OSX_CARBON@__MEDIA_PLATFORM_SRC_OBJECTS_3 \
@COND_TOOLKIT_OSX_CARBON@ = medialib_carbon_mediactrl.o
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_3 =
@COND_TOOLKIT_OSX_COCOA@__MEDIA_PLATFORM_SRC_OBJECTS_3 \
@COND_TOOLKIT_OSX_COCOA@ = medialib_osx_cocoa_mediactrl.o
@COND_TOOLKIT_OSX_IPHONE@__MEDIA_PLATFORM_SRC_OBJECTS_3 =
@COND_TOOLKIT_PM@__MEDIA_PLATFORM_SRC_OBJECTS_3 =
@COND_TOOLKIT_WINCE@__MEDIA_PLATFORM_SRC_OBJECTS_3 = \
@@ -18055,7 +18059,10 @@ monodll_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MONODLL_ODEP)
monodll_carbon_mediactrl.o: $(srcdir)/src/osx/carbon/mediactrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/mediactrl.cpp
monodll_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MONODLL_ODEP)
monodll_osx_cocoa_mediactrl.o: $(srcdir)/src/osx/cocoa/mediactrl.mm $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/mediactrl.mm
monodll_src_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/cocoa/mediactrl.mm
monodll_helpbest.o: $(srcdir)/src/msw/helpbest.cpp $(MONODLL_ODEP)
@@ -23755,7 +23762,10 @@ monolib_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MONOLIB_ODEP)
monolib_carbon_mediactrl.o: $(srcdir)/src/osx/carbon/mediactrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/carbon/mediactrl.cpp
monolib_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MONOLIB_ODEP)
monolib_osx_cocoa_mediactrl.o: $(srcdir)/src/osx/cocoa/mediactrl.mm $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/mediactrl.mm
monolib_src_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/cocoa/mediactrl.mm
monolib_helpbest.o: $(srcdir)/src/msw/helpbest.cpp $(MONOLIB_ODEP)
@@ -38461,7 +38471,10 @@ mediadll_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MEDIADLL_ODEP)
mediadll_carbon_mediactrl.o: $(srcdir)/src/osx/carbon/mediactrl.cpp $(MEDIADLL_ODEP)
$(CXXC) -c -o $@ $(MEDIADLL_CXXFLAGS) $(srcdir)/src/osx/carbon/mediactrl.cpp
mediadll_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MEDIADLL_ODEP)
mediadll_osx_cocoa_mediactrl.o: $(srcdir)/src/osx/cocoa/mediactrl.mm $(MEDIADLL_ODEP)
$(CXXC) -c -o $@ $(MEDIADLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/mediactrl.mm
mediadll_src_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MEDIADLL_ODEP)
$(CXXC) -c -o $@ $(MEDIADLL_OBJCXXFLAGS) $(srcdir)/src/cocoa/mediactrl.mm
@COND_TOOLKIT_MSW@mediadll_mediactrl_am.o: $(srcdir)/src/msw/mediactrl_am.cpp $(MEDIADLL_ODEP)
@@ -38497,7 +38510,10 @@ medialib_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MEDIALIB_ODEP)
medialib_carbon_mediactrl.o: $(srcdir)/src/osx/carbon/mediactrl.cpp $(MEDIALIB_ODEP)
$(CXXC) -c -o $@ $(MEDIALIB_CXXFLAGS) $(srcdir)/src/osx/carbon/mediactrl.cpp
medialib_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MEDIALIB_ODEP)
medialib_osx_cocoa_mediactrl.o: $(srcdir)/src/osx/cocoa/mediactrl.mm $(MEDIALIB_ODEP)
$(CXXC) -c -o $@ $(MEDIALIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/mediactrl.mm
medialib_src_cocoa_mediactrl.o: $(srcdir)/src/cocoa/mediactrl.mm $(MEDIALIB_ODEP)
$(CXXC) -c -o $@ $(MEDIALIB_OBJCXXFLAGS) $(srcdir)/src/cocoa/mediactrl.mm
@COND_TOOLKIT_MSW@medialib_mediactrl_am.o: $(srcdir)/src/msw/mediactrl_am.cpp $(MEDIALIB_ODEP)

View File

@@ -3217,7 +3217,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
</set>
<set var="MEDIA_OSX_COCOA_SRC" hints="files">
<!-- src/osx/cocoa/mediactrl.mm -->
src/osx/cocoa/mediactrl.mm
</set>
<set var="MEDIA_OSX_COCOA_HDR" hints="files">
</set>

3
configure vendored
View File

@@ -37052,6 +37052,9 @@ fi
else
USE_MEDIA=0
fi
elif test "$wxUSE_MAC" = 1; then
GST_LIBS="-framework QTKit"
fi
if test $USE_MEDIA = 1; then

View File

@@ -7562,6 +7562,11 @@ if test "$wxUSE_MEDIACTRL" = "yes" -o "$wxUSE_MEDIACTRL" = "auto"; then
else
USE_MEDIA=0
fi
elif test "$wxUSE_MAC" = 1; then
dnl We always have the necessary libraries under Mac
dnl but we need to link with it explicitly.
GST_LIBS="-framework QTKit"
fi
if test $USE_MEDIA = 1; then

View File

@@ -55,9 +55,6 @@
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
#import <AppKit/NSMovie.h>
#import <AppKit/NSMovieView.h>
class WXDLLIMPEXP_FWD_MEDIA wxQTMediaBackend;
@interface wxQTMovie : QTMovie {
@@ -191,8 +188,9 @@ private:
}
}
-(void)loadStateChanged:(QTMovie *)movie
-(void)loadStateChanged:(NSNotification *)notification
{
QTMovie *movie = [notification object];
long loadState = [[movie attributeForKey:QTMovieLoadStateAttribute] longValue];
if (loadState >= QTMovieLoadStatePlayable)
{
@@ -283,13 +281,30 @@ bool wxQTMediaBackend::Load(const wxString& fileName)
bool wxQTMediaBackend::Load(const wxURI& location)
{
wxCFStringRef uri(location.BuildURI());
[m_movie release];
wxQTMovie* movie = [[wxQTMovie alloc] initWithURL: [NSURL URLWithString: uri.AsNSString()] error: nil ];
NSURL *url = [NSURL URLWithString: uri.AsNSString()];
if (! [wxQTMovie canInitWithURL:url])
return false;
[m_movie release];
wxQTMovie* movie = [[wxQTMovie alloc] initWithURL:url error: nil ];
m_movie = movie;
[m_movie setBackend:this];
[m_movieview setMovie:movie];
if (movie != nil)
{
[m_movie setBackend:this];
[m_movieview setMovie:movie];
// If the media file is able to be loaded quickly then there may not be
// any QTMovieLoadStateDidChangeNotification message sent, so we need to
// also check the load state here and finish our initialization if it has
// been loaded.
long loadState = [[m_movie attributeForKey:QTMovieLoadStateAttribute] longValue];
if (loadState >= QTMovieLoadStateLoaded)
{
FinishLoad();
}
}
return movie != nil;
}
@@ -298,12 +313,10 @@ void wxQTMediaBackend::FinishLoad()
{
DoShowPlayerControls(m_interfaceflags);
NSRect r =[m_movieview movieBounds];
m_bestSize.x = r.size.width;
m_bestSize.y = r.size.height;
NSSize s = [[m_movie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
m_bestSize = wxSize(s.width, s.height);
NotifyMovieLoaded();
}
bool wxQTMediaBackend::Play()