1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 #include <tools/prewin.h>
25 #if defined _MSC_VER
26 #pragma warning(push, 1)
27 #pragma warning(disable: 4917)
28 #endif
29 #include <windows.h>
30 #include <objbase.h>
31 #include <strmif.h>
32 #include <control.h>
33 #include <dshow.h>
34 #if defined _MSC_VER
35 #pragma warning(pop)
36 #endif
37 #include <tools/postwin.h>
38 #include <com/sun/star/awt/SystemPointer.hdl>
39
40 #include "window.hxx"
41 #include "player.hxx"
42
43 #define AVMEDIA_WIN_WINDOW_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.Window_DirectX"
44 #define AVMEDIA_WIN_WINDOW_SERVICENAME "com.sun.star.media.Window_DirectX"
45
46 using namespace ::com::sun::star;
47
48 namespace avmedia { namespace win {
49
50 // -----------
51 // - statics -
52 // -----------
53
ImplGetOwnStaticMutex()54 static ::osl::Mutex& ImplGetOwnStaticMutex()
55 {
56 static ::osl::Mutex* pMutex = NULL;
57
58 if( pMutex == NULL )
59 {
60 ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
61
62 if( pMutex == NULL )
63 {
64 static ::osl::Mutex aMutex;
65 pMutex = &aMutex;
66 }
67 }
68
69 return *pMutex;
70 }
71
72 // -----------
73 // - WndProc -
74 // -----------
75
MediaPlayerWndProc(HWND hWnd,UINT nMsg,WPARAM nPar1,LPARAM nPar2)76 LRESULT CALLBACK MediaPlayerWndProc( HWND hWnd,UINT nMsg, WPARAM nPar1, LPARAM nPar2 )
77 {
78 Window* pWindow = (Window*) ::GetWindowLong( hWnd, 0 );
79 bool bProcessed = true;
80
81 if( pWindow )
82 {
83 switch( nMsg )
84 {
85 case( WM_SETCURSOR ):
86 pWindow->updatePointer();
87 break;
88
89 case( WM_GRAPHNOTIFY ):
90 pWindow->processGraphEvent();
91 break;
92
93 case( WM_MOUSEMOVE ):
94 case( WM_LBUTTONDOWN ):
95 case( WM_MBUTTONDOWN ):
96 case( WM_RBUTTONDOWN ):
97 case( WM_LBUTTONUP ):
98 case( WM_MBUTTONUP ):
99 case( WM_RBUTTONUP ):
100 {
101 awt::MouseEvent aUNOEvt;
102 POINT aWinPoint;
103
104 if( !::GetCursorPos( &aWinPoint ) || !::ScreenToClient( hWnd, &aWinPoint ) )
105 {
106 aWinPoint.x = GET_X_LPARAM( nPar2 );
107 aWinPoint.y = GET_Y_LPARAM( nPar2 );
108 }
109 aUNOEvt.Modifiers = 0;
110 aUNOEvt.Buttons = 0;
111 aUNOEvt.X = aWinPoint.x;
112 aUNOEvt.Y = aWinPoint.y;
113 aUNOEvt.PopupTrigger = false;
114
115 // Modifiers
116 if( nPar1 & MK_SHIFT )
117 aUNOEvt.Modifiers |= awt::KeyModifier::SHIFT;
118
119 if( nPar1 & MK_CONTROL )
120 aUNOEvt.Modifiers |= awt::KeyModifier::MOD1;
121
122 // Buttons
123 if( WM_LBUTTONDOWN == nMsg || WM_LBUTTONUP == nMsg )
124 aUNOEvt.Buttons |= awt::MouseButton::LEFT;
125
126 if( WM_MBUTTONDOWN == nMsg || WM_MBUTTONUP == nMsg )
127 aUNOEvt.Buttons |= awt::MouseButton::MIDDLE;
128
129 if( WM_RBUTTONDOWN == nMsg || WM_RBUTTONUP == nMsg )
130 aUNOEvt.Buttons |= awt::MouseButton::RIGHT;
131
132 // event type
133 if( WM_LBUTTONDOWN == nMsg ||
134 WM_MBUTTONDOWN == nMsg ||
135 WM_RBUTTONDOWN == nMsg )
136 {
137 aUNOEvt.ClickCount = 1;
138 pWindow->fireMousePressedEvent( aUNOEvt );
139 }
140 else if( WM_LBUTTONUP == nMsg ||
141 WM_MBUTTONUP == nMsg ||
142 WM_RBUTTONUP == nMsg )
143 {
144 aUNOEvt.ClickCount = 1;
145 pWindow->fireMouseReleasedEvent( aUNOEvt );
146 }
147 else if( WM_MOUSEMOVE == nMsg )
148 {
149 aUNOEvt.ClickCount = 0;
150 pWindow->fireMouseMovedEvent( aUNOEvt );
151 pWindow->updatePointer();
152 }
153 }
154 break;
155
156 case( WM_SETFOCUS ):
157 {
158 const awt::FocusEvent aUNOEvt;
159 pWindow->fireSetFocusEvent( aUNOEvt );
160 }
161 break;
162
163 default:
164 bProcessed = false;
165 break;
166 }
167 }
168 else
169 bProcessed = false;
170
171 return( bProcessed ? 0 : DefWindowProc( hWnd, nMsg, nPar1, nPar2 ) );
172 }
173
174 // ---------------
175 // - Window -
176 // ---------------
177
lcl_getWndClass()178 WNDCLASS* lcl_getWndClass()
179 {
180 static WNDCLASS* s_pWndClass = NULL;
181 if ( !s_pWndClass )
182 {
183 s_pWndClass = new WNDCLASS;
184
185 memset( s_pWndClass, 0, sizeof( *s_pWndClass ) );
186 s_pWndClass->hInstance = GetModuleHandle( NULL );
187 s_pWndClass->cbWndExtra = sizeof( DWORD );
188 s_pWndClass->lpfnWndProc = MediaPlayerWndProc;
189 s_pWndClass->lpszClassName = "com_sun_star_media_PlayerWnd";
190 s_pWndClass->hbrBackground = (HBRUSH) ::GetStockObject( BLACK_BRUSH );
191 s_pWndClass->hCursor = ::LoadCursor( NULL, IDC_ARROW );
192
193 ::RegisterClass( s_pWndClass );
194 }
195 return s_pWndClass;
196 }
197
198 // ------------------------------------------------------------------------------
199
Window(const uno::Reference<lang::XMultiServiceFactory> & rxMgr,Player & rPlayer)200 Window::Window( const uno::Reference< lang::XMultiServiceFactory >& rxMgr, Player& rPlayer ) :
201 mxMgr( rxMgr ),
202 mrPlayer( rPlayer ),
203 meZoomLevel( media::ZoomLevel_NOT_AVAILABLE ),
204 mnParentWnd( 0 ),
205 mnFrameWnd( 0 ),
206 maListeners( maMutex ),
207 mnPointerType( awt::SystemPointer::ARROW )
208 {
209 ::osl::MutexGuard aGuard( ImplGetOwnStaticMutex() );
210
211 lcl_getWndClass();
212 }
213
214 // ------------------------------------------------------------------------------
215
~Window()216 Window::~Window()
217 {
218 if( mnFrameWnd )
219 ::DestroyWindow( (HWND) mnFrameWnd );
220 }
221
222 // ------------------------------------------------------------------------------
223
ImplLayoutVideoWindow()224 void Window::ImplLayoutVideoWindow()
225 {
226 if( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel )
227 {
228 awt::Size aPrefSize( mrPlayer.getPreferredPlayerWindowSize() );
229 awt::Rectangle aRect = getPosSize();
230 int nW = aRect.Width, nH = aRect.Height;
231 int nVideoW = nW, nVideoH = nH;
232 int nX = 0, nY = 0, nWidth = 0, nHeight = 0;
233 bool bDone = false, bZoom = false;
234
235 if( media::ZoomLevel_ORIGINAL == meZoomLevel )
236 {
237 bZoom = true;
238 }
239 else if( media::ZoomLevel_ZOOM_1_TO_4 == meZoomLevel )
240 {
241 aPrefSize.Width >>= 2;
242 aPrefSize.Height >>= 2;
243 bZoom = true;
244 }
245 else if( media::ZoomLevel_ZOOM_1_TO_2 == meZoomLevel )
246 {
247 aPrefSize.Width >>= 1;
248 aPrefSize.Height >>= 1;
249 bZoom = true;
250 }
251 else if( media::ZoomLevel_ZOOM_2_TO_1 == meZoomLevel )
252 {
253 aPrefSize.Width <<= 1;
254 aPrefSize.Height <<= 1;
255 bZoom = true;
256 }
257 else if( media::ZoomLevel_ZOOM_4_TO_1 == meZoomLevel )
258 {
259 aPrefSize.Width <<= 2;
260 aPrefSize.Height <<= 2;
261 bZoom = true;
262 }
263 else if( media::ZoomLevel_FIT_TO_WINDOW == meZoomLevel )
264 {
265 nWidth = nVideoW;
266 nHeight = nVideoH;
267 bDone = true;
268 }
269
270 if( bZoom )
271 {
272 if( ( aPrefSize.Width <= nVideoW ) && ( aPrefSize.Height <= nVideoH ) )
273 {
274 nX = ( nVideoW - aPrefSize.Width ) >> 1;
275 nY = ( nVideoH - aPrefSize.Height ) >> 1;
276 nWidth = aPrefSize.Width;
277 nHeight = aPrefSize.Height;
278 bDone = true;
279 }
280 }
281
282 if( !bDone )
283 {
284 if( aPrefSize.Width > 0 && aPrefSize.Height > 0 && nVideoW > 0 && nVideoH > 0 )
285 {
286 double fPrefWH = (double) aPrefSize.Width / aPrefSize.Height;
287
288 if( fPrefWH < ( (double) nVideoW / nVideoH ) )
289 nVideoW = (int)( nVideoH * fPrefWH );
290 else
291 nVideoH = (int)( nVideoW / fPrefWH );
292
293 nX = ( nW - nVideoW ) >> 1;
294 nY = ( nH - nVideoH ) >> 1;
295 nWidth = nVideoW;
296 nHeight = nVideoH;
297 }
298 else
299 nX = nY = nWidth = nHeight = 0;
300 }
301
302 IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
303
304 if( pVideoWindow )
305 pVideoWindow->SetWindowPosition( nX, nY, nWidth, nHeight );
306 }
307 }
308
309 // ------------------------------------------------------------------------------
310
create(const uno::Sequence<uno::Any> & rArguments)311 bool Window::create( const uno::Sequence< uno::Any >& rArguments )
312 {
313 IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
314 WNDCLASS* mpWndClass = lcl_getWndClass();
315
316
317 if( !mnFrameWnd && pVideoWindow && mpWndClass )
318 {
319 awt::Rectangle aRect;
320 sal_IntPtr nWnd;
321
322 rArguments[ 0 ] >>= nWnd;
323 rArguments[ 1 ] >>= aRect;
324
325 mnParentWnd = static_cast<int>(nWnd);
326
327 mnFrameWnd = (int) ::CreateWindow( mpWndClass->lpszClassName, NULL,
328 WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
329 aRect.X, aRect.Y, aRect.Width, aRect.Height,
330 (HWND) mnParentWnd, NULL, mpWndClass->hInstance, 0 );
331
332 // if the last CreateWindow failed...
333 if( mnFrameWnd == 0 )
334 {
335 // try again and this time assume that mnParent is indeed a dc
336 mnParentWnd = reinterpret_cast<int>(::WindowFromDC( (HDC)mnParentWnd ));
337 mnFrameWnd = (int) ::CreateWindow( mpWndClass->lpszClassName, NULL,
338 WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
339 aRect.X, aRect.Y, aRect.Width, aRect.Height,
340 (HWND)mnParentWnd , NULL, mpWndClass->hInstance, 0 );
341 }
342
343 if( mnFrameWnd )
344 {
345 ::SetWindowLong( (HWND) mnFrameWnd, 0, (DWORD) this );
346
347 #ifdef DDRAW_TEST_OUTPUT
348 IDirectDraw7* pDDraw;
349 IDirectDrawSurface7* pDDSurface;
350 IDirectDrawClipper* pDDClipper;
351
352 if( DD_OK == DirectDrawCreateEx( NULL, (void**) &pDDraw, IID_IDirectDraw7, NULL ) )
353 {
354 if( DD_OK == pDDraw->SetCooperativeLevel( (HWND) mnParentWnd, DDSCL_NORMAL ) )
355 {
356 DDSURFACEDESC2 aDDDesc;
357
358 memset( &aDDDesc, 0, sizeof( aDDDesc ) );
359 aDDDesc.dwSize = sizeof( aDDDesc );
360 aDDDesc.dwFlags = DDSD_CAPS;
361 aDDDesc.ddsCaps.dwCaps |= DDSCAPS_PRIMARYSURFACE;
362
363 if( DD_OK == pDDraw->CreateSurface( &aDDDesc, &pDDSurface, NULL ) )
364 {
365 if( DD_OK == pDDraw->CreateClipper( 0, &pDDClipper, NULL ) )
366 {
367 pDDClipper->SetHWnd( 0, (HWND) mnFrameWnd );
368 pDDSurface->SetClipper( pDDClipper );
369 }
370
371 mrPlayer.setDDrawParams( (IDirectDraw*) pDDraw, (IDirectDrawSurface*) pDDSurface );
372 #endif
373
374 pVideoWindow->put_Owner( (OAHWND) mnFrameWnd );
375 pVideoWindow->put_MessageDrain( (OAHWND) mnFrameWnd );
376 pVideoWindow->put_WindowStyle( WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
377
378 mrPlayer.setNotifyWnd( mnFrameWnd );
379
380 meZoomLevel = media::ZoomLevel_FIT_TO_WINDOW;
381 ImplLayoutVideoWindow();
382 #ifdef DDRAW_TEST_OUTPUT
383 }
384 }
385 }
386 #endif
387 }
388 }
389
390 return( mnFrameWnd != 0 );
391 }
392
393 // ------------------------------------------------------------------------------
394
processGraphEvent()395 void Window::processGraphEvent()
396 {
397 mrPlayer.processEvent();
398 }
399
400 // ------------------------------------------------------------------------------
401
updatePointer()402 void Window::updatePointer()
403 {
404 char* pCursorName;
405
406 switch( mnPointerType )
407 {
408 case( awt::SystemPointer::CROSS ): pCursorName = IDC_CROSS; break;
409 //case( awt::SystemPointer::HAND ): pCursorName = IDC_HAND; break;
410 case( awt::SystemPointer::MOVE ): pCursorName = IDC_SIZEALL; break;
411 case( awt::SystemPointer::WAIT ): pCursorName = IDC_WAIT; break;
412
413 default:
414 pCursorName = IDC_ARROW;
415 break;
416 }
417
418 ::SetCursor( ::LoadCursor( NULL, pCursorName ) );
419 }
420
421 // ------------------------------------------------------------------------------
422
update()423 void SAL_CALL Window::update( )
424 throw (uno::RuntimeException)
425 {
426 ::RedrawWindow( (HWND) mnFrameWnd, NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE );
427 }
428
429 // ------------------------------------------------------------------------------
430
setZoomLevel(media::ZoomLevel eZoomLevel)431 sal_Bool SAL_CALL Window::setZoomLevel( media::ZoomLevel eZoomLevel )
432 throw (uno::RuntimeException)
433 {
434 boolean bRet = false;
435
436 if( media::ZoomLevel_NOT_AVAILABLE != meZoomLevel &&
437 media::ZoomLevel_NOT_AVAILABLE != eZoomLevel )
438 {
439 if( eZoomLevel != meZoomLevel )
440 {
441 meZoomLevel = eZoomLevel;
442 ImplLayoutVideoWindow();
443 }
444
445 bRet = true;
446 }
447
448 return bRet;
449 }
450
451 // ------------------------------------------------------------------------------
452
getZoomLevel()453 media::ZoomLevel SAL_CALL Window::getZoomLevel( )
454 throw (uno::RuntimeException)
455 {
456 return meZoomLevel;
457 }
458
459 // ------------------------------------------------------------------------------
460
setPointerType(sal_Int32 nPointerType)461 void SAL_CALL Window::setPointerType( sal_Int32 nPointerType )
462 throw (uno::RuntimeException)
463 {
464 mnPointerType = nPointerType;
465 }
466
467 // ------------------------------------------------------------------------------
468
setPosSize(sal_Int32 X,sal_Int32 Y,sal_Int32 Width,sal_Int32 Height,sal_Int16)469 void SAL_CALL Window::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 )
470 throw (uno::RuntimeException)
471 {
472 if( mnFrameWnd )
473 {
474 ::SetWindowPos( (HWND) mnFrameWnd, HWND_TOP, X, Y, Width, Height, 0 );
475 ImplLayoutVideoWindow();
476 }
477 }
478
479 // ------------------------------------------------------------------------------
480
getPosSize()481 awt::Rectangle SAL_CALL Window::getPosSize()
482 throw (uno::RuntimeException)
483 {
484 awt::Rectangle aRet;
485
486 if( mnFrameWnd )
487 {
488 ::RECT aWndRect;
489
490 if( ::GetClientRect( (HWND) mnFrameWnd, &aWndRect ) )
491 {
492 aRet.X = aWndRect.left;
493 aRet.Y = aWndRect.top;
494 aRet.Width = aWndRect.right - aWndRect.left + 1;
495 aRet.Height = aWndRect.bottom - aWndRect.top + 1;
496 }
497 }
498
499 return aRet;
500 }
501
502 // ------------------------------------------------------------------------------
503
setVisible(sal_Bool bVisible)504 void SAL_CALL Window::setVisible( sal_Bool bVisible )
505 throw (uno::RuntimeException)
506 {
507 if( mnFrameWnd )
508 {
509 IVideoWindow* pVideoWindow = const_cast< IVideoWindow* >( mrPlayer.getVideoWindow() );
510
511 if( pVideoWindow )
512 pVideoWindow->put_Visible( bVisible ? OATRUE : OAFALSE );
513
514 ::ShowWindow( (HWND) mnFrameWnd, bVisible ? SW_SHOW : SW_HIDE );
515 }
516 }
517
518 // ------------------------------------------------------------------------------
519
setEnable(sal_Bool bEnable)520 void SAL_CALL Window::setEnable( sal_Bool bEnable )
521 throw (uno::RuntimeException)
522 {
523 if( mnFrameWnd )
524 ::EnableWindow( (HWND) mnFrameWnd, bEnable );
525 }
526
527 // ------------------------------------------------------------------------------
528
setFocus()529 void SAL_CALL Window::setFocus( )
530 throw (uno::RuntimeException)
531 {
532 if( mnFrameWnd )
533 ::SetFocus( (HWND) mnFrameWnd );
534 }
535
536 // ------------------------------------------------------------------------------
537
addWindowListener(const uno::Reference<awt::XWindowListener> & xListener)538 void SAL_CALL Window::addWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
539 throw (uno::RuntimeException)
540 {
541 maListeners.addInterface( getCppuType( &xListener ), xListener );
542 }
543
544 // ------------------------------------------------------------------------------
545
removeWindowListener(const uno::Reference<awt::XWindowListener> & xListener)546 void SAL_CALL Window::removeWindowListener( const uno::Reference< awt::XWindowListener >& xListener )
547 throw (uno::RuntimeException)
548 {
549 maListeners.removeInterface( getCppuType( &xListener ), xListener );
550 }
551
552 // ------------------------------------------------------------------------------
553
addFocusListener(const uno::Reference<awt::XFocusListener> & xListener)554 void SAL_CALL Window::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
555 throw (uno::RuntimeException)
556 {
557 maListeners.addInterface( getCppuType( &xListener ), xListener );
558 }
559
560 // ------------------------------------------------------------------------------
561
removeFocusListener(const uno::Reference<awt::XFocusListener> & xListener)562 void SAL_CALL Window::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener )
563 throw (uno::RuntimeException)
564 {
565 maListeners.removeInterface( getCppuType( &xListener ), xListener );
566 }
567
568 // ------------------------------------------------------------------------------
569
addKeyListener(const uno::Reference<awt::XKeyListener> & xListener)570 void SAL_CALL Window::addKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
571 throw (uno::RuntimeException)
572 {
573 maListeners.addInterface( getCppuType( &xListener ), xListener );
574 }
575
576 // ------------------------------------------------------------------------------
577
removeKeyListener(const uno::Reference<awt::XKeyListener> & xListener)578 void SAL_CALL Window::removeKeyListener( const uno::Reference< awt::XKeyListener >& xListener )
579 throw (uno::RuntimeException)
580 {
581 maListeners.removeInterface( getCppuType( &xListener ), xListener );
582 }
583
584 // ------------------------------------------------------------------------------
585
addMouseListener(const uno::Reference<awt::XMouseListener> & xListener)586 void SAL_CALL Window::addMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
587 throw (uno::RuntimeException)
588 {
589 maListeners.addInterface( getCppuType( &xListener ), xListener );
590 }
591
592 // ------------------------------------------------------------------------------
593
removeMouseListener(const uno::Reference<awt::XMouseListener> & xListener)594 void SAL_CALL Window::removeMouseListener( const uno::Reference< awt::XMouseListener >& xListener )
595 throw (uno::RuntimeException)
596 {
597 maListeners.removeInterface( getCppuType( &xListener ), xListener );
598 }
599
600 // ------------------------------------------------------------------------------
601
addMouseMotionListener(const uno::Reference<awt::XMouseMotionListener> & xListener)602 void SAL_CALL Window::addMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
603 throw (uno::RuntimeException)
604 {
605 maListeners.addInterface( getCppuType( &xListener ), xListener );
606 }
607
608 // ------------------------------------------------------------------------------
609
removeMouseMotionListener(const uno::Reference<awt::XMouseMotionListener> & xListener)610 void SAL_CALL Window::removeMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& xListener )
611 throw (uno::RuntimeException)
612 {
613 maListeners.removeInterface( getCppuType( &xListener ), xListener );
614 }
615
616 // ------------------------------------------------------------------------------
617
addPaintListener(const uno::Reference<awt::XPaintListener> & xListener)618 void SAL_CALL Window::addPaintListener( const uno::Reference< awt::XPaintListener >& xListener )
619 throw (uno::RuntimeException)
620 {
621 maListeners.addInterface( getCppuType( &xListener ), xListener );
622 }
623
624 // ------------------------------------------------------------------------------
625
removePaintListener(const uno::Reference<awt::XPaintListener> & xListener)626 void SAL_CALL Window::removePaintListener( const uno::Reference< awt::XPaintListener >& xListener )
627 throw (uno::RuntimeException)
628 {
629 maListeners.removeInterface( getCppuType( &xListener ), xListener );
630 }
631
632 // ------------------------------------------------------------------------------
633
dispose()634 void SAL_CALL Window::dispose( )
635 throw (uno::RuntimeException)
636 {
637 }
638
639 // ------------------------------------------------------------------------------
640
addEventListener(const uno::Reference<lang::XEventListener> & xListener)641 void SAL_CALL Window::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
642 throw (uno::RuntimeException)
643 {
644 maListeners.addInterface( getCppuType( &xListener ), xListener );
645 }
646
647 // ------------------------------------------------------------------------------
648
removeEventListener(const uno::Reference<lang::XEventListener> & xListener)649 void SAL_CALL Window::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
650 throw (uno::RuntimeException)
651 {
652 maListeners.removeInterface( getCppuType( &xListener ), xListener );
653 }
654
655 // ------------------------------------------------------------------------------
656
fireMousePressedEvent(const::com::sun::star::awt::MouseEvent & rEvt)657 void Window::fireMousePressedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
658 {
659 ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseListener >*) 0 ) );
660
661 if( pContainer )
662 {
663 ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
664
665 while( aIter.hasMoreElements() )
666 uno::Reference< awt::XMouseListener >( aIter.next(), uno::UNO_QUERY )->mousePressed( rEvt );
667 }
668 }
669
670 // -----------------------------------------------------------------------------
671
fireMouseReleasedEvent(const::com::sun::star::awt::MouseEvent & rEvt)672 void Window::fireMouseReleasedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
673 {
674 ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseListener >*) 0 ) );
675
676 if( pContainer )
677 {
678 ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
679
680 while( aIter.hasMoreElements() )
681 uno::Reference< awt::XMouseListener >( aIter.next(), uno::UNO_QUERY )->mouseReleased( rEvt );
682 }
683 }
684
685 // -----------------------------------------------------------------------------
686
fireMouseMovedEvent(const::com::sun::star::awt::MouseEvent & rEvt)687 void Window::fireMouseMovedEvent( const ::com::sun::star::awt::MouseEvent& rEvt )
688 {
689 ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XMouseMotionListener >*) 0 ) );
690
691 if( pContainer )
692 {
693 ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
694
695 while( aIter.hasMoreElements() )
696 uno::Reference< awt::XMouseMotionListener >( aIter.next(), uno::UNO_QUERY )->mouseMoved( rEvt );
697 }
698 }
699
700 // -----------------------------------------------------------------------------
701
fireSetFocusEvent(const::com::sun::star::awt::FocusEvent & rEvt)702 void Window::fireSetFocusEvent( const ::com::sun::star::awt::FocusEvent& rEvt )
703 {
704 ::cppu::OInterfaceContainerHelper* pContainer = maListeners.getContainer( getCppuType( (uno::Reference< awt::XFocusListener >*) 0 ) );
705
706 if( pContainer )
707 {
708 ::cppu::OInterfaceIteratorHelper aIter( *pContainer );
709
710 while( aIter.hasMoreElements() )
711 uno::Reference< awt::XFocusListener >( aIter.next(), uno::UNO_QUERY )->focusGained( rEvt );
712 }
713 }
714
715 // ------------------------------------------------------------------------------
716
getImplementationName()717 ::rtl::OUString SAL_CALL Window::getImplementationName( )
718 throw (uno::RuntimeException)
719 {
720 return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( AVMEDIA_WIN_WINDOW_IMPLEMENTATIONNAME ) );
721 }
722
723 // ------------------------------------------------------------------------------
724
supportsService(const::rtl::OUString & ServiceName)725 sal_Bool SAL_CALL Window::supportsService( const ::rtl::OUString& ServiceName )
726 throw (uno::RuntimeException)
727 {
728 return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( AVMEDIA_WIN_WINDOW_SERVICENAME ) );
729 }
730
731 // ------------------------------------------------------------------------------
732
getSupportedServiceNames()733 uno::Sequence< ::rtl::OUString > SAL_CALL Window::getSupportedServiceNames( )
734 throw (uno::RuntimeException)
735 {
736 uno::Sequence< ::rtl::OUString > aRet(1);
737 aRet[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( AVMEDIA_WIN_WINDOW_SERVICENAME ) );
738
739 return aRet;
740 }
741
742 } // namespace win
743 } // namespace avmedia
744