1*cdf0e10cSrcweir /************************************************************************ 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #include "mediawindow_impl.hxx" 29*cdf0e10cSrcweir #include "mediaevent_impl.hxx" 30*cdf0e10cSrcweir #include "mediamisc.hxx" 31*cdf0e10cSrcweir #include "mediawindow.hrc" 32*cdf0e10cSrcweir #include "helpids.hrc" 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <algorithm> 35*cdf0e10cSrcweir #include <cmath> 36*cdf0e10cSrcweir #include <osl/mutex.hxx> 37*cdf0e10cSrcweir #include <tools/time.hxx> 38*cdf0e10cSrcweir #include <vcl/svapp.hxx> 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_SYSTEMPOINTER_HDL_ 41*cdf0e10cSrcweir #include <com/sun/star/awt/SystemPointer.hdl> 42*cdf0e10cSrcweir #endif 43*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HDL_ 44*cdf0e10cSrcweir #include <com/sun/star/lang/XComponent.hdl> 45*cdf0e10cSrcweir #endif 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir #define AVMEDIA_TOOLBOXITEM_PREV 0x0001 48*cdf0e10cSrcweir #define AVMEDIA_TOOLBOXITEM_PLAY 0x0002 49*cdf0e10cSrcweir #define AVMEDIA_TOOLBOXITEM_PAUSE 0x0004 50*cdf0e10cSrcweir #define AVMEDIA_TOOLBOXITEM_STOP 0x0008 51*cdf0e10cSrcweir #define AVMEDIA_TOOLBOXITEM_NEXT 0x0010 52*cdf0e10cSrcweir #define AVMEDIA_TOOLBOXITEM_MUTE 0x0100 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir #define AVMEDIA_FFW_PLAYRATE 4 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir using namespace ::com::sun::star; 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir namespace avmedia { namespace priv { 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir // ---------------------- 61*cdf0e10cSrcweir // - MediaWindowControl - 62*cdf0e10cSrcweir // ---------------------- 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir MediaWindowControl::MediaWindowControl( Window* pParent ) : 65*cdf0e10cSrcweir MediaControl( pParent, MEDIACONTROLSTYLE_MULTILINE ) 66*cdf0e10cSrcweir { 67*cdf0e10cSrcweir } 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir // --------------------------------------------------------------------- 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir MediaWindowControl::~MediaWindowControl() 72*cdf0e10cSrcweir { 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir // --------------------------------------------------------------------- 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir void MediaWindowControl::update() 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir MediaItem aItem; 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir static_cast< MediaWindowImpl* >( GetParent() )->updateMediaItem( aItem ); 82*cdf0e10cSrcweir setState( aItem ); 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir // --------------------------------------------------------------------- 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir void MediaWindowControl::execute( const MediaItem& rItem ) 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir static_cast< MediaWindowImpl* >( GetParent() )->executeMediaItem( rItem ); 90*cdf0e10cSrcweir } 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir // -------------------- 93*cdf0e10cSrcweir // - MediaChildWindow - 94*cdf0e10cSrcweir // -------------------- 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir MediaChildWindow::MediaChildWindow( Window* pParent ) : 97*cdf0e10cSrcweir SystemChildWindow( pParent, WB_CLIPCHILDREN ) 98*cdf0e10cSrcweir { 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir // --------------------------------------------------------------------- 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir MediaChildWindow::~MediaChildWindow() 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir // --------------------------------------------------------------------- 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir void MediaChildWindow::MouseMove( const MouseEvent& rMEvt ) 110*cdf0e10cSrcweir { 111*cdf0e10cSrcweir const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ), 112*cdf0e10cSrcweir rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() ); 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir SystemChildWindow::MouseMove( rMEvt ); 115*cdf0e10cSrcweir GetParent()->MouseMove( aTransformedEvent ); 116*cdf0e10cSrcweir } 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir // --------------------------------------------------------------------- 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir void MediaChildWindow::MouseButtonDown( const MouseEvent& rMEvt ) 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ), 123*cdf0e10cSrcweir rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() ); 124*cdf0e10cSrcweir 125*cdf0e10cSrcweir SystemChildWindow::MouseButtonDown( rMEvt ); 126*cdf0e10cSrcweir GetParent()->MouseButtonDown( aTransformedEvent ); 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir // --------------------------------------------------------------------- 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir void MediaChildWindow::MouseButtonUp( const MouseEvent& rMEvt ) 132*cdf0e10cSrcweir { 133*cdf0e10cSrcweir const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ), 134*cdf0e10cSrcweir rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() ); 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir SystemChildWindow::MouseButtonUp( rMEvt ); 137*cdf0e10cSrcweir GetParent()->MouseButtonUp( aTransformedEvent ); 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir // --------------------------------------------------------------------- 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir void MediaChildWindow::KeyInput( const KeyEvent& rKEvt ) 143*cdf0e10cSrcweir { 144*cdf0e10cSrcweir SystemChildWindow::KeyInput( rKEvt ); 145*cdf0e10cSrcweir GetParent()->KeyInput( rKEvt ); 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir // --------------------------------------------------------------------- 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir void MediaChildWindow::KeyUp( const KeyEvent& rKEvt ) 151*cdf0e10cSrcweir { 152*cdf0e10cSrcweir SystemChildWindow::KeyUp( rKEvt ); 153*cdf0e10cSrcweir GetParent()->KeyUp( rKEvt ); 154*cdf0e10cSrcweir } 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir // --------------------------------------------------------------------- 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir void MediaChildWindow::Command( const CommandEvent& rCEvt ) 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir const CommandEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rCEvt.GetMousePosPixel() ) ), 161*cdf0e10cSrcweir rCEvt.GetCommand(), rCEvt.IsMouseEvent(), rCEvt.GetData() ); 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir SystemChildWindow::Command( rCEvt ); 164*cdf0e10cSrcweir GetParent()->Command( aTransformedEvent ); 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir // ---------------------- 168*cdf0e10cSrcweir // - MediaWindowImpl - 169*cdf0e10cSrcweir // ---------------------- 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir MediaWindowImpl::MediaWindowImpl( Window* pParent, MediaWindow* pMediaWindow, bool bInternalMediaControl ) : 172*cdf0e10cSrcweir Control( pParent ), 173*cdf0e10cSrcweir MediaWindowBaseImpl( pMediaWindow ), 174*cdf0e10cSrcweir DropTargetHelper( this ), 175*cdf0e10cSrcweir DragSourceHelper( this ), 176*cdf0e10cSrcweir mxEventsIf( static_cast< ::cppu::OWeakObject* >( mpEvents = new MediaEventListenersImpl( maChildWindow ) ) ), 177*cdf0e10cSrcweir maChildWindow( this ), 178*cdf0e10cSrcweir mpMediaWindowControl( bInternalMediaControl ? new MediaWindowControl( this ) : NULL ), 179*cdf0e10cSrcweir mpEmptyBmpEx( NULL ), 180*cdf0e10cSrcweir mpAudioBmpEx( NULL ) 181*cdf0e10cSrcweir { 182*cdf0e10cSrcweir maChildWindow.SetBackground( Color( COL_BLACK ) ); 183*cdf0e10cSrcweir maChildWindow.SetHelpId( HID_AVMEDIA_PLAYERWINDOW ); 184*cdf0e10cSrcweir maChildWindow.Hide(); 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir if( mpMediaWindowControl ) 187*cdf0e10cSrcweir { 188*cdf0e10cSrcweir mpMediaWindowControl->SetSizePixel( mpMediaWindowControl->getMinSizePixel() ); 189*cdf0e10cSrcweir mpMediaWindowControl->Show(); 190*cdf0e10cSrcweir } 191*cdf0e10cSrcweir } 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir // --------------------------------------------------------------------- 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir MediaWindowImpl::~MediaWindowImpl() 196*cdf0e10cSrcweir { 197*cdf0e10cSrcweir delete mpEmptyBmpEx; 198*cdf0e10cSrcweir delete mpAudioBmpEx; 199*cdf0e10cSrcweir delete mpMediaWindowControl; 200*cdf0e10cSrcweir } 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir // --------------------------------------------------------------------- 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir void MediaWindowImpl::cleanUp() 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() ); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir mpEvents->cleanUp(); 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir if( xPlayerWindow.is() ) 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir xPlayerWindow->removeKeyListener( uno::Reference< awt::XKeyListener >( mxEventsIf, uno::UNO_QUERY ) ); 213*cdf0e10cSrcweir xPlayerWindow->removeMouseListener( uno::Reference< awt::XMouseListener >( mxEventsIf, uno::UNO_QUERY ) ); 214*cdf0e10cSrcweir xPlayerWindow->removeMouseMotionListener( uno::Reference< awt::XMouseMotionListener >( mxEventsIf, uno::UNO_QUERY ) ); 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir uno::Reference< lang::XComponent > xComponent( xPlayerWindow, uno::UNO_QUERY ); 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir if( xComponent.is() ) 219*cdf0e10cSrcweir xComponent->dispose(); 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir setPlayerWindow( NULL ); 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir MediaWindowBaseImpl::cleanUp(); 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir // --------------------------------------------------------------------- 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir void MediaWindowImpl::onURLChanged() 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir if( getPlayer().is() ) 232*cdf0e10cSrcweir { 233*cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > xPlayerWindow; 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir const Point aPoint; 236*cdf0e10cSrcweir const Size aSize( maChildWindow.GetSizePixel() ); 237*cdf0e10cSrcweir const sal_IntPtr nWndHandle = (sal_IntPtr) maChildWindow.GetParentWindowHandle( isMediaWindowJavaBased() ); 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir try 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir if( nWndHandle != 0 ) 242*cdf0e10cSrcweir { 243*cdf0e10cSrcweir uno::Sequence< uno::Any > aArgs( 3 ); 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir aArgs[ 0 ] = uno::makeAny( nWndHandle ); 246*cdf0e10cSrcweir aArgs[ 1 ] = uno::makeAny( awt::Rectangle( aPoint.X(), aPoint.Y(), aSize.Width(), aSize.Height() ) ); 247*cdf0e10cSrcweir aArgs[ 2 ] = uno::makeAny( reinterpret_cast< sal_IntPtr >( &maChildWindow ) ); 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir xPlayerWindow = getPlayer()->createPlayerWindow( aArgs ); 250*cdf0e10cSrcweir } 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir catch( uno::RuntimeException ) 253*cdf0e10cSrcweir { 254*cdf0e10cSrcweir // happens eg, on MacOSX where Java frames cannot be created from X11 window handles 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir setPlayerWindow( xPlayerWindow ); 258*cdf0e10cSrcweir 259*cdf0e10cSrcweir if( xPlayerWindow.is() ) 260*cdf0e10cSrcweir { 261*cdf0e10cSrcweir xPlayerWindow->addKeyListener( uno::Reference< awt::XKeyListener >( mxEventsIf, uno::UNO_QUERY ) ); 262*cdf0e10cSrcweir xPlayerWindow->addMouseListener( uno::Reference< awt::XMouseListener >( mxEventsIf, uno::UNO_QUERY ) ); 263*cdf0e10cSrcweir xPlayerWindow->addMouseMotionListener( uno::Reference< awt::XMouseMotionListener >( mxEventsIf, uno::UNO_QUERY ) ); 264*cdf0e10cSrcweir xPlayerWindow->addFocusListener( uno::Reference< awt::XFocusListener >( mxEventsIf, uno::UNO_QUERY ) ); 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir else 268*cdf0e10cSrcweir setPlayerWindow( NULL ); 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir if( getPlayerWindow().is() ) 271*cdf0e10cSrcweir maChildWindow.Show(); 272*cdf0e10cSrcweir else 273*cdf0e10cSrcweir maChildWindow.Hide(); 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir if( mpMediaWindowControl ) 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir MediaItem aItem; 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir updateMediaItem( aItem ); 280*cdf0e10cSrcweir mpMediaWindowControl->setState( aItem ); 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir } 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir // --------------------------------------------------------------------- 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir void MediaWindowImpl::update() 287*cdf0e10cSrcweir { 288*cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() ); 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir if( xPlayerWindow.is() ) 291*cdf0e10cSrcweir xPlayerWindow->update(); 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir // --------------------------------------------------------------------- 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir void MediaWindowImpl::setPosSize( const Rectangle& rRect ) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir SetPosSizePixel( rRect.TopLeft(), rRect.GetSize() ); 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir // --------------------------------------------------------------------- 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir void MediaWindowImpl::setPointer( const Pointer& rPointer ) 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() ); 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir SetPointer( rPointer ); 308*cdf0e10cSrcweir maChildWindow.SetPointer( rPointer ); 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir if( xPlayerWindow.is() ) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir long nPointer; 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir switch( rPointer.GetStyle() ) 315*cdf0e10cSrcweir { 316*cdf0e10cSrcweir case( POINTER_CROSS ): nPointer = awt::SystemPointer::CROSS; break; 317*cdf0e10cSrcweir case( POINTER_HAND ): nPointer = awt::SystemPointer::HAND; break; 318*cdf0e10cSrcweir case( POINTER_MOVE ): nPointer = awt::SystemPointer::MOVE; break; 319*cdf0e10cSrcweir case( POINTER_WAIT ): nPointer = awt::SystemPointer::WAIT; break; 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir default: nPointer = awt::SystemPointer::ARROW; break; 322*cdf0e10cSrcweir } 323*cdf0e10cSrcweir 324*cdf0e10cSrcweir xPlayerWindow->setPointerType( nPointer ); 325*cdf0e10cSrcweir } 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir // --------------------------------------------------------------------- 329*cdf0e10cSrcweir 330*cdf0e10cSrcweir const Pointer& MediaWindowImpl::getPointer() const 331*cdf0e10cSrcweir { 332*cdf0e10cSrcweir return GetPointer(); 333*cdf0e10cSrcweir } 334*cdf0e10cSrcweir 335*cdf0e10cSrcweir // --------------------------------------------------------------------- 336*cdf0e10cSrcweir 337*cdf0e10cSrcweir bool MediaWindowImpl::hasInternalMediaControl() const 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir return( mpMediaWindowControl != NULL ); 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir // --------------------------------------------------------------------- 343*cdf0e10cSrcweir 344*cdf0e10cSrcweir void MediaWindowImpl::Resize() 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() ); 347*cdf0e10cSrcweir const Size aCurSize( GetOutputSizePixel() ); 348*cdf0e10cSrcweir const sal_Int32 nOffset( mpMediaWindowControl ? AVMEDIA_CONTROLOFFSET : 0 ); 349*cdf0e10cSrcweir Size aPlayerWindowSize( aCurSize.Width() - ( nOffset << 1 ), 350*cdf0e10cSrcweir aCurSize.Height() - ( nOffset << 1 ) ); 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir if( mpMediaWindowControl ) 353*cdf0e10cSrcweir { 354*cdf0e10cSrcweir const sal_Int32 nControlHeight = mpMediaWindowControl->GetSizePixel().Height(); 355*cdf0e10cSrcweir const sal_Int32 nControlY = ::std::max( aCurSize.Height() - nControlHeight - nOffset, 0L ); 356*cdf0e10cSrcweir 357*cdf0e10cSrcweir aPlayerWindowSize.Height() = ( nControlY - ( nOffset << 1 ) ); 358*cdf0e10cSrcweir mpMediaWindowControl->SetPosSizePixel( Point( nOffset, nControlY ), Size( aCurSize.Width() - ( nOffset << 1 ), nControlHeight ) ); 359*cdf0e10cSrcweir } 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir if( xPlayerWindow.is() ) 362*cdf0e10cSrcweir xPlayerWindow->setPosSize( 0, 0, aPlayerWindowSize.Width(), aPlayerWindowSize.Height(), 0 ); 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir maChildWindow.SetPosSizePixel( Point( nOffset, nOffset ), aPlayerWindowSize ); 365*cdf0e10cSrcweir } 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir // --------------------------------------------------------------------- 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir void MediaWindowImpl::StateChanged( StateChangedType eType ) 370*cdf0e10cSrcweir { 371*cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > xPlayerWindow( getPlayerWindow() ); 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir if( xPlayerWindow.is() ) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir // stop playing when going disabled or hidden 376*cdf0e10cSrcweir switch( eType ) 377*cdf0e10cSrcweir { 378*cdf0e10cSrcweir case STATE_CHANGE_VISIBLE: 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir stopPlayingInternal( !IsVisible() ); 381*cdf0e10cSrcweir xPlayerWindow->setVisible( IsVisible() ); 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir break; 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir case STATE_CHANGE_ENABLE: 386*cdf0e10cSrcweir { 387*cdf0e10cSrcweir stopPlayingInternal( !IsEnabled() ); 388*cdf0e10cSrcweir xPlayerWindow->setEnable( IsEnabled() ); 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir break; 391*cdf0e10cSrcweir 392*cdf0e10cSrcweir default: 393*cdf0e10cSrcweir break; 394*cdf0e10cSrcweir } 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir } 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir // --------------------------------------------------------------------- 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir void MediaWindowImpl::Paint( const Rectangle& ) 401*cdf0e10cSrcweir { 402*cdf0e10cSrcweir BitmapEx* pLogo = NULL; 403*cdf0e10cSrcweir 404*cdf0e10cSrcweir if( !getPlayer().is() ) 405*cdf0e10cSrcweir { 406*cdf0e10cSrcweir if( !mpEmptyBmpEx ) 407*cdf0e10cSrcweir mpEmptyBmpEx = new BitmapEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) ); 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir pLogo = mpEmptyBmpEx; 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir else if( !getPlayerWindow().is() ) 412*cdf0e10cSrcweir { 413*cdf0e10cSrcweir if( !mpAudioBmpEx ) 414*cdf0e10cSrcweir mpAudioBmpEx = new BitmapEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) ); 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir pLogo = mpAudioBmpEx; 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir 419*cdf0e10cSrcweir const Point aBasePos( maChildWindow.GetPosPixel() ); 420*cdf0e10cSrcweir const Rectangle aVideoRect( aBasePos, maChildWindow.GetSizePixel() ); 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir if( pLogo && !pLogo->IsEmpty() && ( aVideoRect.GetWidth() > 0 ) && ( aVideoRect.GetHeight() > 0 ) ) 423*cdf0e10cSrcweir { 424*cdf0e10cSrcweir Size aLogoSize( pLogo->GetSizePixel() ); 425*cdf0e10cSrcweir const Color aBackgroundColor( 67, 67, 67 ); 426*cdf0e10cSrcweir 427*cdf0e10cSrcweir SetLineColor( aBackgroundColor ); 428*cdf0e10cSrcweir SetFillColor( aBackgroundColor ); 429*cdf0e10cSrcweir DrawRect( aVideoRect ); 430*cdf0e10cSrcweir 431*cdf0e10cSrcweir if( ( aLogoSize.Width() > aVideoRect.GetWidth() || aLogoSize.Height() > aVideoRect.GetHeight() ) && 432*cdf0e10cSrcweir ( aLogoSize.Height() > 0 ) ) 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir const double fLogoWH = (double) aLogoSize.Width() / aLogoSize.Height(); 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir if( fLogoWH < ( (double) aVideoRect.GetWidth() / aVideoRect.GetHeight() ) ) 437*cdf0e10cSrcweir { 438*cdf0e10cSrcweir aLogoSize.Width() = (long) ( aVideoRect.GetHeight() * fLogoWH ); 439*cdf0e10cSrcweir aLogoSize.Height()= aVideoRect.GetHeight(); 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir else 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir aLogoSize.Width() = aVideoRect.GetWidth(); 444*cdf0e10cSrcweir aLogoSize.Height()= (long) ( aVideoRect.GetWidth() / fLogoWH ); 445*cdf0e10cSrcweir } 446*cdf0e10cSrcweir } 447*cdf0e10cSrcweir 448*cdf0e10cSrcweir DrawBitmapEx( Point( aBasePos.X() + ( ( aVideoRect.GetWidth() - aLogoSize.Width() ) >> 1 ), 449*cdf0e10cSrcweir aBasePos.Y() + ( ( aVideoRect.GetHeight() - aLogoSize.Height() ) >> 1 ) ), 450*cdf0e10cSrcweir aLogoSize, *pLogo ); 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir } 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir // --------------------------------------------------------------------- 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir void MediaWindowImpl::GetFocus() 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir } 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir // --------------------------------------------------------------------- 461*cdf0e10cSrcweir 462*cdf0e10cSrcweir void MediaWindowImpl::MouseMove( const MouseEvent& rMEvt ) 463*cdf0e10cSrcweir { 464*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir if( pMediaWindow ) 467*cdf0e10cSrcweir pMediaWindow->MouseMove( rMEvt ); 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir 470*cdf0e10cSrcweir // --------------------------------------------------------------------- 471*cdf0e10cSrcweir 472*cdf0e10cSrcweir void MediaWindowImpl::MouseButtonDown( const MouseEvent& rMEvt ) 473*cdf0e10cSrcweir { 474*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 475*cdf0e10cSrcweir 476*cdf0e10cSrcweir if( pMediaWindow ) 477*cdf0e10cSrcweir pMediaWindow->MouseButtonDown( rMEvt ); 478*cdf0e10cSrcweir } 479*cdf0e10cSrcweir 480*cdf0e10cSrcweir // --------------------------------------------------------------------- 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir void MediaWindowImpl::MouseButtonUp( const MouseEvent& rMEvt ) 483*cdf0e10cSrcweir { 484*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir if( pMediaWindow ) 487*cdf0e10cSrcweir pMediaWindow->MouseButtonUp( rMEvt ); 488*cdf0e10cSrcweir } 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir // --------------------------------------------------------------------- 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir void MediaWindowImpl::KeyInput( const KeyEvent& rKEvt ) 493*cdf0e10cSrcweir { 494*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir if( pMediaWindow ) 497*cdf0e10cSrcweir pMediaWindow->KeyInput( rKEvt ); 498*cdf0e10cSrcweir } 499*cdf0e10cSrcweir 500*cdf0e10cSrcweir // --------------------------------------------------------------------- 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir void MediaWindowImpl::KeyUp( const KeyEvent& rKEvt ) 503*cdf0e10cSrcweir { 504*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 505*cdf0e10cSrcweir 506*cdf0e10cSrcweir if( pMediaWindow ) 507*cdf0e10cSrcweir pMediaWindow->KeyUp( rKEvt ); 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir // --------------------------------------------------------------------- 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir void MediaWindowImpl::Command( const CommandEvent& rCEvt ) 513*cdf0e10cSrcweir { 514*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 515*cdf0e10cSrcweir 516*cdf0e10cSrcweir if( pMediaWindow ) 517*cdf0e10cSrcweir pMediaWindow->Command( rCEvt ); 518*cdf0e10cSrcweir } 519*cdf0e10cSrcweir 520*cdf0e10cSrcweir // --------------------------------------------------------------------- 521*cdf0e10cSrcweir 522*cdf0e10cSrcweir sal_Int8 MediaWindowImpl::AcceptDrop( const AcceptDropEvent& rEvt ) 523*cdf0e10cSrcweir { 524*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 525*cdf0e10cSrcweir return( pMediaWindow ? pMediaWindow->AcceptDrop( rEvt ) : 0 ); 526*cdf0e10cSrcweir } 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir // --------------------------------------------------------------------- 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir sal_Int8 MediaWindowImpl::ExecuteDrop( const ExecuteDropEvent& rEvt ) 531*cdf0e10cSrcweir { 532*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 533*cdf0e10cSrcweir return( pMediaWindow ? pMediaWindow->ExecuteDrop( rEvt ) : 0 ); 534*cdf0e10cSrcweir } 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir // --------------------------------------------------------------------- 537*cdf0e10cSrcweir 538*cdf0e10cSrcweir void MediaWindowImpl::StartDrag( sal_Int8 nAction, const Point& rPosPixel ) 539*cdf0e10cSrcweir { 540*cdf0e10cSrcweir MediaWindow* pMediaWindow = getMediaWindow(); 541*cdf0e10cSrcweir 542*cdf0e10cSrcweir if( pMediaWindow ) 543*cdf0e10cSrcweir pMediaWindow->StartDrag( nAction, rPosPixel ); 544*cdf0e10cSrcweir } 545*cdf0e10cSrcweir 546*cdf0e10cSrcweir } // namespace priv 547*cdf0e10cSrcweir } // namespace avmedia 548