static void tile_rendered_cb (ChamplainTile *tile, gpointer data, guint size, gboolean error, ChamplainMapSource *map_source) { ChamplainMapSource *next_source; g_signal_handlers_disconnect_by_func (tile, tile_rendered_cb, map_source); next_source = champlain_map_source_get_next_source (map_source); if (!error) { ChamplainTileSource *tile_source = CHAMPLAIN_TILE_SOURCE (map_source); ChamplainTileCache *tile_cache = champlain_tile_source_get_cache (tile_source); if (tile_cache && data) champlain_tile_cache_store_tile (tile_cache, tile, data, size); champlain_tile_set_fade_in (tile, TRUE); champlain_tile_set_state (tile, CHAMPLAIN_STATE_DONE); champlain_tile_display_content (tile); } else if (next_source) champlain_map_source_fill_tile (next_source, tile); g_object_unref (map_source); g_object_unref (tile); }
static void assign_cache_of_next_source_sequence (ChamplainMapSourceChain *source_chain, ChamplainMapSource *start_map_source, ChamplainTileCache *tile_cache) { ChamplainMapSource *map_source = start_map_source; ChamplainMapSource *chain_next_source = champlain_map_source_get_next_source (CHAMPLAIN_MAP_SOURCE (source_chain)); do { map_source = champlain_map_source_get_next_source (map_source); } while (CHAMPLAIN_IS_TILE_CACHE (map_source)); while (CHAMPLAIN_IS_TILE_SOURCE (map_source) && map_source != chain_next_source) { champlain_tile_source_set_cache (CHAMPLAIN_TILE_SOURCE (map_source), tile_cache); map_source = champlain_map_source_get_next_source (map_source); } }