X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fgrits-viewer.c;h=52fbaf97a5269d9205e0ece6cbbc7c644e72f98c;hp=f7d70e9fa427836d79f054f0950e156226d1e60a;hb=fca66641b8505a51767d0c249194f25da0823716;hpb=7138d9be203921e2eaa3168932c463ed790456c0 diff --git a/src/grits-viewer.c b/src/grits-viewer.c index f7d70e9..52fbaf9 100644 --- a/src/grits-viewer.c +++ b/src/grits-viewer.c @@ -61,6 +61,16 @@ static void _grits_viewer_fix_location(GritsViewer *viewer) viewer->location[2] = ABS(viewer->location[2]); } +static void _grits_viewer_fix_rotation(GritsViewer *viewer) +{ + while (viewer->rotation[0] < -180) viewer->rotation[0] += 360; + while (viewer->rotation[0] > 180) viewer->rotation[0] -= 360; + while (viewer->rotation[1] < -180) viewer->rotation[1] += 360; + while (viewer->rotation[1] > 180) viewer->rotation[1] -= 360; + while (viewer->rotation[2] < -180) viewer->rotation[2] += 360; + while (viewer->rotation[2] > 180) viewer->rotation[2] -= 360; +} + /* Signal helpers */ static void _grits_viewer_emit_location_changed(GritsViewer *viewer) { @@ -180,13 +190,6 @@ static void on_view_changed(GritsViewer *viewer, gtk_widget_queue_draw(GTK_WIDGET(viewer)); } -static void on_realize(GritsViewer *viewer) -{ - GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR); - GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(viewer)); - gdk_window_set_cursor(window, cursor); -} - /*********** * Methods * ***********/ @@ -334,6 +337,7 @@ void grits_viewer_set_rotation(GritsViewer *viewer, gdouble x, gdouble y, gdoubl viewer->rotation[0] = x; viewer->rotation[1] = y; viewer->rotation[2] = z; + _grits_viewer_fix_rotation(viewer); _grits_viewer_emit_rotation_changed(viewer); } @@ -371,6 +375,7 @@ void grits_viewer_rotate(GritsViewer *viewer, gdouble x, gdouble y, gdouble z) viewer->rotation[0] += x; viewer->rotation[1] += y; viewer->rotation[2] += z; + _grits_viewer_fix_rotation(viewer); _grits_viewer_emit_rotation_changed(viewer); } @@ -543,37 +548,35 @@ void grits_viewer_set_height_func(GritsViewer *viewer, GritsBounds *bounds, * * The viewer steals the objects reference. Call g_object_ref if you plan on * holding a reference as well. - * - * Returns: a handle to be pass to grits_viewer_remove() */ -gpointer grits_viewer_add(GritsViewer *viewer, GritsObject *object, +void grits_viewer_add(GritsViewer *viewer, GritsObject *object, gint level, gboolean sort) { GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer); if (!klass->add) g_warning("GritsViewer: add - Unimplemented"); - object->ref = klass->add(viewer, object, level, sort); object->viewer = viewer; - return object; + klass->add(viewer, object, level, sort); } /** * grits_viewer_remove: * @viewer: the viewer - * @ref: the handle obtained from grits_viewer_add() + * @object: the object to remove * - * Remove an object from the viewer. The objects reference count is decremented - * prior to being removed. - * - * Returns: the #GritsObject referenced by the handle + * Remove an object from the viewer. + * The objects reference count is decremented. */ -GritsObject *grits_viewer_remove(GritsViewer *viewer, GritsObject *object) +void grits_viewer_remove(GritsViewer *viewer, GritsObject *object) { GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer); + if (!object->viewer) + return; if (!klass->remove) g_warning("GritsViewer: remove - Unimplemented"); + object->viewer = NULL; klass->remove(viewer, object); - return object; + g_object_unref(object); } /**************** @@ -608,8 +611,6 @@ static void grits_viewer_init(GritsViewer *viewer) g_signal_connect(viewer, "location-changed", G_CALLBACK(on_view_changed), NULL); g_signal_connect(viewer, "rotation-changed", G_CALLBACK(on_view_changed), NULL); - - g_signal_connect(viewer, "realize", G_CALLBACK(on_realize), NULL); } static void grits_viewer_finalize(GObject *gobject) {