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 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 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 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 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 216 Window::~Window() 217 { 218 if( mnFrameWnd ) 219 ::DestroyWindow( (HWND) mnFrameWnd ); 220 } 221 222 // ------------------------------------------------------------------------------ 223 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 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 395 void Window::processGraphEvent() 396 { 397 mrPlayer.processEvent(); 398 } 399 400 // ------------------------------------------------------------------------------ 401 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 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 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 453 media::ZoomLevel SAL_CALL Window::getZoomLevel( ) 454 throw (uno::RuntimeException) 455 { 456 return meZoomLevel; 457 } 458 459 // ------------------------------------------------------------------------------ 460 461 void SAL_CALL Window::setPointerType( sal_Int32 nPointerType ) 462 throw (uno::RuntimeException) 463 { 464 mnPointerType = nPointerType; 465 } 466 467 // ------------------------------------------------------------------------------ 468 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 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 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 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 529 void SAL_CALL Window::setFocus( ) 530 throw (uno::RuntimeException) 531 { 532 if( mnFrameWnd ) 533 ::SetFocus( (HWND) mnFrameWnd ); 534 } 535 536 // ------------------------------------------------------------------------------ 537 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 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 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 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 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 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 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 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 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 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 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 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 634 void SAL_CALL Window::dispose( ) 635 throw (uno::RuntimeException) 636 { 637 } 638 639 // ------------------------------------------------------------------------------ 640 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 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 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 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 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 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 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 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 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