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