wxOSX > Cocoaでのイベント処理の流れ

初期化

  • wxControl::CreateはwxWindowMac::Createを呼び出す。(include/wx/osx/control.h,src/osx/carbon/control.cpp)
  • wxWindowMac::Createでは、m_macIsUserPaneがtrueならwxWidgetImpl::CreateUserPaneを呼び出す。(src/osx/window_osx.cpp)
  • wxWidgetImpl::CreateUserPaneでは、[[wxNSView alloc] initWithFrame:r]してnew wxWidgetCocoaImpl(...)する。(src/osx/cocoa/window.mm)

イベント処理

  • wxNSView(や、wxNS***という名前のクラス)の+initializeメソッドでは、クラス自身についてwxOSXCocoaClassAddWXMethodsを呼び出す。(src/osx/cocoa/window.mm)
  • wxOSXCocoaClassAddWXMethodsでは、対象のクラスに、mouseDown:やらkeyDown:やらのメソッドを登録する。(src/osx/cocoa/window.mm)
  • その際のメソッドの実体(IMP)はwxOSX_mouseEventやらwxOSX_keyEventやらに設定する。(src/osx/cocoa/window.mm)
  • wxOSX_mouseEventやらwxOSX_keyEventやらでは、wxWidgetCocoaImpl*を取得してwxWidgetCocoaImpl::mouseEventやらwxWidgetCocoaImpl::keyEventやらを呼び出す。(src/osx/cocoa/window.mm)
  • wxWidgetCocoaImpl::mouseEventやらwxWidgetCocoaImpl::keyEventやらでは、wxWidgetCocoaImpl::DoHandleMouseEventやらwxWidgetCocoaImpl::DoHandleKeyEventやらを呼び出す。イベントが処理されなかった場合は、superに回す。(src/osx/cocoa/window.mm)
  • wxWidgetCocoaImpl::DoHandleMouseEventやらwxWidgetCocoaImpl::DoHandleKeyEventやらでは、wxMouseEventやらwxKeyEventやらのオブジェクトを作って放流する。(src/osx/cocoa/window.mm)

タグ:

+ タグ編集
  • タグ:
最終更新:2011年01月01日 22:40