macosx_loop.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * macosx_loop.cpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 the VideoLAN team
  5.  * $Id: f36bad33411366079b7b561fdd24c27d60245f64 $
  6.  *
  7.  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifdef MACOSX_SKINS
  24. #include "macosx_loop.hpp"
  25. #include "macosx_window.hpp"
  26. #include "../src/generic_window.hpp"
  27. #include "../events/evt_refresh.hpp"
  28. static pascal OSStatus WinEventHandler( EventHandlerCallRef handler,
  29.                                         EventRef event, void *data )
  30. {
  31.     GenericWindow *pWin = (GenericWindow*)data;
  32.     intf_thread_t *pIntf = pWin->getIntf();
  33.     //fprintf(stderr, "eventn" );
  34.     UInt32 evclass = GetEventClass( event );
  35.     UInt32 evkind = GetEventKind( event );
  36.     switch( evclass )
  37.     {
  38.     case kEventClassWindow:
  39.         EvtRefresh evt( pIntf, 0, 0, -1, -1);
  40.         pWin->processEvent( evt );
  41.         break;
  42.     }
  43. }
  44. MacOSXLoop::MacOSXLoop( intf_thread_t *pIntf ):
  45.     OSLoop( pIntf ), m_exit( false )
  46. {
  47. }
  48. MacOSXLoop::~MacOSXLoop()
  49. {
  50. }
  51. OSLoop *MacOSXLoop::instance( intf_thread_t *pIntf )
  52. {
  53.     if( pIntf->p_sys->p_osLoop == NULL )
  54.     {
  55.         OSLoop *pOsLoop = new MacOSXLoop( pIntf );
  56.         pIntf->p_sys->p_osLoop = pOsLoop;
  57.     }
  58.     return pIntf->p_sys->p_osLoop;
  59. }
  60. void MacOSXLoop::destroy( intf_thread_t *pIntf )
  61. {
  62.     if( pIntf->p_sys->p_osLoop )
  63.     {
  64.         delete pIntf->p_sys->p_osLoop;
  65.         pIntf->p_sys->p_osLoop = NULL;
  66.     }
  67. }
  68. void MacOSXLoop::run()
  69. {
  70.     // Main event loop
  71.     while( !m_exit )
  72.     {
  73.         sleep(1);
  74.     }
  75. }
  76. void MacOSXLoop::exit()
  77. {
  78.     m_exit = true;
  79. }
  80. void MacOSXLoop::registerWindow( GenericWindow &rGenWin, WindowRef win )
  81. {
  82.     // Create the event handler
  83.     EventTypeSpec evList[] = {
  84.         { kEventClassWindow, kEventWindowUpdate },
  85.         { kEventClassMouse, kEventMouseMoved }
  86.     };
  87.     EventHandlerUPP handler = NewEventHandlerUPP( WinEventHandler );
  88.     InstallWindowEventHandler( win, handler, GetEventTypeCount( evList ),
  89.                                evList, &rGenWin, NULL );
  90. }
  91. #endif