]> Pileus Git - grits/blobdiff - src/gis-viewer.c
Use time_t for times instead of strings
[grits] / src / gis-viewer.c
index 029bea2a1d189fd5d0790908a4d15abec2424490..075c039ed2d5e3215e92a24a976a122af2ea56bc 100644 (file)
@@ -159,21 +159,15 @@ static gboolean on_button_release(GisViewer *viewer, GdkEventButton *event, gpoi
 
 static gboolean on_motion_notify(GisViewer *viewer, GdkEventMotion *event, gpointer _)
 {
-       gdouble x_dist = viewer->drag_x - event->x;
-       gdouble y_dist = viewer->drag_y - event->y;
+       gdouble x = viewer->drag_x - event->x;
+       gdouble y = viewer->drag_y - event->y;
        gdouble lat, lon, elev, scale;
        gis_viewer_get_location(GIS_VIEWER(viewer), &lat, &lon, &elev);
        scale = elev/EARTH_R/15;
        switch (viewer->drag_mode) {
-       case GIS_DRAG_PAN:
-               gis_viewer_pan(viewer, -y_dist*scale, x_dist*scale, 0);
-               break;
-       case GIS_DRAG_ZOOM:
-               gis_viewer_zoom(viewer, pow(2, -y_dist/500));
-               break;
-       case GIS_DRAG_TILT:
-               gis_viewer_rotate(viewer, y_dist/10, 0, x_dist/10);
-               break;
+       case GIS_DRAG_PAN:  gis_viewer_pan(viewer, -y*scale, x*scale, 0); break;
+       case GIS_DRAG_ZOOM: gis_viewer_zoom(viewer, pow(2, -y/500)); break;
+       case GIS_DRAG_TILT: gis_viewer_rotate(viewer, y/10, 0, x/10); break;
        }
        viewer->drag_x = event->x;
        viewer->drag_y = event->y;
@@ -186,6 +180,13 @@ static void on_view_changed(GisViewer *viewer,
        gtk_widget_queue_draw(GTK_WIDGET(viewer));
 }
 
+static void on_realize(GisViewer *viewer)
+{
+       GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
+       GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(viewer));
+       gdk_window_set_cursor(window, cursor);
+}
+
 /***********
  * Methods *
  ***********/
@@ -212,12 +213,11 @@ void gis_viewer_setup(GisViewer *viewer, GisPlugins *plugins, GisPrefs *prefs)
  *
  * Set the current time for the view
  */
-void gis_viewer_set_time(GisViewer *viewer, const char *time)
+void gis_viewer_set_time(GisViewer *viewer, time_t time)
 {
        g_assert(GIS_IS_VIEWER(viewer));
-       g_debug("GisViewer: set_time - time=%s", time);
-       g_free(viewer->time);
-       viewer->time = g_strdup(time);
+       g_debug("GisViewer: set_time - time=%ld", time);
+       viewer->time = time;
        _gis_viewer_emit_time_changed(viewer);
 }
 
@@ -229,7 +229,7 @@ void gis_viewer_set_time(GisViewer *viewer, const char *time)
  *
  * Returns: the current time
  */
-gchar *gis_viewer_get_time(GisViewer *viewer)
+time_t gis_viewer_get_time(GisViewer *viewer)
 {
        g_assert(GIS_IS_VIEWER(viewer));
        g_debug("GisViewer: get_time");
@@ -556,7 +556,6 @@ static void gis_viewer_init(GisViewer *viewer)
 {
        g_debug("GisViewer: init");
        /* Default values */
-       viewer->time = g_strdup("");
        viewer->location[0] = 40;
        viewer->location[1] = -100;
        viewer->location[2] = 1.5*EARTH_R;
@@ -580,12 +579,13 @@ static void gis_viewer_init(GisViewer *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 gis_viewer_finalize(GObject *gobject)
 {
        g_debug("GisViewer: finalize");
        GisViewer *viewer = GIS_VIEWER(gobject);
-       g_free(viewer->time);
        G_OBJECT_CLASS(gis_viewer_parent_class)->finalize(gobject);
 }
 static void gis_viewer_class_init(GisViewerClass *klass)
@@ -597,7 +597,7 @@ static void gis_viewer_class_init(GisViewerClass *klass)
        /**
         * GisViewer::time-changed:
         * @viewer: the viewer.
-        * @time:   a string representation of the time.
+        * @time:   the new time.
         *
         * The ::time-changed signal is emitted when the viewers current time
         * changers.
@@ -609,10 +609,10 @@ static void gis_viewer_class_init(GisViewerClass *klass)
                        0,
                        NULL,
                        NULL,
-                       g_cclosure_marshal_VOID__STRING,
+                       g_cclosure_marshal_VOID__LONG,
                        G_TYPE_NONE,
                        1,
-                       G_TYPE_STRING);
+                       G_TYPE_LONG);
 
        /**
         * GisViewer::location-changed: