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