X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fplugins%2Felev.c;h=a8f9df1ac89264e88a49c7ee2ab9bee2357d07c4;hp=5ea94ea00fb9749403d0264d6ad63b573395f51f;hb=5350256efff1c97426e0db60e404bfd8a6cb08be;hpb=b5fde541db3eec5aa0b2d7f5b7a0725ad524f84c diff --git a/src/plugins/elev.c b/src/plugins/elev.c index 5ea94ea..a8f9df1 100644 --- a/src/plugins/elev.c +++ b/src/plugins/elev.c @@ -246,12 +246,12 @@ static void _free_tile(GisTile *tile, gpointer _elev) static gpointer _update_tiles(gpointer _elev) { GisPluginElev *elev = _elev; - g_mutex_lock(elev->mutex); - gdouble lat, lon, elevation; - gis_viewer_get_location(elev->viewer, &lat, &lon, &elevation); - gis_tile_update(elev->tiles, + if (!g_mutex_trylock(elev->mutex)) + return NULL; + GisPoint eye; + gis_viewer_get_location(elev->viewer, &eye.lat, &eye.lon, &eye.elev); + gis_tile_update(elev->tiles, &eye, MAX_RESOLUTION, TILE_WIDTH, TILE_WIDTH, - lat, lon, elevation, _load_tile, elev); gis_tile_gc(elev->tiles, time(NULL)-10, _free_tile, elev); @@ -268,6 +268,13 @@ static void _on_location_changed(GisViewer *viewer, g_thread_create(_update_tiles, elev, FALSE, NULL); } +static gpointer _threaded_init(GisPluginElev *elev) +{ + _load_tile(elev->tiles, elev); + _update_tiles(elev); + return NULL; +} + /*********** * Methods * ***********/ @@ -286,8 +293,7 @@ GisPluginElev *gis_plugin_elev_new(GisViewer *viewer) elev->viewer = g_object_ref(viewer); /* Load initial tiles */ - _load_tile(elev->tiles, elev); - g_thread_create(_update_tiles, elev, FALSE, NULL); + g_thread_create((GThreadFunc)_threaded_init, elev, FALSE, NULL); /* Connect signals */ elev->sigid = g_signal_connect(elev->viewer, "location-changed",