X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fgrits-viewer.c;h=79765e12a6933080f5efded6dd20a4ed02fe6e50;hp=92f6e863617940792d2c532074218ef82110bb1b;hb=461ca7ead68c77f2745e747f89e29b242a192f4a;hpb=e8af1dabca07d2b7a26369d845a81efeae3e08a0 diff --git a/src/grits-viewer.c b/src/grits-viewer.c index 92f6e86..79765e1 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) { @@ -327,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); } @@ -364,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); }