LCOV - code coverage report
Current view: top level - avmedia/source/viewer - mediawindow_impl.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 352 0.0 %
Date: 2014-04-14 Functions: 0 59 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : #include <iostream>
      20             : #include "mediawindow_impl.hxx"
      21             : #include "mediaevent_impl.hxx"
      22             : #include "mediamisc.hxx"
      23             : #include "mediawindow.hrc"
      24             : #include "helpids.hrc"
      25             : 
      26             : #include <algorithm>
      27             : #include <cmath>
      28             : 
      29             : #include <comphelper/processfactory.hxx>
      30             : #include <osl/mutex.hxx>
      31             : #include <tools/urlobj.hxx>
      32             : #include <unotools/securityoptions.hxx>
      33             : #include <vcl/svapp.hxx>
      34             : 
      35             : #include <com/sun/star/awt/SystemPointer.hpp>
      36             : #include <com/sun/star/lang/XComponent.hpp>
      37             : #include <com/sun/star/media/XManager.hpp>
      38             : 
      39             : using namespace ::com::sun::star;
      40             : 
      41             : namespace avmedia { namespace priv {
      42             : 
      43             : 
      44             : // - MediaWindowControl -
      45             : 
      46             : 
      47           0 : MediaWindowControl::MediaWindowControl( Window* pParent ) :
      48           0 :     MediaControl( pParent, MEDIACONTROLSTYLE_MULTILINE )
      49             : {
      50           0 : }
      51             : 
      52             : 
      53             : 
      54           0 : MediaWindowControl::~MediaWindowControl()
      55             : {
      56           0 : }
      57             : 
      58             : 
      59             : 
      60           0 : void MediaWindowControl::update()
      61             : {
      62           0 :     MediaItem aItem;
      63             : 
      64           0 :     static_cast< MediaWindowImpl* >( GetParent() )->updateMediaItem( aItem );
      65           0 :     setState( aItem );
      66           0 : }
      67             : 
      68             : 
      69             : 
      70           0 : void  MediaWindowControl::execute( const MediaItem& rItem )
      71             : {
      72           0 :     static_cast< MediaWindowImpl* >( GetParent() )->executeMediaItem( rItem );
      73           0 : }
      74             : 
      75             : 
      76             : // - MediaChildWindow -
      77             : 
      78             : 
      79           0 : MediaChildWindow::MediaChildWindow( Window* pParent ) :
      80           0 :     SystemChildWindow( pParent, WB_CLIPCHILDREN )
      81             : {
      82           0 : }
      83             : 
      84             : 
      85             : 
      86           0 : MediaChildWindow::~MediaChildWindow()
      87             : {
      88           0 : }
      89             : 
      90             : 
      91             : 
      92           0 : void MediaChildWindow::MouseMove( const MouseEvent& rMEvt )
      93             : {
      94           0 :     const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
      95           0 :                                           rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
      96             : 
      97           0 :     SystemChildWindow::MouseMove( rMEvt );
      98           0 :     GetParent()->MouseMove( aTransformedEvent );
      99           0 : }
     100             : 
     101             : 
     102             : 
     103           0 : void MediaChildWindow::MouseButtonDown( const MouseEvent& rMEvt )
     104             : {
     105           0 :     const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
     106           0 :                                           rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
     107             : 
     108           0 :     SystemChildWindow::MouseButtonDown( rMEvt );
     109           0 :     GetParent()->MouseButtonDown( aTransformedEvent );
     110           0 : }
     111             : 
     112             : 
     113             : 
     114           0 : void MediaChildWindow::MouseButtonUp( const MouseEvent& rMEvt )
     115             : {
     116           0 :     const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
     117           0 :                                           rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
     118             : 
     119           0 :     SystemChildWindow::MouseButtonUp( rMEvt );
     120           0 :     GetParent()->MouseButtonUp( aTransformedEvent );
     121           0 : }
     122             : 
     123             : 
     124             : 
     125           0 : void MediaChildWindow::KeyInput( const KeyEvent& rKEvt )
     126             : {
     127           0 :     SystemChildWindow::KeyInput( rKEvt );
     128           0 :     GetParent()->KeyInput( rKEvt );
     129           0 : }
     130             : 
     131             : 
     132             : 
     133           0 : void MediaChildWindow::KeyUp( const KeyEvent& rKEvt )
     134             : {
     135           0 :     SystemChildWindow::KeyUp( rKEvt );
     136           0 :     GetParent()->KeyUp( rKEvt );
     137           0 : }
     138             : 
     139             : 
     140             : 
     141           0 : void MediaChildWindow::Command( const CommandEvent& rCEvt )
     142             : {
     143           0 :     const CommandEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rCEvt.GetMousePosPixel() ) ),
     144           0 :                                             rCEvt.GetCommand(), rCEvt.IsMouseEvent(), rCEvt.GetData() );
     145             : 
     146           0 :     SystemChildWindow::Command( rCEvt );
     147           0 :     GetParent()->Command( aTransformedEvent );
     148           0 : }
     149             : 
     150             : 
     151             : // - MediaWindowImpl -
     152             : 
     153             : 
     154           0 : MediaWindowImpl::MediaWindowImpl( Window* pParent, MediaWindow* pMediaWindow, bool bInternalMediaControl ) :
     155             :     Control( pParent ),
     156             :     DropTargetHelper( this ),
     157             :     DragSourceHelper( this ),
     158             :     mpMediaWindow( pMediaWindow ),
     159           0 :     mxEventsIf( static_cast< ::cppu::OWeakObject* >( mpEvents = new MediaEventListenersImpl( maChildWindow ) ) ),
     160             :     maChildWindow( this ),
     161           0 :     mpMediaWindowControl( bInternalMediaControl ? new MediaWindowControl( this ) : NULL ),
     162             :     mpEmptyBmpEx( NULL ),
     163           0 :     mpAudioBmpEx( NULL )
     164             : {
     165           0 :     maChildWindow.SetBackground( Color( COL_BLACK ) );
     166           0 :     maChildWindow.SetHelpId( HID_AVMEDIA_PLAYERWINDOW );
     167           0 :     maChildWindow.Hide();
     168             : 
     169           0 :     if( mpMediaWindowControl )
     170             :     {
     171           0 :         mpMediaWindowControl->SetSizePixel( mpMediaWindowControl->getMinSizePixel() );
     172           0 :         mpMediaWindowControl->Show();
     173             :     }
     174           0 : }
     175             : 
     176             : 
     177             : 
     178           0 : MediaWindowImpl::~MediaWindowImpl()
     179             : {
     180           0 :     mpEvents->cleanUp();
     181             : 
     182           0 :     if( mxPlayerWindow.is() )
     183             :     {
     184           0 :         mxPlayerWindow->removeKeyListener( uno::Reference< awt::XKeyListener >( mxEventsIf, uno::UNO_QUERY ) );
     185           0 :         mxPlayerWindow->removeMouseListener( uno::Reference< awt::XMouseListener >( mxEventsIf, uno::UNO_QUERY ) );
     186           0 :         mxPlayerWindow->removeMouseMotionListener( uno::Reference< awt::XMouseMotionListener >( mxEventsIf, uno::UNO_QUERY ) );
     187             : 
     188           0 :         uno::Reference< lang::XComponent > xComponent( mxPlayerWindow, uno::UNO_QUERY );
     189           0 :         if( xComponent.is() )
     190           0 :             xComponent->dispose();
     191             : 
     192           0 :         mxPlayerWindow.clear();
     193             :     }
     194             : 
     195           0 :     uno::Reference< lang::XComponent > xComponent( mxPlayer, uno::UNO_QUERY );
     196           0 :     if( xComponent.is() ) // this stops the player
     197           0 :         xComponent->dispose();
     198             : 
     199           0 :     mxPlayer.clear();
     200             : 
     201           0 :     mpMediaWindow = NULL;
     202             : 
     203           0 :     delete mpEmptyBmpEx;
     204           0 :     delete mpAudioBmpEx;
     205           0 :     delete mpMediaWindowControl;
     206           0 : }
     207             : 
     208           0 : uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( const OUString& rURL, const OUString& rReferer, OUString* pMimeType )
     209             : {
     210             : 
     211           0 :     uno::Reference< media::XPlayer > xPlayer;
     212           0 :     if (SvtSecurityOptions().isUntrustedReferer(rReferer)) {
     213           0 :         return xPlayer;
     214             :     }
     215           0 :     uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
     216             : 
     217           0 :     if ( !pMimeType || *pMimeType == AVMEDIA_MIMETYPE_COMMON )
     218             :     {
     219             : 
     220             :         static const char * aServiceManagers[] = {
     221             :             AVMEDIA_MANAGER_SERVICE_PREFERRED,
     222             :             AVMEDIA_MANAGER_SERVICE_NAME,
     223             : // a fallback path just for gstreamer which has
     224             : // two significant versions deployed at once ...
     225             : #ifdef AVMEDIA_MANAGER_SERVICE_NAME_OLD
     226             :             AVMEDIA_MANAGER_SERVICE_NAME_OLD
     227             : #endif
     228             :         };
     229             : 
     230           0 :         for( sal_uInt32 i = 0; !xPlayer.is() && i < SAL_N_ELEMENTS( aServiceManagers ); ++i )
     231             :         {
     232             :             const OUString aServiceName( aServiceManagers[ i ],
     233           0 :                                          strlen( aServiceManagers[ i ] ),
     234           0 :                                          RTL_TEXTENCODING_ASCII_US );
     235             : 
     236           0 :             xPlayer = createPlayer(rURL, aServiceName, xContext);
     237           0 :         }
     238             :     }
     239           0 :     else if ( *pMimeType == AVMEDIA_MIMETYPE_JSON )
     240             :     {
     241           0 :         xPlayer = createPlayer(rURL, AVMEDIA_OPENGL_MANAGER_SERVICE_NAME, xContext);
     242             :     }
     243             : 
     244           0 :     return xPlayer;
     245             : }
     246             : 
     247           0 : uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer(
     248             :     const OUString& rURL, const OUString& rManagerServName,
     249             :     uno::Reference< uno::XComponentContext > xContext)
     250             : {
     251           0 :     uno::Reference< media::XPlayer > xPlayer;
     252             :     try
     253             :     {
     254             :         uno::Reference< media::XManager > xManager (
     255           0 :             xContext->getServiceManager()->createInstanceWithContext(rManagerServName, xContext),
     256           0 :             uno::UNO_QUERY );
     257           0 :         if( xManager.is() )
     258           0 :             xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), uno::UNO_QUERY );
     259             :         else
     260           0 :             SAL_WARN( "avmedia", "failed to create media player service " << rManagerServName );
     261           0 :     } catch ( const uno::Exception &e )
     262             :     {
     263             :         SAL_WARN( "avmedia", "couldn't create media player " << rManagerServName
     264             :                               << ", exception '" << e.Message << '\'');
     265             :     }
     266           0 :     return xPlayer;
     267             : }
     268             : 
     269           0 : void MediaWindowImpl::setURL( const OUString& rURL,
     270             :         OUString const& rTempURL, OUString const& rReferer)
     271             : {
     272           0 :     maReferer = rReferer;
     273           0 :     if( rURL != getURL() )
     274             :     {
     275           0 :         if( mxPlayer.is() )
     276           0 :             mxPlayer->stop();
     277             : 
     278           0 :         if( mxPlayerWindow.is() )
     279             :         {
     280           0 :             mxPlayerWindow->setVisible( false );
     281           0 :             mxPlayerWindow.clear();
     282             :         }
     283             : 
     284           0 :         mxPlayer.clear();
     285           0 :         mTempFileURL = OUString();
     286             : 
     287           0 :         if (!rTempURL.isEmpty())
     288             :         {
     289           0 :             maFileURL = rURL;
     290           0 :             mTempFileURL = rTempURL;
     291             :         }
     292             :         else
     293             :         {
     294           0 :             INetURLObject aURL( rURL );
     295             : 
     296           0 :             if (aURL.GetProtocol() != INET_PROT_NOT_VALID)
     297           0 :                 maFileURL = aURL.GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS);
     298             :             else
     299           0 :                 maFileURL = rURL;
     300             :         }
     301             : 
     302           0 :         mxPlayer = createPlayer((!mTempFileURL.isEmpty()) ? mTempFileURL : maFileURL, rReferer, &m_sMimeType );
     303           0 :         onURLChanged();
     304             :     }
     305           0 : }
     306             : 
     307           0 : const OUString& MediaWindowImpl::getURL() const
     308             : {
     309           0 :     return maFileURL;
     310             : }
     311             : 
     312           0 : bool MediaWindowImpl::isValid() const
     313             : {
     314           0 :     return( mxPlayer.is() );
     315             : }
     316             : 
     317           0 : Size MediaWindowImpl::getPreferredSize() const
     318             : {
     319           0 :     Size aRet;
     320             : 
     321           0 :     if( mxPlayer.is() )
     322             :     {
     323           0 :         awt::Size aPrefSize( mxPlayer->getPreferredPlayerWindowSize() );
     324             : 
     325           0 :         aRet.Width() = aPrefSize.Width;
     326           0 :         aRet.Height() = aPrefSize.Height;
     327             :     }
     328             : 
     329           0 :     return aRet;
     330             : }
     331             : 
     332           0 : bool MediaWindowImpl::start()
     333             : {
     334           0 :     return( mxPlayer.is() ? ( mxPlayer->start(), true ) : false );
     335             : }
     336             : 
     337           0 : void MediaWindowImpl::updateMediaItem( MediaItem& rItem ) const
     338             : {
     339           0 :     if( isPlaying() )
     340           0 :         rItem.setState( ( getRate() > 1.0 ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY );
     341             :     else
     342           0 :         rItem.setState( ( 0.0 == getMediaTime() ) ? MEDIASTATE_STOP : MEDIASTATE_PAUSE );
     343             : 
     344           0 :     rItem.setDuration( getDuration() );
     345           0 :     rItem.setTime( getMediaTime() );
     346           0 :     rItem.setLoop( isPlaybackLoop() );
     347           0 :     rItem.setMute( isMute() );
     348           0 :     rItem.setVolumeDB( getVolumeDB() );
     349           0 :     rItem.setZoom( getZoom() );
     350           0 :     rItem.setURL( getURL(), mTempFileURL, maReferer );
     351           0 : }
     352             : 
     353           0 : void MediaWindowImpl::executeMediaItem( const MediaItem& rItem )
     354             : {
     355           0 :     const sal_uInt32 nMaskSet = rItem.getMaskSet();
     356             : 
     357             :     // set URL first
     358           0 :     if( nMaskSet & AVMEDIA_SETMASK_URL )
     359             :     {
     360           0 :         m_sMimeType = rItem.getMimeType();
     361           0 :         setURL( rItem.getURL(), rItem.getTempURL(), rItem.getReferer() );
     362             :     }
     363             : 
     364             :     // set different states next
     365           0 :     if( nMaskSet & AVMEDIA_SETMASK_TIME )
     366           0 :         setMediaTime( ::std::min( rItem.getTime(), getDuration() ) );
     367             : 
     368           0 :     if( nMaskSet & AVMEDIA_SETMASK_LOOP )
     369           0 :         setPlaybackLoop( rItem.isLoop() );
     370             : 
     371           0 :     if( nMaskSet & AVMEDIA_SETMASK_MUTE )
     372           0 :         setMute( rItem.isMute() );
     373             : 
     374           0 :     if( nMaskSet & AVMEDIA_SETMASK_VOLUMEDB )
     375           0 :         setVolumeDB( rItem.getVolumeDB() );
     376             : 
     377           0 :     if( nMaskSet & AVMEDIA_SETMASK_ZOOM )
     378           0 :         setZoom( rItem.getZoom() );
     379             : 
     380             :     // set play state at last
     381           0 :     if( nMaskSet & AVMEDIA_SETMASK_STATE )
     382             :     {
     383           0 :         switch( rItem.getState() )
     384             :         {
     385             :             case( MEDIASTATE_PLAY ):
     386             :             case( MEDIASTATE_PLAYFFW ):
     387             :             {
     388             : 
     389           0 :                 if( !isPlaying() )
     390           0 :                     start();
     391             :             }
     392           0 :             break;
     393             : 
     394             :             case( MEDIASTATE_PAUSE ):
     395             :             {
     396           0 :                 if( isPlaying() )
     397           0 :                     stop();
     398             :             }
     399           0 :             break;
     400             : 
     401             :             case( MEDIASTATE_STOP ):
     402             :             {
     403           0 :                 if( isPlaying() )
     404             :                 {
     405           0 :                     setMediaTime( 0.0 );
     406           0 :                     stop();
     407           0 :                     setMediaTime( 0.0 );
     408             :                 }
     409             :             }
     410           0 :             break;
     411             :         }
     412             :     }
     413           0 : }
     414             : 
     415           0 : bool MediaWindowImpl::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
     416             : {
     417           0 :     return( mxPlayerWindow.is() ? mxPlayerWindow->setZoomLevel( eLevel ) : false );
     418             : }
     419             : 
     420           0 : ::com::sun::star::media::ZoomLevel MediaWindowImpl::getZoom() const
     421             : {
     422           0 :     return( mxPlayerWindow.is() ? mxPlayerWindow->getZoomLevel() : media::ZoomLevel_NOT_AVAILABLE );
     423             : }
     424             : 
     425           0 : void MediaWindowImpl::stop()
     426             : {
     427           0 :     if( mxPlayer.is() )
     428           0 :         mxPlayer->stop();
     429           0 : }
     430             : 
     431           0 : bool MediaWindowImpl::isPlaying() const
     432             : {
     433           0 :     return( mxPlayer.is() && mxPlayer->isPlaying() );
     434             : }
     435             : 
     436           0 : double MediaWindowImpl::getDuration() const
     437             : {
     438           0 :     return( mxPlayer.is() ? mxPlayer->getDuration() : 0.0 );
     439             : }
     440             : 
     441           0 : void MediaWindowImpl::setMediaTime( double fTime )
     442             : {
     443           0 :     if( mxPlayer.is() )
     444           0 :         mxPlayer->setMediaTime( fTime );
     445           0 : }
     446             : 
     447           0 : double MediaWindowImpl::getMediaTime() const
     448             : {
     449           0 :     return( mxPlayer.is() ? mxPlayer->getMediaTime() : 0.0 );
     450             : }
     451             : 
     452           0 : double MediaWindowImpl::getRate() const
     453             : {
     454           0 :     return( mxPlayer.is() ? mxPlayer->getRate() : 0.0 );
     455             : }
     456             : 
     457           0 : void MediaWindowImpl::setPlaybackLoop( bool bSet )
     458             : {
     459           0 :     if( mxPlayer.is() )
     460           0 :         mxPlayer->setPlaybackLoop( bSet );
     461           0 : }
     462             : 
     463           0 : bool MediaWindowImpl::isPlaybackLoop() const
     464             : {
     465           0 :     return( mxPlayer.is() ? mxPlayer->isPlaybackLoop() : false );
     466             : }
     467             : 
     468           0 : void MediaWindowImpl::setMute( bool bSet )
     469             : {
     470           0 :     if( mxPlayer.is() )
     471           0 :         mxPlayer->setMute( bSet );
     472           0 : }
     473             : 
     474           0 : bool MediaWindowImpl::isMute() const
     475             : {
     476           0 :     return( mxPlayer.is() ? mxPlayer->isMute() : false );
     477             : }
     478             : 
     479           0 : void MediaWindowImpl::setVolumeDB( sal_Int16 nVolumeDB )
     480             : {
     481           0 :     if( mxPlayer.is() )
     482           0 :         mxPlayer->setVolumeDB( nVolumeDB );
     483           0 : }
     484             : 
     485           0 : sal_Int16 MediaWindowImpl::getVolumeDB() const
     486             : {
     487           0 :     return( mxPlayer.is() ? mxPlayer->getVolumeDB() : 0 );
     488             : }
     489             : 
     490           0 : void MediaWindowImpl::stopPlayingInternal( bool bStop )
     491             : {
     492           0 :     if( isPlaying() )
     493             :     {
     494           0 :         bStop ? mxPlayer->stop() : mxPlayer->start();
     495             :     }
     496           0 : }
     497             : 
     498           0 : void MediaWindowImpl::onURLChanged()
     499             : {
     500           0 :     if( mxPlayer.is() )
     501             :     {
     502           0 :         uno::Sequence< uno::Any >              aArgs( 3 );
     503           0 :         uno::Reference< media::XPlayerWindow > xPlayerWindow;
     504           0 :         const Point                            aPoint;
     505           0 :         const Size                             aSize( maChildWindow.GetSizePixel() );
     506           0 :         const sal_Int32                        nWndHandle = 0;
     507             : 
     508           0 :         aArgs[ 0 ] = uno::makeAny( nWndHandle );
     509           0 :         aArgs[ 1 ] = uno::makeAny( awt::Rectangle( aPoint.X(), aPoint.Y(), aSize.Width(), aSize.Height() ) );
     510           0 :         aArgs[ 2 ] = uno::makeAny( reinterpret_cast< sal_IntPtr >( &maChildWindow ) );
     511             : 
     512             :         try
     513             :         {
     514           0 :             xPlayerWindow = mxPlayer->createPlayerWindow( aArgs );
     515             :         }
     516           0 :         catch( uno::RuntimeException )
     517             :         {
     518             :             // happens eg, on MacOSX where Java frames cannot be created from X11 window handles
     519             :         }
     520             : 
     521           0 :         mxPlayerWindow = xPlayerWindow;
     522             : 
     523           0 :         if( xPlayerWindow.is() )
     524             :         {
     525           0 :             xPlayerWindow->addKeyListener( uno::Reference< awt::XKeyListener >( mxEventsIf, uno::UNO_QUERY ) );
     526           0 :             xPlayerWindow->addMouseListener( uno::Reference< awt::XMouseListener >( mxEventsIf, uno::UNO_QUERY ) );
     527           0 :             xPlayerWindow->addMouseMotionListener( uno::Reference< awt::XMouseMotionListener >( mxEventsIf, uno::UNO_QUERY ) );
     528           0 :             xPlayerWindow->addFocusListener( uno::Reference< awt::XFocusListener >( mxEventsIf, uno::UNO_QUERY ) );
     529           0 :         }
     530             :     }
     531             :     else
     532           0 :         mxPlayerWindow.clear();
     533             : 
     534           0 :     if( mxPlayerWindow.is() )
     535           0 :         maChildWindow.Show();
     536             :     else
     537           0 :         maChildWindow.Hide();
     538             : 
     539           0 :     if( mpMediaWindowControl )
     540             :     {
     541           0 :         MediaItem aItem;
     542             : 
     543           0 :         updateMediaItem( aItem );
     544           0 :         mpMediaWindowControl->setState( aItem );
     545             :     }
     546           0 : }
     547             : 
     548             : 
     549             : 
     550           0 : void MediaWindowImpl::setPosSize( const Rectangle& rRect )
     551             : {
     552           0 :     SetPosSizePixel( rRect.TopLeft(), rRect.GetSize() );
     553           0 : }
     554             : 
     555             : 
     556             : 
     557           0 : void MediaWindowImpl::setPointer( const Pointer& rPointer )
     558             : {
     559           0 :     SetPointer( rPointer );
     560           0 :     maChildWindow.SetPointer( rPointer );
     561             : 
     562           0 :     if( mxPlayerWindow.is() )
     563             :     {
     564             :         long nPointer;
     565             : 
     566           0 :         switch( rPointer.GetStyle() )
     567             :         {
     568           0 :             case( POINTER_CROSS ): nPointer = awt::SystemPointer::CROSS; break;
     569           0 :             case( POINTER_HAND ): nPointer = awt::SystemPointer::HAND; break;
     570           0 :             case( POINTER_MOVE ): nPointer = awt::SystemPointer::MOVE; break;
     571           0 :             case( POINTER_WAIT ): nPointer = awt::SystemPointer::WAIT; break;
     572             : 
     573           0 :             default: nPointer = awt::SystemPointer::ARROW; break;
     574             :         }
     575             : 
     576           0 :         mxPlayerWindow->setPointerType( nPointer );
     577             :     }
     578           0 : }
     579             : 
     580             : 
     581             : 
     582           0 : void MediaWindowImpl::Resize()
     583             : {
     584           0 :     const Size                              aCurSize( GetOutputSizePixel() );
     585           0 :     const sal_Int32                         nOffset( mpMediaWindowControl ? AVMEDIA_CONTROLOFFSET : 0 );
     586           0 :     Size                                    aPlayerWindowSize( aCurSize.Width() - ( nOffset << 1 ),
     587           0 :                                                                aCurSize.Height() - ( nOffset << 1 ) );
     588             : 
     589           0 :     if( mpMediaWindowControl )
     590             :     {
     591           0 :         const sal_Int32 nControlHeight = mpMediaWindowControl->GetSizePixel().Height();
     592           0 :         const sal_Int32 nControlY = ::std::max( aCurSize.Height() - nControlHeight - nOffset, 0L );
     593             : 
     594           0 :         aPlayerWindowSize.Height() = ( nControlY - ( nOffset << 1 ) );
     595           0 :         mpMediaWindowControl->SetPosSizePixel( Point( nOffset, nControlY ), Size( aCurSize.Width() - ( nOffset << 1 ), nControlHeight ) );
     596             :     }
     597             : 
     598           0 :     if( mxPlayerWindow.is() )
     599           0 :         mxPlayerWindow->setPosSize( 0, 0, aPlayerWindowSize.Width(), aPlayerWindowSize.Height(), 0 );
     600             : 
     601           0 :     maChildWindow.SetPosSizePixel( Point( 0, 0 ), aPlayerWindowSize );
     602           0 : }
     603             : 
     604             : 
     605             : 
     606           0 : void MediaWindowImpl::StateChanged( StateChangedType eType )
     607             : {
     608           0 :     if( mxPlayerWindow.is() )
     609             :     {
     610             :         // stop playing when going disabled or hidden
     611           0 :         switch( eType )
     612             :         {
     613             :             case STATE_CHANGE_VISIBLE:
     614             :             {
     615           0 :                 stopPlayingInternal( !IsVisible() );
     616           0 :                 mxPlayerWindow->setVisible( IsVisible() );
     617             :             }
     618           0 :             break;
     619             : 
     620             :             case STATE_CHANGE_ENABLE:
     621             :             {
     622           0 :                 stopPlayingInternal( !IsEnabled() );
     623           0 :                 mxPlayerWindow->setEnable( IsEnabled() );
     624             :             }
     625           0 :             break;
     626             : 
     627             :             default:
     628           0 :             break;
     629             :         }
     630             :     }
     631           0 : }
     632             : 
     633             : 
     634             : 
     635           0 : void MediaWindowImpl::Paint( const Rectangle& )
     636             : {
     637           0 :     BitmapEx* pLogo = NULL;
     638             : 
     639           0 :     if( !mxPlayer.is() )
     640             :     {
     641           0 :         if( !mpEmptyBmpEx )
     642           0 :             mpEmptyBmpEx = new BitmapEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) );
     643             : 
     644           0 :         pLogo = mpEmptyBmpEx;
     645             :     }
     646           0 :     else if( !mxPlayerWindow.is() )
     647             :     {
     648           0 :         if( !mpAudioBmpEx )
     649           0 :             mpAudioBmpEx = new BitmapEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) );
     650             : 
     651           0 :         pLogo = mpAudioBmpEx;
     652             :     }
     653             : 
     654           0 :     const Point     aBasePos( maChildWindow.GetPosPixel() );
     655           0 :     const Rectangle aVideoRect( aBasePos, maChildWindow.GetSizePixel() );
     656             : 
     657           0 :     if( pLogo && !pLogo->IsEmpty() && ( aVideoRect.GetWidth() > 0 ) && ( aVideoRect.GetHeight() > 0 ) )
     658             :     {
     659           0 :         Size        aLogoSize( pLogo->GetSizePixel() );
     660           0 :         const Color aBackgroundColor( 67, 67, 67 );
     661             : 
     662           0 :         SetLineColor( aBackgroundColor );
     663           0 :         SetFillColor( aBackgroundColor );
     664           0 :         DrawRect( aVideoRect );
     665             : 
     666           0 :         if( ( aLogoSize.Width() > aVideoRect.GetWidth() || aLogoSize.Height() > aVideoRect.GetHeight() ) &&
     667           0 :             ( aLogoSize.Height() > 0 ) )
     668             :         {
     669           0 :             const double fLogoWH = (double) aLogoSize.Width() / aLogoSize.Height();
     670             : 
     671           0 :             if( fLogoWH < ( (double) aVideoRect.GetWidth() / aVideoRect.GetHeight() ) )
     672             :             {
     673           0 :                 aLogoSize.Width() = (long) ( aVideoRect.GetHeight() * fLogoWH );
     674           0 :                 aLogoSize.Height()= aVideoRect.GetHeight();
     675             :             }
     676             :             else
     677             :             {
     678           0 :                 aLogoSize.Width() = aVideoRect.GetWidth();
     679           0 :                 aLogoSize.Height()= (long) ( aVideoRect.GetWidth() / fLogoWH );
     680             :             }
     681             :         }
     682             : 
     683           0 :         DrawBitmapEx( Point( aBasePos.X() + ( ( aVideoRect.GetWidth() - aLogoSize.Width() ) >> 1 ),
     684           0 :                              aBasePos.Y() + ( ( aVideoRect.GetHeight() - aLogoSize.Height() ) >> 1 ) ),
     685           0 :                       aLogoSize, *pLogo );
     686             :     }
     687           0 : }
     688             : 
     689             : 
     690             : 
     691           0 : void MediaWindowImpl::GetFocus()
     692             : {
     693           0 : }
     694             : 
     695             : 
     696             : 
     697           0 : void MediaWindowImpl::MouseMove( const MouseEvent& rMEvt )
     698             : {
     699           0 :     if( mpMediaWindow )
     700           0 :         mpMediaWindow->MouseMove( rMEvt );
     701           0 : }
     702             : 
     703             : 
     704             : 
     705           0 : void MediaWindowImpl::MouseButtonDown( const MouseEvent& rMEvt )
     706             : {
     707           0 :     if( mpMediaWindow )
     708           0 :         mpMediaWindow->MouseButtonDown( rMEvt );
     709           0 : }
     710             : 
     711             : 
     712             : 
     713           0 : void MediaWindowImpl::MouseButtonUp( const MouseEvent& rMEvt )
     714             : {
     715           0 :     if( mpMediaWindow )
     716           0 :         mpMediaWindow->MouseButtonUp( rMEvt );
     717           0 : }
     718             : 
     719             : 
     720             : 
     721           0 : void MediaWindowImpl::KeyInput( const KeyEvent& rKEvt )
     722             : {
     723           0 :     if( mpMediaWindow )
     724           0 :         mpMediaWindow->KeyInput( rKEvt );
     725           0 : }
     726             : 
     727             : 
     728             : 
     729           0 : void MediaWindowImpl::KeyUp( const KeyEvent& rKEvt )
     730             : {
     731           0 :     if( mpMediaWindow )
     732           0 :         mpMediaWindow->KeyUp( rKEvt );
     733           0 : }
     734             : 
     735             : 
     736             : 
     737           0 : void MediaWindowImpl::Command( const CommandEvent& rCEvt )
     738             : {
     739           0 :     if( mpMediaWindow )
     740           0 :         mpMediaWindow->Command( rCEvt );
     741           0 : }
     742             : 
     743             : 
     744             : 
     745           0 : sal_Int8 MediaWindowImpl::AcceptDrop( const AcceptDropEvent& rEvt )
     746             : {
     747           0 :     return( mpMediaWindow ? mpMediaWindow->AcceptDrop( rEvt ) : 0 );
     748             : }
     749             : 
     750             : 
     751             : 
     752           0 : sal_Int8 MediaWindowImpl::ExecuteDrop( const ExecuteDropEvent& rEvt )
     753             : {
     754           0 :     return( mpMediaWindow ? mpMediaWindow->ExecuteDrop( rEvt ) : 0 );
     755             : }
     756             : 
     757             : 
     758             : 
     759           0 : void MediaWindowImpl::StartDrag( sal_Int8 nAction, const Point& rPosPixel )
     760             : {
     761           0 :     if( mpMediaWindow )
     762           0 :         mpMediaWindow->StartDrag( nAction, rPosPixel );
     763           0 : }
     764             : 
     765             : } // namespace priv
     766           0 : } // namespace avmedia
     767             : 
     768             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10