SDLについて語るスレ

このエントリーをはてなブックマークに追加
194login:Penguin
小ネタ

SDLをqt or kdeのwidgetに組み込む方法。前者はgnomeでも可。

a) SDL_SetVideoModeを呼び出す前に環境変数SDL_WINDOWIDに
  組込を行うwidgetのidを設定しておく。idはQFrame::winId()で取得
  できる。デメリットはSDLで特定のevent入力等が一切拾えなくなる
  ので、qtのkeyPressEventやkeyReleaseEventでeventを拾って
  keycodeを変換した後SDL_PeepEventsなりに投げる必要がある。

 QFrame* m_embedView = new QFrame( this );
 char WindowID[64];
 sprintf( WindowID, "%d",m_embedView->winId() );
 setenv( "SDL_WINDOWID", WindowID, 1 );
 SDL_SetVideoMode( l_width, l_height , l_bpp, l_flags );

b) SDL_SetVideoModeを呼び出してscreen surfaceを作成した後、
  QXEmbedを使いSDLの窓をまるごと取り込む。デメリットはqtの
  widgetとは別に一瞬SDLの窓が開く。ただしSDLのeventも丸ごと
  取り込む事が出来る。

 SDL_SetVideoMode( l_width, l_height , l_bpp, l_flags );
 SDL_SysWMinfo l_info
 SDL_VERSION( &l_info.version );
 SDL_GetWMInfo( &l_info );
 QXEmbed* m_embedView = new QXEmbed ( this );
 m_embedView->initialize();
 m_embedView->setProtocol( QXEmbed::XPLAIN );
 m_embedView->embed( l_info.info.x11.wmwindow );