/*
- * 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
{
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;
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];
GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
if (!klass->add)
g_warning("GritsViewer: add - Unimplemented");
- return klass->add(viewer, object, level, sort);
+ object->ref = klass->add(viewer, object, level, sort);
+ object->viewer = viewer;
+ return object;
}
/**
*
* Returns: the #GritsObject referenced by the handle
*/
-GritsObject *grits_viewer_remove(GritsViewer *viewer, gpointer ref)
+GritsObject *grits_viewer_remove(GritsViewer *viewer, GritsObject *object)
{
GritsViewerClass *klass = GRITS_VIEWER_GET_CLASS(viewer);
if (!klass->remove)
g_warning("GritsViewer: remove - Unimplemented");
- return klass->remove(viewer, ref);
+ klass->remove(viewer, object);
+ return object;
}
/****************
{
g_debug("GritsViewer: finalize");
G_OBJECT_CLASS(grits_viewer_parent_class)->finalize(gobject);
+ g_debug("GritsViewer: finalize - done");
}
static void grits_viewer_class_init(GritsViewerClass *klass)
{