extern VikLayerInterface vik_georef_layer_interface;
extern VikLayerInterface vik_gps_layer_interface;
extern VikLayerInterface vik_dem_layer_interface;
+#ifdef HAVE_LIBMAPNIK
+extern VikLayerInterface vik_mapnik_layer_interface;
+#endif
enum {
VL_UPDATE_SIGNAL,
void vik_layer_emit_update ( VikLayer *vl )
{
if ( vl->visible && vl->realized ) {
+ GThread *thread = vik_window_get_thread ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl)) );
+ if ( !thread )
+ // Do nothing
+ return;
+
vik_window_set_redraw_trigger(vl);
// Only ever draw when there is time to do so
- if ( g_thread_self() != vik_window_get_thread (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl))) )
+ if ( g_thread_self() != thread )
// Drawing requested from another (background) thread, so handle via the gdk thread method
gdk_threads_add_idle ( (GSourceFunc) idle_draw, vl );
else
&vik_gps_layer_interface,
&vik_maps_layer_interface,
&vik_dem_layer_interface,
+#ifdef HAVE_LIBMAPNIK
+ &vik_mapnik_layer_interface,
+#endif
};
VikLayerInterface *vik_layer_get_interface ( VikLayerTypeEnum type )
return l->name;
}
+time_t vik_layer_get_timestamp ( VikLayer *vl )
+{
+ if ( vik_layer_interfaces[vl->type]->get_timestamp )
+ return vik_layer_interfaces[vl->type]->get_timestamp ( vl );
+ return 0;
+}
+
VikLayer *vik_layer_create ( VikLayerTypeEnum type, VikViewport *vp, gboolean interactive )
{
VikLayer *new_layer = NULL;