]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed refresh bug in wxGLCanvas
authorRobert Roebling <robert@roebling.de>
Sun, 14 Feb 1999 13:04:39 +0000 (13:04 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 14 Feb 1999 13:04:39 +0000 (13:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1691 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/window.cpp
src/gtk1/window.cpp
utils/glcanvas/gtk/glcanvas.cpp

index 369948cb0b7c83a78bfa5d4af19e1e55159d0f75..b47572ba4e93d466d1a0a97c329589ad77674e60 100644 (file)
@@ -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() );
index 369948cb0b7c83a78bfa5d4af19e1e55159d0f75..b47572ba4e93d466d1a0a97c329589ad77674e60 100644 (file)
@@ -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() );
index 9e16370d1e1b4315e81640e0af21de299e7baab4..47a21717e91f1dfe7e613dbebfe2147cfa48ce6e 100644 (file)
@@ -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 );