]> Pileus Git - aweather/commitdiff
Added support for new icon marker interface. Added car.png icon.
authorAdam Boggs <boggs-git@aircrafter.org>
Mon, 30 Jan 2012 01:12:25 +0000 (18:12 -0700)
committerAdam Boggs <boggs-git@aircrafter.org>
Mon, 30 Jan 2012 01:12:25 +0000 (18:12 -0700)
car.png [new file with mode: 0644]
src/plugins/gps-plugin.c

diff --git a/car.png b/car.png
new file mode 100644 (file)
index 0000000..af3f0f8
Binary files /dev/null and b/car.png differ
index d783c370a1d995eb7e1fb8cd6a91fb018005d19d..e98cb7fb746a43ff029f7210ab6456896968e760 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+ /* TODO:
+  *    If gpsd connection fails, try to connect again periodically.
+  *    If gps stops sending data there should be an indication that it's stale.
+  */
+
 #define _XOPEN_SOURCE
 #include <stdio.h>
 #include <fcntl.h>
@@ -505,8 +510,8 @@ gboolean gps_redraw_all(gpointer data)
     /* update position labels */
     update_gps_status(gps_state);
 
+    /* Update track and marker position */
     if (gps_data_is_valid(gps_data)) {
-       /* Update track and marker position */
         g_debug("Updating track at lat = %f, long = %f, track = %f",
                         gps_data->fix.latitude,
                         gps_data->fix.longitude,
@@ -515,11 +520,11 @@ gboolean gps_redraw_all(gpointer data)
        if (gps_state->marker) {
            grits_viewer_remove(gps_state->viewer,
                    GRITS_OBJECT(gps_state->marker));
-           g_object_unref(gps_state->viewer);
            gps_state->marker = NULL;
        }
 
-        gps_state->marker = grits_marker_new("gps");
+       gps_state->marker = grits_marker_icon_new("GPS", "car.png",
+               gps_data->fix.track, TRUE);
                
         GRITS_OBJECT(gps_state->marker)->center.lat  = gps_data->fix.latitude;
         GRITS_OBJECT(gps_state->marker)->center.lon  = gps_data->fix.longitude;
@@ -527,7 +532,7 @@ gboolean gps_redraw_all(gpointer data)
         GRITS_OBJECT(gps_state->marker)->lod         = EARTH_R;
 
         grits_viewer_add(gps_state->viewer, GRITS_OBJECT(gps_state->marker),
-                       GRITS_LEVEL_OVERLAY, FALSE);
+                       GRITS_LEVEL_OVERLAY, TRUE);
        grits_viewer_refresh(gps_state->viewer);
     }
 
@@ -542,7 +547,7 @@ gboolean gps_redraw_all(gpointer data)
        grits_viewer_get_location(gps_state->viewer, &lat, &lon, &elev);
        grits_viewer_set_location(gps_state->viewer, gps_data->fix.latitude,
                                          gps_data->fix.longitude, elev);
-       grits_viewer_set_rotation(gps_state->viewer, 0, 0, 0);
+       //grits_viewer_set_rotation(gps_state->viewer, 0, 0, 0);
     }
 
     /* reschedule */
@@ -750,16 +755,29 @@ static void grits_plugin_gps_init(GritsPluginGPS *self)
 
 static void grits_plugin_gps_dispose(GObject *gobject)
 {
+       GritsPluginGPS *self = GRITS_PLUGIN_GPS(gobject);
+
        g_debug("GritsPluginGPS: dispose");
 
+        if (self->viewer) {
+               if (self->marker) {
+                   grits_viewer_remove(self->viewer,
+                                       GRITS_OBJECT(self->marker));
+               }
+                g_object_unref(self->viewer);
+                self->viewer = NULL;
+        }
+
        /* Drop references */
        G_OBJECT_CLASS(grits_plugin_gps_parent_class)->dispose(gobject);
 }
 
 static void grits_plugin_gps_finalize(GObject *gobject)
 {
-       g_debug("GritsPluginGPS: finalize");
        GritsPluginGPS *self = GRITS_PLUGIN_GPS(gobject);
+
+       g_debug("GritsPluginGPS: finalize");
+
        /* Free data */
        gtk_widget_destroy(self->config);
        G_OBJECT_CLASS(grits_plugin_gps_parent_class)->finalize(gobject);