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 <tools/prex.h>
29*cdf0e10cSrcweir #include <tools/postx.h>
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <com/sun/star/awt/SystemPointer.hdl>
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #include "gstwindow.hxx"
34*cdf0e10cSrcweir #include "gstplayer.hxx"
35*cdf0e10cSrcweir #include <vcl/syschild.hxx>
36*cdf0e10cSrcweir #include <vcl/sysdata.hxx>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir using namespace ::com::sun::star;
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir namespace avmedia
41*cdf0e10cSrcweir {
42*cdf0e10cSrcweir namespace gst
43*cdf0e10cSrcweir {
44*cdf0e10cSrcweir // ---------------------
45*cdf0e10cSrcweir // - PlayerChildWindow -
46*cdf0e10cSrcweir // ---------------------
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir class PlayerChildWindow : public SystemChildWindow
49*cdf0e10cSrcweir {
50*cdf0e10cSrcweir public:
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir                     PlayerChildWindow( Window* pParent );
53*cdf0e10cSrcweir                     ~PlayerChildWindow();
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir protected:
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir     virtual void    MouseMove( const MouseEvent& rMEvt );
58*cdf0e10cSrcweir     virtual void    MouseButtonDown( const MouseEvent& rMEvt );
59*cdf0e10cSrcweir     virtual void    MouseButtonUp( const MouseEvent& rMEvt );
60*cdf0e10cSrcweir     virtual void    KeyInput( const KeyEvent& rKEvt );
61*cdf0e10cSrcweir     virtual void    KeyUp( const KeyEvent& rKEvt );
62*cdf0e10cSrcweir     virtual void    Command( const CommandEvent& rCEvt );
63*cdf0e10cSrcweir };
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir // ---------------------------------------------------------------------
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir PlayerChildWindow::PlayerChildWindow( Window* pParent ) :
68*cdf0e10cSrcweir     SystemChildWindow( pParent, WB_CLIPCHILDREN )
69*cdf0e10cSrcweir {
70*cdf0e10cSrcweir }
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir // ---------------------------------------------------------------------
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir PlayerChildWindow::~PlayerChildWindow()
75*cdf0e10cSrcweir {
76*cdf0e10cSrcweir }
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir // ---------------------------------------------------------------------
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir void PlayerChildWindow::MouseMove( const MouseEvent& rMEvt )
81*cdf0e10cSrcweir {
82*cdf0e10cSrcweir     const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
83*cdf0e10cSrcweir                                         rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir     SystemChildWindow::MouseMove( rMEvt );
86*cdf0e10cSrcweir     GetParent()->MouseMove( aTransformedEvent );
87*cdf0e10cSrcweir }
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir // ---------------------------------------------------------------------
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir void PlayerChildWindow::MouseButtonDown( const MouseEvent& rMEvt )
92*cdf0e10cSrcweir {
93*cdf0e10cSrcweir     const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
94*cdf0e10cSrcweir                                         rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir     SystemChildWindow::MouseButtonDown( rMEvt );
97*cdf0e10cSrcweir     GetParent()->MouseButtonDown( aTransformedEvent );
98*cdf0e10cSrcweir }
99*cdf0e10cSrcweir 
100*cdf0e10cSrcweir // ---------------------------------------------------------------------
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir void PlayerChildWindow::MouseButtonUp( const MouseEvent& rMEvt )
103*cdf0e10cSrcweir {
104*cdf0e10cSrcweir     const MouseEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rMEvt.GetPosPixel() ) ),
105*cdf0e10cSrcweir                                         rMEvt.GetClicks(), rMEvt.GetMode(), rMEvt.GetButtons(), rMEvt.GetModifier() );
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir     SystemChildWindow::MouseButtonUp( rMEvt );
108*cdf0e10cSrcweir     GetParent()->MouseButtonUp( aTransformedEvent );
109*cdf0e10cSrcweir }
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir // ---------------------------------------------------------------------
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir void PlayerChildWindow::KeyInput( const KeyEvent& rKEvt )
114*cdf0e10cSrcweir {
115*cdf0e10cSrcweir     SystemChildWindow::KeyInput( rKEvt );
116*cdf0e10cSrcweir     GetParent()->KeyInput( rKEvt );
117*cdf0e10cSrcweir }
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir // ---------------------------------------------------------------------
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir void PlayerChildWindow::KeyUp( const KeyEvent& rKEvt )
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir     SystemChildWindow::KeyUp( rKEvt );
124*cdf0e10cSrcweir     GetParent()->KeyUp( rKEvt );
125*cdf0e10cSrcweir }
126*cdf0e10cSrcweir 
127*cdf0e10cSrcweir // ---------------------------------------------------------------------
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir void PlayerChildWindow::Command( const CommandEvent& rCEvt )
130*cdf0e10cSrcweir {
131*cdf0e10cSrcweir     const CommandEvent aTransformedEvent( GetParent()->ScreenToOutputPixel( OutputToScreenPixel( rCEvt.GetMousePosPixel() ) ),
132*cdf0e10cSrcweir                                           rCEvt.GetCommand(), rCEvt.IsMouseEvent(), rCEvt.GetData() );
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir     SystemChildWindow::Command( rCEvt );
135*cdf0e10cSrcweir     GetParent()->Command( aTransformedEvent );
136*cdf0e10cSrcweir }
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir // ---------------
139*cdf0e10cSrcweir // - Window -
140*cdf0e10cSrcweir // ---------------
141*cdf0e10cSrcweir Window::Window( ::avmedia::gst::Player& rPlayer ) :
142*cdf0e10cSrcweir     maListeners( maMutex ),
143*cdf0e10cSrcweir     maWindowRect( 0, 0, 0, 0 ),
144*cdf0e10cSrcweir     mrPlayer( rPlayer ),
145*cdf0e10cSrcweir     mpPlayerWindow( NULL ),
146*cdf0e10cSrcweir     meZoomLevel( media::ZoomLevel_NOT_AVAILABLE ),
147*cdf0e10cSrcweir     mnPointerType( awt::SystemPointer::ARROW )
148*cdf0e10cSrcweir {}
149*cdf0e10cSrcweir 
150*cdf0e10cSrcweir // ------------------------------------------------------------------------------
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir Window::~Window()
153*cdf0e10cSrcweir {
154*cdf0e10cSrcweir     dispose();
155*cdf0e10cSrcweir }
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir // ------------------------------------------------------------------------------
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir void Window::implLayoutVideoWindow()
160*cdf0e10cSrcweir {
161*cdf0e10cSrcweir     if( mpPlayerWindow && ( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel ) )
162*cdf0e10cSrcweir     {
163*cdf0e10cSrcweir         awt::Size aPrefSize( mrPlayer.getPreferredPlayerWindowSize() );
164*cdf0e10cSrcweir         awt::Rectangle aRect = getPosSize();
165*cdf0e10cSrcweir         int nW = aRect.Width, nH = aRect.Height;
166*cdf0e10cSrcweir         int nVideoW = nW, nVideoH = nH;
167*cdf0e10cSrcweir         int nX = 0, nY = 0, nWidth = 0, nHeight = 0;
168*cdf0e10cSrcweir         bool bDone = false, bZoom = false;
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir         if( media::ZoomLevel_ORIGINAL == meZoomLevel )
171*cdf0e10cSrcweir         {
172*cdf0e10cSrcweir             bZoom = true;
173*cdf0e10cSrcweir         }
174*cdf0e10cSrcweir         else if( media::ZoomLevel_ZOOM_1_TO_4 == meZoomLevel )
175*cdf0e10cSrcweir         {
176*cdf0e10cSrcweir             aPrefSize.Width >>= 2;
177*cdf0e10cSrcweir             aPrefSize.Height >>= 2;
178*cdf0e10cSrcweir             bZoom = true;
179*cdf0e10cSrcweir         }
180*cdf0e10cSrcweir         else if( media::ZoomLevel_ZOOM_1_TO_2 == meZoomLevel )
181*cdf0e10cSrcweir         {
182*cdf0e10cSrcweir             aPrefSize.Width >>= 1;
183*cdf0e10cSrcweir             aPrefSize.Height >>= 1;
184*cdf0e10cSrcweir             bZoom = true;
185*cdf0e10cSrcweir         }
186*cdf0e10cSrcweir         else if( media::ZoomLevel_ZOOM_2_TO_1 == meZoomLevel )
187*cdf0e10cSrcweir         {
188*cdf0e10cSrcweir             aPrefSize.Width <<= 1;
189*cdf0e10cSrcweir             aPrefSize.Height <<= 1;
190*cdf0e10cSrcweir             bZoom = true;
191*cdf0e10cSrcweir         }
192*cdf0e10cSrcweir         else if( media::ZoomLevel_ZOOM_4_TO_1 == meZoomLevel )
193*cdf0e10cSrcweir         {
194*cdf0e10cSrcweir             aPrefSize.Width <<= 2;
195*cdf0e10cSrcweir             aPrefSize.Height <<= 2;
196*cdf0e10cSrcweir             bZoom = true;
197*cdf0e10cSrcweir         }
198*cdf0e10cSrcweir         else if( media::ZoomLevel_FIT_TO_WINDOW == meZoomLevel )
199*cdf0e10cSrcweir         {
200*cdf0e10cSrcweir             nWidth = nVideoW;
201*cdf0e10cSrcweir             nHeight = nVideoH;
202*cdf0e10cSrcweir             bDone = true;
203*cdf0e10cSrcweir         }
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir         if( bZoom )
206*cdf0e10cSrcweir         {
207*cdf0e10cSrcweir             if( ( aPrefSize.Width <= nVideoW ) && ( aPrefSize.Height <= nVideoH ) )
208*cdf0e10cSrcweir             {
209*cdf0e10cSrcweir                 nX = ( nVideoW - aPrefSize.Width ) >> 1;
210*cdf0e10cSrcweir                 nY = ( nVideoH - aPrefSize.Height ) >> 1;
211*cdf0e10cSrcweir                 nWidth = aPrefSize.Width;
212*cdf0e10cSrcweir                 nHeight = aPrefSize.Height;
213*cdf0e10cSrcweir                 bDone = true;
214*cdf0e10cSrcweir             }
215*cdf0e10cSrcweir         }
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir         if( !bDone )
218*cdf0e10cSrcweir         {
219*cdf0e10cSrcweir             if( ( aPrefSize.Width > 0 ) && ( aPrefSize.Height > 0 ) && ( nVideoW > 0 ) && ( nVideoH > 0 ) )
220*cdf0e10cSrcweir             {
221*cdf0e10cSrcweir                 double fPrefWH = (double) aPrefSize.Width / aPrefSize.Height;
222*cdf0e10cSrcweir 
223*cdf0e10cSrcweir                 if( fPrefWH < ( (double) nVideoW / nVideoH ) )
224*cdf0e10cSrcweir                 {
225*cdf0e10cSrcweir                     nVideoW = (int) ( nVideoH * fPrefWH );
226*cdf0e10cSrcweir                 }
227*cdf0e10cSrcweir                 else
228*cdf0e10cSrcweir                 {
229*cdf0e10cSrcweir                     nVideoH = (int) ( nVideoW / fPrefWH );
230*cdf0e10cSrcweir                 }
231*cdf0e10cSrcweir 
232*cdf0e10cSrcweir                 nX = ( nW - nVideoW ) >> 1;
233*cdf0e10cSrcweir                 nY = ( nH - nVideoH ) >> 1;
234*cdf0e10cSrcweir                 nWidth = nVideoW;
235*cdf0e10cSrcweir                 nHeight = nVideoH;
236*cdf0e10cSrcweir             }
237*cdf0e10cSrcweir             else
238*cdf0e10cSrcweir             {
239*cdf0e10cSrcweir                 nX = nY = nWidth = nHeight = 0;
240*cdf0e10cSrcweir             }
241*cdf0e10cSrcweir         }
242*cdf0e10cSrcweir 
243*cdf0e10cSrcweir         mpPlayerWindow->SetPosSizePixel( Point( nX, nY ), Size( nWidth, nHeight ) );
244*cdf0e10cSrcweir     }
245*cdf0e10cSrcweir }
246*cdf0e10cSrcweir 
247*cdf0e10cSrcweir // ------------------------------------------------------------------------------
248*cdf0e10cSrcweir 
249*cdf0e10cSrcweir bool Window::create( const uno::Sequence< uno::Any >& rArguments )
250*cdf0e10cSrcweir {
251*cdf0e10cSrcweir     OSL_ASSERT( !mpPlayerWindow );
252*cdf0e10cSrcweir     OSL_ENSURE( rArguments.getLength() > 2,
253*cdf0e10cSrcweir "::avmedia::gst::Windiow::create: GStreamer backend needs \
254*cdf0e10cSrcweir valid parent SystemChildWindow pointer (sal_IntPtr) as third Any \
255*cdf0e10cSrcweir value in sequence of arguments" );
256*cdf0e10cSrcweir 
257*cdf0e10cSrcweir     bool bRet = false;
258*cdf0e10cSrcweir 
259*cdf0e10cSrcweir     if( !mpPlayerWindow && ( rArguments.getLength() > 2 ) )
260*cdf0e10cSrcweir     {
261*cdf0e10cSrcweir         SystemChildWindow* pParentWindow = NULL;
262*cdf0e10cSrcweir         sal_IntPtr pIntPtr = 0;
263*cdf0e10cSrcweir 
264*cdf0e10cSrcweir         // we are not interested in the first argument, which is a pure X11 window handle;
265*cdf0e10cSrcweir         // this backend relies on a SystemChildWindow as parent for the PlayerWindow, given
266*cdf0e10cSrcweir         // as third Sal_IntPtr value within the argument Sequence
267*cdf0e10cSrcweir         rArguments[ 1 ] >>= maWindowRect;
268*cdf0e10cSrcweir 
269*cdf0e10cSrcweir         rArguments[ 2 ] >>= pIntPtr;
270*cdf0e10cSrcweir         pParentWindow = reinterpret_cast< SystemChildWindow* >( pIntPtr );
271*cdf0e10cSrcweir 
272*cdf0e10cSrcweir         if( pParentWindow )
273*cdf0e10cSrcweir         {
274*cdf0e10cSrcweir             meZoomLevel = media::ZoomLevel_FIT_TO_WINDOW;
275*cdf0e10cSrcweir 
276*cdf0e10cSrcweir             mpPlayerWindow = new PlayerChildWindow( pParentWindow );
277*cdf0e10cSrcweir             mpPlayerWindow->SetBackground( Color( COL_BLACK ) );
278*cdf0e10cSrcweir             mpPlayerWindow->SetPosSizePixel( Point( maWindowRect.X, maWindowRect.Y ),
279*cdf0e10cSrcweir                                             Size( maWindowRect.Width, maWindowRect.Height ) );
280*cdf0e10cSrcweir             mpPlayerWindow->Show();
281*cdf0e10cSrcweir 
282*cdf0e10cSrcweir             bRet = true;
283*cdf0e10cSrcweir         }
284*cdf0e10cSrcweir     }
285*cdf0e10cSrcweir 
286*cdf0e10cSrcweir     return( bRet );
287*cdf0e10cSrcweir }
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir // ------------------------------------------------------------------------------
290*cdf0e10cSrcweir 
291*cdf0e10cSrcweir void SAL_CALL Window::update()
292*cdf0e10cSrcweir      throw( uno::RuntimeException )
293*cdf0e10cSrcweir {
294*cdf0e10cSrcweir     if( mpPlayerWindow )
295*cdf0e10cSrcweir     {
296*cdf0e10cSrcweir         mpPlayerWindow->Invalidate( INVALIDATE_UPDATE );
297*cdf0e10cSrcweir         mpPlayerWindow->Sync();
298*cdf0e10cSrcweir     }
299*cdf0e10cSrcweir }
300*cdf0e10cSrcweir 
301*cdf0e10cSrcweir // ------------------------------------------------------------------------------
302*cdf0e10cSrcweir 
303*cdf0e10cSrcweir sal_Bool SAL_CALL Window::setZoomLevel( media::ZoomLevel eZoomLevel )
304*cdf0e10cSrcweir      throw(uno::RuntimeException)
305*cdf0e10cSrcweir {
306*cdf0e10cSrcweir     bool bRet = false;
307*cdf0e10cSrcweir 
308*cdf0e10cSrcweir     if( ( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel ) &&
309*cdf0e10cSrcweir        ( media::ZoomLevel_NOT_AVAILABLE != eZoomLevel ) )
310*cdf0e10cSrcweir     {
311*cdf0e10cSrcweir         if( eZoomLevel != meZoomLevel )
312*cdf0e10cSrcweir         {
313*cdf0e10cSrcweir             meZoomLevel = eZoomLevel;
314*cdf0e10cSrcweir             implLayoutVideoWindow();
315*cdf0e10cSrcweir         }
316*cdf0e10cSrcweir 
317*cdf0e10cSrcweir         bRet = true;
318*cdf0e10cSrcweir     }
319*cdf0e10cSrcweir 
320*cdf0e10cSrcweir     return( bRet );
321*cdf0e10cSrcweir }
322*cdf0e10cSrcweir 
323*cdf0e10cSrcweir // ------------------------------------------------------------------------------
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir media::ZoomLevel SAL_CALL Window::getZoomLevel()
326*cdf0e10cSrcweir      throw( uno::RuntimeException )
327*cdf0e10cSrcweir {
328*cdf0e10cSrcweir     return( meZoomLevel );
329*cdf0e10cSrcweir }
330*cdf0e10cSrcweir 
331*cdf0e10cSrcweir // ------------------------------------------------------------------------------
332*cdf0e10cSrcweir 
333*cdf0e10cSrcweir void SAL_CALL Window::setPointerType( sal_Int32 nPointerType )
334*cdf0e10cSrcweir      throw( uno::RuntimeException )
335*cdf0e10cSrcweir {
336*cdf0e10cSrcweir     if( mpPlayerWindow )
337*cdf0e10cSrcweir     {
338*cdf0e10cSrcweir         Pointer ePointer = POINTER_ARROW;
339*cdf0e10cSrcweir 
340*cdf0e10cSrcweir         switch( nPointerType )
341*cdf0e10cSrcweir         {
342*cdf0e10cSrcweir             case (awt::SystemPointer::CROSS) :
343*cdf0e10cSrcweir             {
344*cdf0e10cSrcweir                 ePointer = POINTER_CROSS;
345*cdf0e10cSrcweir             }
346*cdf0e10cSrcweir             break;
347*cdf0e10cSrcweir 
348*cdf0e10cSrcweir             case (awt::SystemPointer::HAND) :
349*cdf0e10cSrcweir             {
350*cdf0e10cSrcweir                 ePointer = POINTER_HAND;
351*cdf0e10cSrcweir             }
352*cdf0e10cSrcweir             break;
353*cdf0e10cSrcweir 
354*cdf0e10cSrcweir             case (awt::SystemPointer::MOVE) :
355*cdf0e10cSrcweir             {
356*cdf0e10cSrcweir                 ePointer = POINTER_MOVE;
357*cdf0e10cSrcweir             }
358*cdf0e10cSrcweir             break;
359*cdf0e10cSrcweir 
360*cdf0e10cSrcweir             case (awt::SystemPointer::WAIT) :
361*cdf0e10cSrcweir             {
362*cdf0e10cSrcweir                 ePointer = POINTER_WAIT;
363*cdf0e10cSrcweir             }
364*cdf0e10cSrcweir             break;
365*cdf0e10cSrcweir 
366*cdf0e10cSrcweir             default:
367*cdf0e10cSrcweir             break;
368*cdf0e10cSrcweir         }
369*cdf0e10cSrcweir 
370*cdf0e10cSrcweir         mpPlayerWindow->SetPointer( ePointer );
371*cdf0e10cSrcweir     }
372*cdf0e10cSrcweir }
373*cdf0e10cSrcweir 
374*cdf0e10cSrcweir // ------------------------------------------------------------------------------
375*cdf0e10cSrcweir 
376*cdf0e10cSrcweir void SAL_CALL Window::setPosSize( sal_Int32 nX,
377*cdf0e10cSrcweir                                   sal_Int32 nY,
378*cdf0e10cSrcweir                                   sal_Int32 nWidth,
379*cdf0e10cSrcweir                                   sal_Int32 nHeight,
380*cdf0e10cSrcweir                                   sal_Int16 /* Flags */ )
381*cdf0e10cSrcweir      throw( uno::RuntimeException )
382*cdf0e10cSrcweir {
383*cdf0e10cSrcweir     maWindowRect.X = nX;
384*cdf0e10cSrcweir     maWindowRect.Y = nY;
385*cdf0e10cSrcweir     maWindowRect.Width = nWidth;
386*cdf0e10cSrcweir     maWindowRect.Height = nHeight;
387*cdf0e10cSrcweir 
388*cdf0e10cSrcweir     implLayoutVideoWindow();
389*cdf0e10cSrcweir }
390*cdf0e10cSrcweir 
391*cdf0e10cSrcweir // ------------------------------------------------------------------------------
392*cdf0e10cSrcweir 
393*cdf0e10cSrcweir awt::Rectangle SAL_CALL Window::getPosSize()
394*cdf0e10cSrcweir      throw( uno::RuntimeException )
395*cdf0e10cSrcweir {
396*cdf0e10cSrcweir     return( maWindowRect );
397*cdf0e10cSrcweir }
398*cdf0e10cSrcweir 
399*cdf0e10cSrcweir // ------------------------------------------------------------------------------
400*cdf0e10cSrcweir 
401*cdf0e10cSrcweir void SAL_CALL Window::setVisible( sal_Bool bVisible )
402*cdf0e10cSrcweir      throw( uno::RuntimeException )
403*cdf0e10cSrcweir {
404*cdf0e10cSrcweir     if( mpPlayerWindow )
405*cdf0e10cSrcweir     {
406*cdf0e10cSrcweir         bVisible ? mpPlayerWindow->Show() : mpPlayerWindow->Hide();
407*cdf0e10cSrcweir     }
408*cdf0e10cSrcweir }
409*cdf0e10cSrcweir 
410*cdf0e10cSrcweir // ------------------------------------------------------------------------------
411*cdf0e10cSrcweir 
412*cdf0e10cSrcweir void SAL_CALL Window::setEnable( sal_Bool bEnable )
413*cdf0e10cSrcweir      throw( uno::RuntimeException )
414*cdf0e10cSrcweir {
415*cdf0e10cSrcweir     if( mpPlayerWindow )
416*cdf0e10cSrcweir     {
417*cdf0e10cSrcweir         mpPlayerWindow->Enable( bEnable );
418*cdf0e10cSrcweir     }
419*cdf0e10cSrcweir }
420*cdf0e10cSrcweir 
421*cdf0e10cSrcweir // ------------------------------------------------------------------------------
422*cdf0e10cSrcweir 
423*cdf0e10cSrcweir void SAL_CALL Window::setFocus()
424*cdf0e10cSrcweir      throw( uno::RuntimeException )
425*cdf0e10cSrcweir {
426*cdf0e10cSrcweir     if( mpPlayerWindow )
427*cdf0e10cSrcweir     {
428*cdf0e10cSrcweir         mpPlayerWindow->GrabFocus();
429*cdf0e10cSrcweir     }
430*cdf0e10cSrcweir }
431*cdf0e10cSrcweir 
432*cdf0e10cSrcweir // ------------------------------------------------------------------------------
433*cdf0e10cSrcweir 
434*cdf0e10cSrcweir void SAL_CALL Window::addWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
435*cdf0e10cSrcweir      throw( uno::RuntimeException )
436*cdf0e10cSrcweir {
437*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
438*cdf0e10cSrcweir }
439*cdf0e10cSrcweir 
440*cdf0e10cSrcweir // ------------------------------------------------------------------------------
441*cdf0e10cSrcweir 
442*cdf0e10cSrcweir void SAL_CALL Window::removeWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
443*cdf0e10cSrcweir      throw( uno::RuntimeException )
444*cdf0e10cSrcweir {
445*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
446*cdf0e10cSrcweir }
447*cdf0e10cSrcweir 
448*cdf0e10cSrcweir // ------------------------------------------------------------------------------
449*cdf0e10cSrcweir 
450*cdf0e10cSrcweir void SAL_CALL Window::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
451*cdf0e10cSrcweir      throw( uno::RuntimeException )
452*cdf0e10cSrcweir {
453*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
454*cdf0e10cSrcweir }
455*cdf0e10cSrcweir 
456*cdf0e10cSrcweir // ------------------------------------------------------------------------------
457*cdf0e10cSrcweir 
458*cdf0e10cSrcweir void SAL_CALL Window::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
459*cdf0e10cSrcweir      throw( uno::RuntimeException )
460*cdf0e10cSrcweir {
461*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
462*cdf0e10cSrcweir }
463*cdf0e10cSrcweir 
464*cdf0e10cSrcweir // ------------------------------------------------------------------------------
465*cdf0e10cSrcweir 
466*cdf0e10cSrcweir void SAL_CALL Window::addKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
467*cdf0e10cSrcweir      throw( uno::RuntimeException )
468*cdf0e10cSrcweir {
469*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
470*cdf0e10cSrcweir }
471*cdf0e10cSrcweir 
472*cdf0e10cSrcweir // ------------------------------------------------------------------------------
473*cdf0e10cSrcweir 
474*cdf0e10cSrcweir void SAL_CALL Window::removeKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
475*cdf0e10cSrcweir      throw( uno::RuntimeException )
476*cdf0e10cSrcweir {
477*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
478*cdf0e10cSrcweir }
479*cdf0e10cSrcweir 
480*cdf0e10cSrcweir // ------------------------------------------------------------------------------
481*cdf0e10cSrcweir 
482*cdf0e10cSrcweir void SAL_CALL Window::addMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
483*cdf0e10cSrcweir      throw( uno::RuntimeException )
484*cdf0e10cSrcweir {
485*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
486*cdf0e10cSrcweir }
487*cdf0e10cSrcweir 
488*cdf0e10cSrcweir // ------------------------------------------------------------------------------
489*cdf0e10cSrcweir 
490*cdf0e10cSrcweir void SAL_CALL Window::removeMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
491*cdf0e10cSrcweir      throw( uno::RuntimeException )
492*cdf0e10cSrcweir {
493*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
494*cdf0e10cSrcweir }
495*cdf0e10cSrcweir 
496*cdf0e10cSrcweir // ------------------------------------------------------------------------------
497*cdf0e10cSrcweir 
498*cdf0e10cSrcweir void SAL_CALL Window::addMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
499*cdf0e10cSrcweir      throw( uno::RuntimeException )
500*cdf0e10cSrcweir {
501*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
502*cdf0e10cSrcweir }
503*cdf0e10cSrcweir 
504*cdf0e10cSrcweir // ------------------------------------------------------------------------------
505*cdf0e10cSrcweir 
506*cdf0e10cSrcweir void SAL_CALL Window::removeMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
507*cdf0e10cSrcweir      throw( uno::RuntimeException )
508*cdf0e10cSrcweir {
509*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
510*cdf0e10cSrcweir }
511*cdf0e10cSrcweir 
512*cdf0e10cSrcweir // ------------------------------------------------------------------------------
513*cdf0e10cSrcweir 
514*cdf0e10cSrcweir void SAL_CALL Window::addPaintListener( const uno::Reference< awt::XPaintListener >& xListener )
515*cdf0e10cSrcweir      throw( uno::RuntimeException )
516*cdf0e10cSrcweir {
517*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
518*cdf0e10cSrcweir }
519*cdf0e10cSrcweir 
520*cdf0e10cSrcweir // ------------------------------------------------------------------------------
521*cdf0e10cSrcweir 
522*cdf0e10cSrcweir void SAL_CALL Window::removePaintListener( const uno::Reference< awt::XPaintListener >& xListener )
523*cdf0e10cSrcweir      throw( uno::RuntimeException )
524*cdf0e10cSrcweir {
525*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
526*cdf0e10cSrcweir }
527*cdf0e10cSrcweir 
528*cdf0e10cSrcweir // ------------------------------------------------------------------------------
529*cdf0e10cSrcweir 
530*cdf0e10cSrcweir void SAL_CALL Window::dispose()
531*cdf0e10cSrcweir      throw( uno::RuntimeException )
532*cdf0e10cSrcweir {
533*cdf0e10cSrcweir     delete mpPlayerWindow;
534*cdf0e10cSrcweir     mpPlayerWindow = NULL;
535*cdf0e10cSrcweir }
536*cdf0e10cSrcweir 
537*cdf0e10cSrcweir // ------------------------------------------------------------------------------
538*cdf0e10cSrcweir 
539*cdf0e10cSrcweir void SAL_CALL Window::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
540*cdf0e10cSrcweir      throw( uno::RuntimeException )
541*cdf0e10cSrcweir {
542*cdf0e10cSrcweir     maListeners.addInterface( getCppuType( &xListener ), xListener );
543*cdf0e10cSrcweir }
544*cdf0e10cSrcweir 
545*cdf0e10cSrcweir // ------------------------------------------------------------------------------
546*cdf0e10cSrcweir 
547*cdf0e10cSrcweir void SAL_CALL Window::removeEventListener( const uno::Reference< lang::XEventListener >&
548*cdf0e10cSrcweir                                            xListener )
549*cdf0e10cSrcweir      throw( uno::RuntimeException )
550*cdf0e10cSrcweir {
551*cdf0e10cSrcweir     maListeners.removeInterface( getCppuType( &xListener ), xListener );
552*cdf0e10cSrcweir }
553*cdf0e10cSrcweir 
554*cdf0e10cSrcweir // ------------------------------------------------------------------------------
555*cdf0e10cSrcweir 
556*cdf0e10cSrcweir void Window::fireMousePressedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
557*cdf0e10cSrcweir {
558*cdf0e10cSrcweir     ::cppu::OInterfaceContainerHelper* pContainer =
559*cdf0e10cSrcweir         maListeners.getContainer( getCppuType( ( uno::Reference< awt::XMouseListener >* ) 0 ) );
560*cdf0e10cSrcweir 
561*cdf0e10cSrcweir     if( pContainer )
562*cdf0e10cSrcweir     {
563*cdf0e10cSrcweir         ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
564*cdf0e10cSrcweir 
565*cdf0e10cSrcweir         while( aIter.hasMoreElements() )
566*cdf0e10cSrcweir         {
567*cdf0e10cSrcweir             uno::Reference< awt::XMouseListener >( aIter.next(),
568*cdf0e10cSrcweir                                                    uno::UNO_QUERY )->mousePressed( rEvt );
569*cdf0e10cSrcweir         }
570*cdf0e10cSrcweir     }
571*cdf0e10cSrcweir }
572*cdf0e10cSrcweir 
573*cdf0e10cSrcweir // -----------------------------------------------------------------------------
574*cdf0e10cSrcweir 
575*cdf0e10cSrcweir void Window::fireMouseReleasedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
576*cdf0e10cSrcweir {
577*cdf0e10cSrcweir     ::cppu::OInterfaceContainerHelper* pContainer =
578*cdf0e10cSrcweir         maListeners.getContainer( getCppuType( ( uno::Reference< awt::XMouseListener >* ) 0 ) );
579*cdf0e10cSrcweir 
580*cdf0e10cSrcweir     if( pContainer )
581*cdf0e10cSrcweir     {
582*cdf0e10cSrcweir         ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
583*cdf0e10cSrcweir 
584*cdf0e10cSrcweir         while( aIter.hasMoreElements() )
585*cdf0e10cSrcweir         {
586*cdf0e10cSrcweir             uno::Reference< awt::XMouseListener >( aIter.next(),
587*cdf0e10cSrcweir                                                    uno::UNO_QUERY )->mouseReleased( rEvt );
588*cdf0e10cSrcweir         }
589*cdf0e10cSrcweir     }
590*cdf0e10cSrcweir }
591*cdf0e10cSrcweir 
592*cdf0e10cSrcweir // -----------------------------------------------------------------------------
593*cdf0e10cSrcweir 
594*cdf0e10cSrcweir void Window::fireMouseMovedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
595*cdf0e10cSrcweir {
596*cdf0e10cSrcweir     ::cppu::OInterfaceContainerHelper* pContainer =
597*cdf0e10cSrcweir         maListeners.getContainer( getCppuType( ( uno::Reference< awt::XMouseMotionListener >* )
598*cdf0e10cSrcweir                                               0 ) );
599*cdf0e10cSrcweir 
600*cdf0e10cSrcweir     if( pContainer )
601*cdf0e10cSrcweir     {
602*cdf0e10cSrcweir         ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
603*cdf0e10cSrcweir 
604*cdf0e10cSrcweir         while( aIter.hasMoreElements() )
605*cdf0e10cSrcweir         {
606*cdf0e10cSrcweir             uno::Reference< awt::XMouseMotionListener >( aIter.next(),
607*cdf0e10cSrcweir                                                          uno::UNO_QUERY )->mouseMoved( rEvt );
608*cdf0e10cSrcweir         }
609*cdf0e10cSrcweir     }
610*cdf0e10cSrcweir }
611*cdf0e10cSrcweir 
612*cdf0e10cSrcweir // -----------------------------------------------------------------------------
613*cdf0e10cSrcweir 
614*cdf0e10cSrcweir void Window::fireSetFocusEvent( const ::com::sun::star::awt::FocusEvent& rEvt )
615*cdf0e10cSrcweir {
616*cdf0e10cSrcweir     ::cppu::OInterfaceContainerHelper* pContainer =
617*cdf0e10cSrcweir         maListeners.getContainer( getCppuType( ( uno::Reference< awt::XFocusListener >* ) 0 ) );
618*cdf0e10cSrcweir 
619*cdf0e10cSrcweir     if( pContainer )
620*cdf0e10cSrcweir     {
621*cdf0e10cSrcweir         ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
622*cdf0e10cSrcweir 
623*cdf0e10cSrcweir         while( aIter.hasMoreElements() )
624*cdf0e10cSrcweir         {
625*cdf0e10cSrcweir             uno::Reference< awt::XFocusListener >( aIter.next(),
626*cdf0e10cSrcweir                                                    uno::UNO_QUERY )->focusGained( rEvt );
627*cdf0e10cSrcweir         }
628*cdf0e10cSrcweir     }
629*cdf0e10cSrcweir }
630*cdf0e10cSrcweir 
631*cdf0e10cSrcweir // ------------------------------------------------------------------------------
632*cdf0e10cSrcweir 
633*cdf0e10cSrcweir long Window::getXWindowHandle() const
634*cdf0e10cSrcweir {
635*cdf0e10cSrcweir     return( mpPlayerWindow ? mpPlayerWindow->GetSystemData()->aWindow : 0 );
636*cdf0e10cSrcweir }
637*cdf0e10cSrcweir 
638*cdf0e10cSrcweir 
639*cdf0e10cSrcweir // ------------------------------------------------------------------------------
640*cdf0e10cSrcweir 
641*cdf0e10cSrcweir ::rtl::OUString SAL_CALL Window::getImplementationName()
642*cdf0e10cSrcweir      throw( uno::RuntimeException )
643*cdf0e10cSrcweir {
644*cdf0e10cSrcweir     return( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
645*cdf0e10cSrcweir                                 AVMEDIA_GSTREAMER_WINDOW_IMPLEMENTATIONNAME ) ) );
646*cdf0e10cSrcweir }
647*cdf0e10cSrcweir 
648*cdf0e10cSrcweir // ------------------------------------------------------------------------------
649*cdf0e10cSrcweir 
650*cdf0e10cSrcweir sal_Bool SAL_CALL Window::supportsService( const ::rtl::OUString& ServiceName )
651*cdf0e10cSrcweir      throw( uno::RuntimeException )
652*cdf0e10cSrcweir {
653*cdf0e10cSrcweir     return( ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
654*cdf0e10cSrcweir                                          AVMEDIA_GSTREAMER_WINDOW_SERVICENAME ) ) );
655*cdf0e10cSrcweir }
656*cdf0e10cSrcweir 
657*cdf0e10cSrcweir // ------------------------------------------------------------------------------
658*cdf0e10cSrcweir 
659*cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > SAL_CALL Window::getSupportedServiceNames()
660*cdf0e10cSrcweir      throw( uno::RuntimeException )
661*cdf0e10cSrcweir {
662*cdf0e10cSrcweir     uno::Sequence< ::rtl::OUString > aRet( 1 );
663*cdf0e10cSrcweir     aRet[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_GSTREAMER_WINDOW_SERVICENAME ) );
664*cdf0e10cSrcweir 
665*cdf0e10cSrcweir     return( aRet );
666*cdf0e10cSrcweir }
667*cdf0e10cSrcweir } // namespace gst
668*cdf0e10cSrcweir } // namespace avmedia
669