]> Pileus Git - grits/blobdiff - src/grits-opengl.c
Add thread safe grits_viewer_queue_draw function
[grits] / src / grits-opengl.c
index a17ddda235fb2a624633f7f92c095685c66f38d5..0e803baf3b5abd6a30e141bde022075254223123 100644 (file)
@@ -290,7 +290,7 @@ static gboolean run_mouse_move(GritsOpenGL *opengl, GdkEventMotion *event)
 static gboolean on_motion_notify(GritsOpenGL *opengl, GdkEventMotion *event, gpointer _)
 {
        opengl->mouse_queue = *event;
-       gtk_widget_queue_draw(GTK_WIDGET(opengl));
+       grits_viewer_queue_draw(GRITS_VIEWER(opengl));
        return FALSE;
 }
 
@@ -371,8 +371,10 @@ static gboolean on_expose(GritsOpenGL *opengl, GdkEventExpose *event, gpointer _
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
 #ifndef ROAM_DEBUG
+       g_mutex_lock(&opengl->sphere_lock);
        roam_sphere_update_errors(opengl->sphere);
        roam_sphere_split_merge(opengl->sphere);
+       g_mutex_unlock(&opengl->sphere_lock);
 #endif
 
 #ifdef ROAM_DEBUG
@@ -400,18 +402,18 @@ static gboolean on_key_press(GritsOpenGL *opengl, GdkEventKey *event, gpointer _
        /* Testing */
        if (kv == GDK_w) {
                opengl->wireframe = !opengl->wireframe;
-               gtk_widget_queue_draw(GTK_WIDGET(opengl));
+               grits_viewer_queue_draw(GRITS_VIEWER(opengl));
        }
        if (kv == GDK_p) {
                opengl->pickmode = !opengl->pickmode;
-               gtk_widget_queue_draw(GTK_WIDGET(opengl));
+               grits_viewer_queue_draw(GRITS_VIEWER(opengl));
        }
 #ifdef ROAM_DEBUG
        else if (kv == GDK_n) roam_sphere_split_one(opengl->sphere);
        else if (kv == GDK_p) roam_sphere_merge_one(opengl->sphere);
        else if (kv == GDK_r) roam_sphere_split_merge(opengl->sphere);
        else if (kv == GDK_u) roam_sphere_update_errors(opengl->sphere);
-       gtk_widget_queue_draw(GTK_WIDGET(opengl));
+       grits_viewer_queue_draw(GRITS_VIEWER(opengl));
 #endif
        return FALSE;
 }