From: Robert Roebling Date: Sun, 14 Feb 1999 13:04:39 +0000 (+0000) Subject: Fixed refresh bug in wxGLCanvas X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/20239453d57b635b6e578c4e46ef02b198512733 Fixed refresh bug in wxGLCanvas git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1691 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 369948cb0b..b47572ba4e 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1683,11 +1683,11 @@ void wxWindow::PostCreation() { if (m_wxwindow) { - gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event", - GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); + gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event", + GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); - gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw", - GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); + gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw", + GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); } ConnectWidget( GetConnectWidget() ); diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 369948cb0b..b47572ba4e 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -1683,11 +1683,11 @@ void wxWindow::PostCreation() { if (m_wxwindow) { - gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event", - GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); + gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event", + GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); - gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw", - GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); + gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw", + GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); } ConnectWidget( GetConnectWidget() ); diff --git a/utils/glcanvas/gtk/glcanvas.cpp b/utils/glcanvas/gtk/glcanvas.cpp index 9e16370d1e..47a21717e9 100644 --- a/utils/glcanvas/gtk/glcanvas.cpp +++ b/utils/glcanvas/gtk/glcanvas.cpp @@ -108,6 +108,52 @@ wxPalette wxGLContext::CreateDefaultPalette() return wxNullPalette; } +//----------------------------------------------------------------------------- +// "expose_event" of m_glWidget +//----------------------------------------------------------------------------- + +static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win ) +{ + if (!win->HasVMT()) return; + + win->m_updateRegion.Union( gdk_event->area.x, + gdk_event->area.y, + gdk_event->area.width, + gdk_event->area.height ); + + if (gdk_event->count > 0) return; + +/* + printf( "OnExpose from " ); + if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) + printf( win->GetClassInfo()->GetClassName() ); + printf( ".\n" ); +*/ + + wxPaintEvent event( win->GetId() ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); + + win->m_updateRegion.Clear(); +} + +//----------------------------------------------------------------------------- +// "draw" of m_glWidget +//----------------------------------------------------------------------------- + +static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win ) +{ + if (!win->HasVMT()) return; + + win->m_updateRegion.Union( rect->x, rect->y, rect->width, rect->height ); + + wxPaintEvent event( win->GetId() ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); + + win->m_updateRegion.Clear(); +} + //--------------------------------------------------------------------------- // wxGlCanvas //--------------------------------------------------------------------------- @@ -175,6 +221,12 @@ bool wxGLCanvas::Create( wxWindow *parent, wxWindowID id, gtk_myfixed_put( GTK_MYFIXED(m_wxwindow), m_glWidget, 0, 0 ); + gtk_signal_connect( GTK_OBJECT(m_glWidget), "expose_event", + GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); + + gtk_signal_connect( GTK_OBJECT(m_glWidget), "draw", + GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); + gtk_widget_show( m_glWidget ); m_glContext = new wxGLContext( TRUE, this, palette );