summaryrefslogtreecommitdiff
path: root/avmedia
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-04-27 12:14:18 +0200
committerZolnai Tamás <tamas.zolnai@collabora.com>2014-04-27 12:34:06 +0200
commitb5529c8c457f442bfc43305becc0c02d6a09ee80 (patch)
tree1ade1fd1ce11e4d74b0007e6fd5743a14811006d /avmedia
parent4db3805a2dd2e36d9e0cb9cb7a8a9923119d3a52 (diff)
avmedia: create a special SystemChildWindow for 3D models
Change-Id: Id5f5ba2cf72ea78506ba226b269fae59b1163858
Diffstat (limited to 'avmedia')
-rw-r--r--avmedia/Library_avmedia.mk7
-rw-r--r--avmedia/source/viewer/mediawindow_impl.cxx53
-rw-r--r--avmedia/source/viewer/mediawindow_impl.hxx3
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;