diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-04-27 12:14:18 +0200 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-04-27 12:34:06 +0200 |
commit | b5529c8c457f442bfc43305becc0c02d6a09ee80 (patch) | |
tree | 1ade1fd1ce11e4d74b0007e6fd5743a14811006d /avmedia | |
parent | 4db3805a2dd2e36d9e0cb9cb7a8a9923119d3a52 (diff) |
avmedia: create a special SystemChildWindow for 3D models
Change-Id: Id5f5ba2cf72ea78506ba226b269fae59b1163858
Diffstat (limited to 'avmedia')
-rw-r--r-- | avmedia/Library_avmedia.mk | 7 | ||||
-rw-r--r-- | avmedia/source/viewer/mediawindow_impl.cxx | 53 | ||||
-rw-r--r-- | avmedia/source/viewer/mediawindow_impl.hxx | 3 |
3 files changed, 46 insertions, 17 deletions
diff --git a/avmedia/Library_avmedia.mk b/avmedia/Library_avmedia.mk index 935222798313..6dbcb532f7f1 100644 --- a/avmedia/Library_avmedia.mk +++ b/avmedia/Library_avmedia.mk @@ -23,7 +23,11 @@ $(eval $(call gb_Library_add_defs,avmedia,\ -DAVMEDIA_DLLIMPLEMENTATION \ )) -$(eval $(call gb_Library_use_external,avmedia,boost_headers)) +$(eval $(call gb_Library_use_externals,avmedia,\ + boost_headers \ + glew \ + mesa_headers \ +)) $(eval $(call gb_Library_use_libraries,avmedia,\ comphelper \ @@ -38,6 +42,7 @@ $(eval $(call gb_Library_use_libraries,avmedia,\ tl \ utl \ vcl \ + vclopengl \ $(gb_UWINAPI) \ )) diff --git a/avmedia/source/viewer/mediawindow_impl.cxx b/avmedia/source/viewer/mediawindow_impl.cxx index 515580c65df3..a84e42fe5f14 100644 --- a/avmedia/source/viewer/mediawindow_impl.cxx +++ b/avmedia/source/viewer/mediawindow_impl.cxx @@ -35,6 +35,8 @@ #include <com/sun/star/awt/SystemPointer.hpp> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/media/XManager.hpp> +#include <vcl/sysdata.hxx> +#include <vcl/opengl/OpenGLContext.hxx> using namespace ::com::sun::star; @@ -81,7 +83,15 @@ MediaChildWindow::MediaChildWindow( Window* pParent ) : { } - +MediaChildWindow::MediaChildWindow( Window* pParent, SystemWindowData* pData ) : + SystemChildWindow( pParent, 0, pData ) +{ + SetMouseTransparent( true ); + SetParentClipMode( PARENTCLIPMODE_NOCLIP ); + EnableEraseBackground( false ); + SetControlForeground(); + SetControlBackground(); +} MediaChildWindow::~MediaChildWindow() { @@ -156,16 +166,10 @@ MediaWindowImpl::MediaWindowImpl( Window* pParent, MediaWindow* pMediaWindow, bo DropTargetHelper( this ), DragSourceHelper( this ), mpMediaWindow( pMediaWindow ), - mxEventsIf( static_cast< ::cppu::OWeakObject* >( mpEvents = new MediaEventListenersImpl( maChildWindow ) ) ), - maChildWindow( this ), mpMediaWindowControl( bInternalMediaControl ? new MediaWindowControl( this ) : NULL ), mpEmptyBmpEx( NULL ), mpAudioBmpEx( NULL ) { - maChildWindow.SetBackground( Color( COL_BLACK ) ); - maChildWindow.SetHelpId( HID_AVMEDIA_PLAYERWINDOW ); - maChildWindow.Hide(); - if( mpMediaWindowControl ) { mpMediaWindowControl->SetSizePixel( mpMediaWindowControl->getMinSizePixel() ); @@ -497,17 +501,32 @@ void MediaWindowImpl::stopPlayingInternal( bool bStop ) void MediaWindowImpl::onURLChanged() { + if( m_sMimeType == AVMEDIA_MIMETYPE_COMMON ) + { + mpChildWindow.reset(new MediaChildWindow(this) ); + } + else if ( m_sMimeType == AVMEDIA_MIMETYPE_JSON ) + { + SystemWindowData aWinData = OpenGLContext::generateWinData(this); + mpChildWindow.reset(new MediaChildWindow(this,&aWinData)); + } + if( !mpChildWindow ) + return; + mpChildWindow->SetHelpId( HID_AVMEDIA_PLAYERWINDOW ); + mxEventsIf.set( static_cast< ::cppu::OWeakObject* >( mpEvents = new MediaEventListenersImpl( *mpChildWindow.get() ) ) ); + + if( mxPlayer.is() ) { uno::Sequence< uno::Any > aArgs( 3 ); uno::Reference< media::XPlayerWindow > xPlayerWindow; const Point aPoint; - const Size aSize( maChildWindow.GetSizePixel() ); + const Size aSize( mpChildWindow->GetSizePixel() ); const sal_Int32 nWndHandle = 0; aArgs[ 0 ] = uno::makeAny( nWndHandle ); aArgs[ 1 ] = uno::makeAny( awt::Rectangle( aPoint.X(), aPoint.Y(), aSize.Width(), aSize.Height() ) ); - aArgs[ 2 ] = uno::makeAny( reinterpret_cast< sal_IntPtr >( &maChildWindow ) ); + aArgs[ 2 ] = uno::makeAny( reinterpret_cast< sal_IntPtr >( mpChildWindow.get() ) ); try { @@ -532,9 +551,9 @@ void MediaWindowImpl::onURLChanged() mxPlayerWindow.clear(); if( mxPlayerWindow.is() ) - maChildWindow.Show(); + mpChildWindow->Show(); else - maChildWindow.Hide(); + mpChildWindow->Hide(); if( mpMediaWindowControl ) { @@ -557,7 +576,8 @@ void MediaWindowImpl::setPosSize( const Rectangle& rRect ) void MediaWindowImpl::setPointer( const Pointer& rPointer ) { SetPointer( rPointer ); - maChildWindow.SetPointer( rPointer ); + if( mpChildWindow ) + mpChildWindow->SetPointer( rPointer ); if( mxPlayerWindow.is() ) { @@ -598,7 +618,8 @@ void MediaWindowImpl::Resize() if( mxPlayerWindow.is() ) mxPlayerWindow->setPosSize( 0, 0, aPlayerWindowSize.Width(), aPlayerWindowSize.Height(), 0 ); - maChildWindow.SetPosSizePixel( Point( 0, 0 ), aPlayerWindowSize ); + if( mpChildWindow ) + mpChildWindow->SetPosSizePixel( Point( 0, 0 ), aPlayerWindowSize ); } @@ -651,8 +672,10 @@ void MediaWindowImpl::Paint( const Rectangle& ) pLogo = mpAudioBmpEx; } - const Point aBasePos( maChildWindow.GetPosPixel() ); - const Rectangle aVideoRect( aBasePos, maChildWindow.GetSizePixel() ); + if( !mpChildWindow ) + return; + const Point aBasePos( mpChildWindow->GetPosPixel() ); + const Rectangle aVideoRect( aBasePos, mpChildWindow->GetSizePixel() ); if( pLogo && !pLogo->IsEmpty() && ( aVideoRect.GetWidth() > 0 ) && ( aVideoRect.GetHeight() > 0 ) ) { diff --git a/avmedia/source/viewer/mediawindow_impl.hxx b/avmedia/source/viewer/mediawindow_impl.hxx index 317cea8ef7d1..906959d0c429 100644 --- a/avmedia/source/viewer/mediawindow_impl.hxx +++ b/avmedia/source/viewer/mediawindow_impl.hxx @@ -66,6 +66,7 @@ namespace avmedia public: MediaChildWindow( Window* pParent ); + MediaChildWindow( Window* pParent, SystemWindowData* pData ); virtual ~MediaChildWindow(); protected: @@ -173,7 +174,7 @@ namespace avmedia ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxEventsIf; MediaEventListenersImpl* mpEvents; - MediaChildWindow maChildWindow; + boost::scoped_ptr<MediaChildWindow> mpChildWindow; MediaWindowControl* mpMediaWindowControl; BitmapEx* mpEmptyBmpEx; BitmapEx* mpAudioBmpEx; |