*/
#include <time.h>
+#include <glib/gstdio.h>
#include <GL/gl.h>
#include <gis.h>
data->self = self;
data->tile = tile;
data->pixbuf = gdk_pixbuf_new_from_file(path, NULL);
- if (!data->pixbuf)
+ if (data->pixbuf) {
+ g_idle_add_full(G_PRIORITY_LOW, _load_tile_cb, data, NULL);
+ } else {
g_warning("GisPluginBmng: _load_tile - Error loading pixbuf %s", path);
+ g_remove(path);
+ }
g_free(path);
- g_idle_add_full(G_PRIORITY_LOW, _load_tile_cb, data, NULL);
g_debug("GisPluginBmng: _load_tile end %p", g_thread_self());
}
g_thread_create(_update_tiles, self, FALSE, NULL);
}
+static gpointer _expose(GisCallback *callback, gpointer _self)
+{
+ GisPluginBmng *self = GIS_PLUGIN_BMNG(_self);
+ g_debug("GisPluginBmng: expose viewer=%p tiles=%p,%p",
+ self->viewer, self->tiles, self->tiles->data);
+ gis_viewer_render_tiles(self->viewer, self->tiles);
+ return NULL;
+}
+
/***********
* Methods *
***********/
{
g_debug("GisPluginBmng: new");
GisPluginBmng *self = g_object_new(GIS_TYPE_PLUGIN_BMNG, NULL);
- self->viewer = viewer;
+ self->viewer = g_object_ref(viewer);
/* Load initial tiles */
_load_tile(self->tiles, self);
self->sigid = g_signal_connect(self->viewer, "location-changed",
G_CALLBACK(_on_location_changed), self);
- return self;
-}
+ /* Add renderers */
+ GisCallback *callback = gis_callback_new(_expose, self);
+ gis_viewer_add(viewer, GIS_OBJECT(callback), GIS_LEVEL_WORLD, 0);
-static void gis_plugin_bmng_expose(GisPlugin *_self)
-{
- GisPluginBmng *self = GIS_PLUGIN_BMNG(_self);
- g_debug("GisPluginBmng: expose viewer=%p tiles=%p,%p",
- self->viewer, self->tiles, self->tiles->data);
- gis_viewer_render_tiles(self->viewer, self->tiles);
+ return self;
}
{
g_debug("GisPluginBmng: plugin_init");
/* Add methods to the interface */
- iface->expose = gis_plugin_bmng_expose;
}
/* Class/Object init */
static void gis_plugin_bmng_init(GisPluginBmng *self)
g_debug("GisPluginBmng: dispose");
GisPluginBmng *self = GIS_PLUGIN_BMNG(gobject);
/* Drop references */
- g_signal_handler_disconnect(self->viewer, self->sigid);
+ if (self->viewer) {
+ g_signal_handler_disconnect(self->viewer, self->sigid);
+ g_object_unref(self->viewer);
+ self->viewer = NULL;
+ }
G_OBJECT_CLASS(gis_plugin_bmng_parent_class)->dispose(gobject);
}
static void gis_plugin_bmng_finalize(GObject *gobject)