old_contents: #!/usr/bin/env python
  
  # To run this example, you need to set the GI_TYPELIB_PATH environment
  # variable to point to the gir directory:
  #
  # export GI_TYPELIB_PATH=$GI_TYPELIB_PATH:/usr/local/lib/girepository-1.0/
  
  import gi
  gi.require_version('Champlain', '0.12')
  gi.require_version('GtkChamplain', '0.12')
  gi.require_version('GtkClutter', '1.0')
  from gi.repository import GtkClutter
  from gi.repository import GObject, Gtk, Champlain, GtkChamplain
  
  ACCESS_TOKEN = "PUT YOUR ACCESS TOKEN HERE!!!"
  
  CACHE_SIZE = 100000000  # size of cache stored on disk
  MEMORY_CACHE_SIZE = 100 # in-memory cache size (tiles stored in memory)
  MIN_ZOOM = 0
  MAX_ZOOM = 19
  TILE_SIZE = 256
  LICENSE_TEXT = ""
  LICENSE_URI = "https://www.mapbox.com/tos/"
  
  
  def create_cached_source():
      factory = Champlain.MapSourceFactory.dup_default()
  
      tile_source = Champlain.NetworkTileSource.new_full(
          "mapbox",
          "mapbox",
          LICENSE_TEXT,
          LICENSE_URI,
          MIN_ZOOM,
          MAX_ZOOM,
          TILE_SIZE,
          Champlain.MapProjection.MAP_PROJECTION_MERCATOR,
          "https://a.tiles.mapbox.com/v4/mapbox.streets/#Z#/#X#/#Y#.png?access_token=" + ACCESS_TOKEN,
          Champlain.ImageRenderer())
  
      tile_size = tile_source.get_tile_size()
  
      error_source = factory.create_error_source(tile_size)
      file_cache = Champlain.FileCache.new_full(CACHE_SIZE, None, Champlain.ImageRenderer())
      memory_cache = Champlain.MemoryCache.new_full(MEMORY_CACHE_SIZE, Champlain.ImageRenderer())
  
      source_chain = Champlain.MapSourceChain()
      # tile is retrieved in this order:
      # memory_cache -> file_cache -> tile_source -> error_source
      # the first source that contains the tile returns it
      source_chain.push(error_source)
      source_chain.push(tile_source)
      source_chain.push(file_cache)
      source_chain.push(memory_cache)
  
      return source_chain
  
  
  GtkClutter.init([])
  
  window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
  window.connect("destroy", Gtk.main_quit)
  
  widget = GtkChamplain.Embed()
  widget.set_size_request(640, 480)
  
  view = widget.get_view()
  
  view.set_map_source(create_cached_source())
  
  window.add(widget)
  window.show_all()
  
  Gtk.main()
  
  
  
new_contents: #!/usr/bin/env python
  
  # To run this example, you need to set the GI_TYPELIB_PATH environment
  # variable to point to the gir directory:
  #
  # export GI_TYPELIB_PATH=$GI_TYPELIB_PATH:/usr/local/lib/girepository-1.0/
  
  import gi
  gi.require_version('Champlain', '0.12')
  gi.require_version('GtkChamplain', '0.12')
  gi.require_version('GtkClutter', '1.0')
  from gi.repository import GtkClutter
  from gi.repository import GObject, Gtk, Champlain, GtkChamplain
  
  ACCESS_TOKEN = "PUT YOUR ACCESS TOKEN HERE!!!"
  
  CACHE_SIZE = 100000000  # size of cache stored on disk
  MEMORY_CACHE_SIZE = 100 # in-memory cache size (tiles stored in memory)
  MIN_ZOOM = 0
  MAX_ZOOM = 19
  TILE_SIZE = 256
  LICENSE_TEXT = ""
  LICENSE_URI = "https://www.mapbox.com/tos/"
  
  
  def create_cached_source():
      factory = Champlain.MapSourceFactory.dup_default()
  
      tile_source = Champlain.NetworkTileSource.new_full(
          "mapbox",
          "mapbox",
          LICENSE_TEXT,
          LICENSE_URI,
          MIN_ZOOM,
          MAX_ZOOM,
          TILE_SIZE,
          Champlain.MapProjection.MERCATOR,
          "https://a.tiles.mapbox.com/v4/mapbox.streets/#Z#/#X#/#Y#.png?access_token=" + ACCESS_TOKEN,
          Champlain.ImageRenderer())
  
      tile_size = tile_source.get_tile_size()
  
      error_source = factory.create_error_source(tile_size)
      file_cache = Champlain.FileCache.new_full(CACHE_SIZE, None, Champlain.ImageRenderer())
      memory_cache = Champlain.MemoryCache.new_full(MEMORY_CACHE_SIZE, Champlain.ImageRenderer())
  
      source_chain = Champlain.MapSourceChain()
      # tile is retrieved in this order:
      # memory_cache -> file_cache -> tile_source -> error_source
      # the first source that contains the tile returns it
      source_chain.push(error_source)
      source_chain.push(tile_source)
      source_chain.push(file_cache)
      source_chain.push(memory_cache)
  
      return source_chain
  
  
  GtkClutter.init([])
  
  window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
  window.connect("destroy", Gtk.main_quit)
  
  widget = GtkChamplain.Embed()
  widget.set_size_request(640, 480)
  
  view = widget.get_view()
  
  view.set_map_source(create_cached_source())
  
  window.add(widget)
  window.show_all()
  
  Gtk.main()
  
  
  
subject: Fix MapProjection attribute error for 'MAP_PROJECTION_MERCATOR'