GLWindow::GLWindow( bool zbuffer ) { m_nTimer = 0; m_bMouseCapture = FALSE; m_pParent = NULL; m_pWidget = gtk_glwidget_new( zbuffer, g_qeglobals_gui.d_glBase ); gtk_widget_set_can_focus( m_pWidget, TRUE ); #ifdef DBG_GLWINDOW Sys_Printf( "GLWindow::GLWindow m_pWidget = %p\n", m_pWidget ); #endif if ( g_qeglobals_gui.d_glBase == NULL ) { g_qeglobals_gui.d_glBase = m_pWidget; } #if GTK_CHECK_VERSION( 1,3,0 ) gtk_widget_set_events( m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK ); #else gtk_widget_set_events( m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ); #endif // Connect signal handlers g_signal_connect( G_OBJECT( m_pWidget ), "realize", G_CALLBACK( realize ), this ); g_signal_connect( G_OBJECT( m_pWidget ), "expose-event", G_CALLBACK( expose ), this ); g_signal_connect( G_OBJECT( m_pWidget ), "motion-notify-event", G_CALLBACK( motion ), this ); g_signal_connect( G_OBJECT( m_pWidget ), "button-press-event", G_CALLBACK( button_press ), this ); g_signal_connect( G_OBJECT( m_pWidget ), "button-release-event",G_CALLBACK( button_release ), this ); g_signal_connect( G_OBJECT( m_pWidget ), "size-allocate", G_CALLBACK( resize ), this ); #if GTK_CHECK_VERSION( 1,3,0 ) g_signal_connect( G_OBJECT( m_pWidget ), "scroll-event", G_CALLBACK( scroll_event ), this ); #endif }
GLWindow::GLWindow( bool zbuffer ) { m_nTimer = 0; m_bMouseCapture = FALSE; m_pParent = NULL; m_pWidget = gtk_glwidget_new( zbuffer, g_qeglobals_gui.d_glBase ); GTK_WIDGET_SET_FLAGS( m_pWidget, GTK_CAN_FOCUS ); #ifdef DBG_GLWINDOW Sys_Printf( "GLWindow::GLWindow m_pWidget = %p\n", m_pWidget ); #endif if ( g_qeglobals_gui.d_glBase == NULL ) { g_qeglobals_gui.d_glBase = m_pWidget; } #if GTK_CHECK_VERSION( 1,3,0 ) gtk_widget_set_events( m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK ); #else gtk_widget_set_events( m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ); #endif // Connect signal handlers gtk_signal_connect( GTK_OBJECT( m_pWidget ), "realize", GTK_SIGNAL_FUNC( realize ), this ); gtk_signal_connect( GTK_OBJECT( m_pWidget ), "expose_event", GTK_SIGNAL_FUNC( expose ), this ); gtk_signal_connect( GTK_OBJECT( m_pWidget ), "motion_notify_event", GTK_SIGNAL_FUNC( motion ), this ); gtk_signal_connect( GTK_OBJECT( m_pWidget ), "button_press_event", GTK_SIGNAL_FUNC( button_press ), this ); gtk_signal_connect( GTK_OBJECT( m_pWidget ), "button_release_event",GTK_SIGNAL_FUNC( button_release ), this ); gtk_signal_connect( GTK_OBJECT( m_pWidget ), "size_allocate", GTK_SIGNAL_FUNC( resize ), this ); #if GTK_CHECK_VERSION( 1,3,0 ) gtk_signal_connect( GTK_OBJECT( m_pWidget ), "scroll_event", GTK_SIGNAL_FUNC( scroll_event ), this ); #endif }
bool CGtkWindow::Show(){ // check we got everything and are reading to instanciate if ( m_nWidthParam == 0 || m_nHeightParam == 0 ) { Sys_FPrintf( SYS_ERR, "Height and Width params not set in CGtkWindow::Show\n" ); return false; } if ( !m_pListen ) { Sys_FPrintf( SYS_ERR, "No listener set in CGtkWindow::Show\n" ); return false; } // seems all good, here we go m_pWnd = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW( m_pWnd ), m_Name.GetBuffer() ); gtk_window_set_default_size( GTK_WINDOW( m_pWnd ), m_nWidthParam, m_nHeightParam ); gtk_widget_show( m_pWnd ); // GL widget creation m_pGLWidget = gtk_glwidget_new( FALSE, g_qeglobals_gui.d_glBase ); gtk_widget_set_events( m_pGLWidget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ); // Connect signal handlers gtk_signal_connect( GTK_OBJECT( m_pGLWidget ), "expose_event", GTK_SIGNAL_FUNC( expose ), this ); gtk_signal_connect( GTK_OBJECT( m_pGLWidget ), "motion_notify_event", GTK_SIGNAL_FUNC( motion ), m_pListen ); gtk_signal_connect( GTK_OBJECT( m_pGLWidget ), "button_press_event", GTK_SIGNAL_FUNC( button_press ), m_pListen ); gtk_signal_connect( GTK_OBJECT( m_pGLWidget ), "button_release_event", GTK_SIGNAL_FUNC( button_release ), m_pListen ); gtk_signal_connect( GTK_OBJECT( m_pWnd ), "delete_event", GTK_SIGNAL_FUNC( close_widget ), this ); gtk_signal_connect( GTK_OBJECT( m_pWnd ), "key_press_event", GTK_SIGNAL_FUNC( keypress ), m_pListen ); gtk_widget_show( m_pGLWidget ); gtk_container_add( GTK_CONTAINER( m_pWnd ), m_pGLWidget ); return true; }