}
/* Save state, draw, restore state */
- g_mutex_lock(opengl->sphere_lock);
+ g_mutex_lock(&opengl->sphere_lock);
if (!(object->skip & GRITS_SKIP_STATE)) {
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION); glPushMatrix();
glMatrixMode(GL_PROJECTION); glPopMatrix();
glMatrixMode(GL_MODELVIEW); glPopMatrix();
}
- g_mutex_unlock(opengl->sphere_lock);
+ g_mutex_unlock(&opengl->sphere_lock);
}
/**
void grits_object_queue_draw(GritsObject *object)
{
if (object->viewer)
- gtk_widget_queue_draw(GTK_WIDGET(object->viewer));
+ grits_viewer_queue_draw(object->viewer);
+}
+
+void grits_object_set_cursor(GritsObject *object, GdkCursorType cursor)
+{
+ // Used by grits OpenGL
+ object->cursor = gdk_cursor_new(cursor);
+}
+
+void grits_object_destroy(GritsObject *object)
+{
+ if (object->viewer)
+ grits_viewer_remove(object->viewer, object);
+ g_object_unref(object);
}
/* Event handling */
/* Handle button click */
if (sig == SIG_BUTTON_PRESS)
- object->state.clicking = TRUE;
+ object->state.clicking = GRITS_CLICK_THRESHOLD;
+ if (sig == SIG_MOTION && object->state.clicking)
+ object->state.clicking -= 1;
if (sig == SIG_BUTTON_RELEASE && object->state.clicking)
g_signal_emit(object, signals[SIG_CLICKED], 0, event, &rval);
- if (sig == SIG_BUTTON_RELEASE || sig == SIG_MOTION)
- object->state.clicking = FALSE;
+ if (sig == SIG_BUTTON_RELEASE)
+ object->state.clicking = 0;
/* Emit this signal */
if (rval == FALSE) {