* [ios] Support for a customizable zoom gesture centering strategy.
We introduce a new MGLZoomGestureCentering enum and corresponding zoomGestureCentering property on MGLMapView.
Currently, Mapbox automatically adjusts the center of the map relative to the user's gesture location, but for some applications (e.g Uber, Lyft) it is preferable to keep the map center "locked" in response to zoom gestures.
Exisiting code will retain its current behavior without modification and will implicitly use the default value of MGLZoomGestureCenteringFollowsTouch. New code can specify MGLZoomGestureCenteringLockedInPlace to get the new "locked" behavior.
* [ios] Added -anchorPointForGesture: to MGLMapView
* [osx] Added tile count, tile size columns
Added tile count and tile size columns to osxapp’s Offline Packs window. Also expanded the byte count formatters to include the raw byte count for debugging purposes.
* [osx] Corrected resource count formatters
Use grouping separators consistently.
This forces the call of the map view's display link target when the
display link is created. When a map view is shown the first time
this is not required. However, if the display link was torn down
and then recreated due to the map view being removed / obscured in the
view hierarchy the map view delegate may expect to be informed when
the map view did finish loading the map when it is shown again.
This adds a call to `updateFromDisplayLink` just after a display link
is created which helps trigger a full refresh of the map in the sense
that all delegate methods get exercised including
`mapViewDidFinishLoadingMap`.
iOS
- Add section headers.
- Add more detail to `make` packaging commands and emphasize that Debug
is the default build type.
- Manually checking out git submodules is no longer necessary.
Core
- Add 'Keeping up to date' section that mentions submodules.
delete[] was being called for a malloc() allocated C buffer.
Found by valgrind:
```
==23065== Mismatched free() / delete / delete []
==23065== at 0x4C2F77B: operator delete[](void*) (vg_replace_malloc.c:621)
==23065== by 0x50C5529: std::default_delete<unsigned char []>::operator()(unsigned char*) const (unique_ptr.h:119)
==23065== by 0x523EC85: std::unique_ptr<unsigned char [], std::default_delete<unsigned char []> >::reset(unsigned char*) (unique_ptr.h:581)
==23065== by 0x523E3D4: mbgl::Raster::upload(mbgl::gl::ObjectStore&) (raster.cpp:63)
==23065== by 0x520CA08: mbgl::RasterBucket::upload(mbgl::gl::ObjectStore&) (raster_bucket.cpp:16)
==23065== by 0x520E56A: mbgl::Painter::render(mbgl::style::Style const&, mbgl::FrameData const&, mbgl::SpriteAtlas&) (painter.cpp:130)
==23065== by 0x52BE15A: mbgl::Map::Impl::render() (map.cpp:265)
==23065== by 0x52BD9BE: mbgl::Map::render() (map.cpp:175)
==23065== by 0x50C9EB4: QMapboxGL::render() (qmapboxgl.cpp:579)
==23065== by 0x4056D3: MapWindow::paintGL() (mapwindow.cpp:166)
```
Ignore multipoints (as opposed to polylines and polygons) when adding annotations, just like we ignore multipolylines, multipolygons, and shape collections.
In osxapp, break multipoint features into points before adding them as annotations.