]> Pileus Git - grits/blobdiff - src/grits-viewer.c
Make picking 64-bit compatible
[grits] / src / grits-viewer.c
index bfc704b35baeeeacf63c604aaa585404c8e326e2..08d73bbf29c45ea2d748aa903e4475d144513ada 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Andy Spencer <andy753421@gmail.com>
+ * Copyright (C) 2009-2011 Andy Spencer <andy753421@gmail.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -160,9 +160,10 @@ static gboolean on_motion_notify(GritsViewer *viewer, GdkEventMotion *event, gpo
 {
        gdouble x = viewer->drag_x - event->x;
        gdouble y = viewer->drag_y - event->y;
-       gdouble lat, lon, elev, scale;
+       gdouble lat, lon, elev, scale, rx, ry, rz;
        grits_viewer_get_location(GRITS_VIEWER(viewer), &lat, &lon, &elev);
-       scale = elev/EARTH_R/15;
+       grits_viewer_get_rotation(GRITS_VIEWER(viewer), &rx,  &ry,  &rz);
+       scale = (elev/EARTH_R/15) * (sin(deg2rad(ABS(rx)))*4+1);
        switch (viewer->drag_mode) {
        case GRITS_DRAG_PAN:  grits_viewer_pan(viewer, -y*scale, x*scale, 0); break;
        case GRITS_DRAG_ZOOM: grits_viewer_zoom(viewer, pow(2, -y/500)); break;
@@ -348,7 +349,7 @@ void grits_viewer_set_rotation(GritsViewer *viewer, gdouble x, gdouble y, gdoubl
 void grits_viewer_get_rotation(GritsViewer *viewer, gdouble *x, gdouble *y, gdouble *z)
 {
        g_assert(GRITS_IS_VIEWER(viewer));
-       g_debug("GritsViewer: get_rotation");
+       //g_debug("GritsViewer: get_rotation");
        *x = viewer->rotation[0];
        *y = viewer->rotation[1];
        *z = viewer->rotation[2];
@@ -541,15 +542,12 @@ gpointer grits_viewer_add(GritsViewer *viewer, GritsObject *object,
  *
  * Returns: the #GritsObject referenced by the handle
  */
-GritsObject *grits_viewer_remove(GritsViewer *viewer, gpointer _object)
+GritsObject *grits_viewer_remove(GritsViewer *viewer, GritsObject *object)
 {
-       GritsObject *object = _object;
        GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
        if (!klass->remove)
                g_warning("GritsViewer: remove - Unimplemented");
-       klass->remove(viewer, object->ref);
-       object->ref    = NULL;
-       object->viewer = NULL;
+       klass->remove(viewer, object);
        return object;
 }