Commit Graph

278 Commits

Author SHA1 Message Date
Minh Nguyễn
d39ea23b09 [ios, macos] Hardened std::map usage in MGLMapVIew
Replaced std::map::operator[] usage with std::map::at(). Backed up an assertion on iOS with a guard when -annotationTagsInRect: returns the tag of a nonexistent annotation, for consistency with macOS. Removed an unnecessary and risky subscript into _annotationContextsByAnnotationTag in -positioningRectForCalloutForAnnotationWithTag: on iOS.
2017-04-05 14:56:06 -07:00
Fabian Guerra Soto
ec34813c90 [ios] assertion to check if an annotationTag > 0 (#8588)
* [ios] assertion to check if an annotationTag > 0

* [ios,macos] assertion and guard added to check annotations in  visibleAnnotationsInRect
2017-04-05 14:16:58 -04:00
Jesse Bounds
ff73371216 [ios] Silence incompatible type warning for callout view (#8608)
This silences a compatibility warning that was introduced in a previous
refactor that changed the return type of the callout view for
annotation delegate method. This also adds checks to ensure that the
callout view provided by the delegate to the map view is of the correct
type and conforms to the correct protocol.
2017-04-04 15:25:59 -07:00
Jason Wray
228bff7602 [ios] Replaced UIActionSheet, UIAlertView with UIAlertController 2017-04-01 19:58:09 -07:00
Fabian Guerra Soto
c5c69102c5 [ios] nil check in visibleAnnotationsInRect to avoid crash (#8513) 2017-03-28 16:06:16 -04:00
Jason Wray
48e17724a1 [ios] Enable one-finger quickzoom gesture on iPad 2017-03-13 16:49:46 -04:00
Minh Nguyễn
b74d7bfdb4 [ios, macos] Corrected polyline equality
Now that annotation classes override -isEqual:, it’s no longer appropriate to rely on -isEqual: or -containsObject: to check for the preexistence of an annotation. Those methods become deep equality tests, which have worse performance. Checking for identity allows the developer to add a polyline and polygon with identical coordinates, title, etc. to the map.

Implemented a missing -[MGLPolyline isEqual:].

Removed outdated comments about -annotationTagForAnnotation: being expensive.
2017-03-10 15:08:00 -08:00
Fabian Guerra Soto
ffce46cae6 Raise exception when MGLAnnotationView.annotation property is nil (#8339)
* [ios] MGLAnnotationView annotation property made writable

* [ios] standarized exception name for annotations
2017-03-10 14:49:22 -08:00
John Firebaugh
65f74224ab Merge master into release-ios-v3.5.0-android-v5.0.0 2017-03-08 17:31:03 -08:00
Jason Wray
5e36743ef7 [ios] Add SDK version update checking/notification 2017-03-07 10:43:08 -08:00
Ivo van Dongen
161ae804c2 [ios, macos] Add support for queryRenderedFeatures filter 2017-03-04 15:42:07 -08:00
Asheem Mamoowala
60d10dd27d [core] Add support for queryRenderedFeatures filter 2017-03-04 15:42:07 -08:00
Minh Nguyễn
7e9701283f [ios, macos] Update callout when relocating annotation
When relocating a selected point annotation, update the associated callout (popover) rather than deselecting the annotation.
2017-03-03 22:09:41 -08:00
Fabian Guerra Soto
1f1cc131ea [ios] Fixed conversion between Duration and NSTimeInerval (#8276) 2017-03-03 20:11:06 -05:00
Fabian Guerra Soto
8a5cc3560a [ios] MGLAnnotationView annotation property made writable (#8139) 2017-03-02 18:19:23 -05:00
Minh Nguyễn
2f388d6635 Merge branch 'release-ios-v3.4.0' into 1ec5-release-ios-v3.4.2 2017-02-21 22:47:15 -08:00
Jason Wray
c7975e6a18 [ios] Clean-up conditionals for iOS <8 2017-02-21 16:10:00 -05:00
Konstantin Käfer
3ef9e26593 [ios,macos,android,qt] use shared threadpool 2017-02-20 19:26:06 +01:00
Konstantin Käfer
03a14ff000 [darwin] move RunLoop initialization to static variable 2017-02-20 14:36:27 +01:00
Minh Nguyễn
d790132eda [ios, macos] Short-circuit redundant camera changes
Avoid canceling transitions (and triggering preexisting completion handlers) until we get a chance to ensure that a new transition really does have to begin. Consistently avoid mbgl transitions for redundant camera changes. Upon bailing, schedule the completion handler to run asynchronously on a delay equivalent to the requested animation duration.

Added a “functional” equality method to MGLMapCamera that avoids trivial differences.

Fixed invocations of XCTAssertEqualWithAccuracy() that incorrectly expressed the accuracy as a number of digits rather than a scalar tolerance.
2017-02-18 14:14:09 -08:00
Jason Wray
3ec93d3bbe [ios] Round tap-zoom gestures to nearest integer
Round double-tap and two-finger tap zoom gestures to the nearest integer zoom level. This has the benefits for raster tiles, as well as styles with zoom-based functions.

This results in a wider possible zoom range — ~0.5-1.5:

Old: z4.6 → z5.6 (+1.0), z4.4 → z5.4 (+1.0)
New: z4.6 → z6.0 (+1.4), z4.4 → z5.0 (+0.6)
2017-02-13 18:35:04 -05:00
Benedikt Huss
b9be66f287 [ios] Do not deselect annotations any longer when map is zoomed/panned or annotation is moved out of the visible bounds 2017-02-11 13:34:33 -08:00
Minh Nguyễn
272dc3f6a9 Delegate method to restrict movement (#5584)
* [ios, macos] Added delegate method to restrict movement

Added a way for the delegate to restrict where the user can move within the map using gestures.

Fixes #2457.

* [ios] Added support to restrict movement in pinch/rotate gestures

* [ios] Added support to restrict movement in double tap/quick zoom/two finger drag gestures

* [ios] fixed camera reset before two finger drag gesture is complete

* [ios] fixed camera comparison in double tap gestures

* [ios] Changelog update

* [macos] Changelog updated

* [ios, macos] Changelog cleanup

* [ios, macos] Added documentation to clarify performance impact

* [ios] clarified variable name

* [ios] blocking gestures implementation changed to a predictive approach

* [ios] gesture delegate methods refactoring

* [ios] Removed duplicated methods, improved code readability

* [ios] code refactoring to clarify the conditions to execute a gesture
2017-02-09 16:49:04 -05:00
danielmatzke
937fa0ce44 [ios, macos] 7955 fix MGLMapView leaks MGLReachability objects (and threads) (#7956)
* fix MGLMapView leaks MGLReachability objects (and threads)

* fix leak of MGLReachability objects and threads in MGLMapView.commonInit

* update changelogs
2017-02-06 16:02:35 -08:00
Fredrik Karlsson
7d6b91f8e7 [ios] persistent user tracking mode 2017-02-06 20:58:31 +01:00
Konstantin Käfer
62ea1f2185 [core] remove trailing whitespace, add trailing newlines, add space after // 2017-01-27 11:44:16 +01:00
Minh Nguyễn
a662508ddd Merge branch 'release-ios-v3.4.0' into 1ec5-release-ios-v3.4.1-master 2017-01-26 17:56:46 -08:00
fabian-guerra
85f485e4ed [ios, macos] Make MGLMapView non opaque by default (#7859) 2017-01-25 22:04:27 -05:00
Justin R. Miller
5dc83903d6 fixes #6688: assert remaining map view notification responses are main thread (#7838) 2017-01-25 13:38:37 -08:00
Minh Nguyễn
35e062d72c [ios, macos] Wrap camera heading (#7724)
* [ios, macos] Fixed negative camera heading when facing northwest

* [ios] Corrected counterclockwise rotation test
2017-01-24 08:29:46 -08:00
Justin R. Miller
f6715694f9 refs #6779: mobile & Mac SDK style transition options (#7711) 2017-01-18 12:43:08 -08:00
Minh Nguyễn
7ef2843e6a Merge branch 'release-ios-v3.4.0' into 1ec5-release-ios-v3.4.0-beta.7 2017-01-16 11:38:35 -08:00
Jason Wray
8f6009ea20 [ios, macos] Revert deprecation of alphaForShapeAnnotation: delegate method 2017-01-13 15:43:41 -05:00
Fredrik Karlsson
f1fc9bdfeb [ios] Optional positioning and stickiness for callout view 2017-01-11 15:48:08 -08:00
Minh Nguyễn
424c12499c [ios, macos] Make MGLMapView.style property nullable (#7664)
* [ios, macos] Made MGLMapView.style property nullable

MGLMapView’s style property is now nullable (optional in Swift). The property is set to nil while the style loads and in the event that the style has failed to load.

* [ios, macos] Switch to delegate method

* [macos] Create MGLMapView programmatically for layer tests

When MGLMapView is created via a nib, -initWithCoder: is called, causing styleURL to be set to nil, in turn causing the default Streets style to be loaded, fooling MGLStyleLayerTests into thinking one-line has been loaded. Instead, create MGLMapView programmatically, passing the intended style URL into the initializer, preventing Streets from being loaded.
2017-01-11 08:06:20 -08:00
Minh Nguyễn
dea1a30332 [ios, macos] Title case attribution buttons
Also added a category method on NSString for title casing the string, plus tests.
2017-01-10 07:56:06 -08:00
Jesse Bounds
901c806916 [ios] Only use non nil presentationLayers to adjust annotation views (#7626)
Views that are added outside of the viewport do not always have an
instantiated presentationLayer. Attempting to use a nil
presentationLayer to move a view offscreen resulted in the view
being pinned to the left side of the view port (at x == 0).
2017-01-08 12:53:23 -08:00
Minh Nguyễn
a6b1773a44 Merge branch 'release-ios-v3.4.0' into 1ec5-release-ios-v3.4.0-beta.5-master
Also reran make style-code and manually discarded anything related to fill extrusion layers.
2016-12-20 12:41:40 -08:00
Jesse Bounds
afd14cbfe5 [ios] Fix dequeue view variable scope (#7423)
Fix a bug where an annotation view variable was incorrectly
re-declared which caused annotation views to not appear
in some cases. This also refactors the guard that spot
checks that annotation view are or are not visible.
2016-12-14 10:24:06 -08:00
Jesse Bounds
0eac5ea91e [ios]] Remove transaction in callout view update (#7425) 2016-12-14 10:22:02 -08:00
Ivo van Dongen
e9f101a52f [ios, macos] handle duplicate layer error 2016-12-12 09:05:23 -05:00
Minh Nguyễn
fe53af7de0 [ios, macos] Source-driven attribution (#5999)
* [ios, macos] Source-driven attribution

Refactored MGLSource initialization. Implemented a new private class, MGLAttributionInfo, that parses an HTML attribution string from TileJSON and stores the resulting structured data. Added methods to MGLTileSet and MGLStyle to aggregate MGLAttributionInfos.

On macOS, update the attribution view as soon as the source attribution changes. On iOS, fetch the current attribution information when displaying the action sheet.

Removed hard-coded attribution strings.

* [macos] Respect inline formatting in attribution HTML

Apply a default font and color to attribution HTML as it is imported into an attributed string. Pass the attributed string into MGLAttributionButton as is, without stripping formatting. Avoid overriding the font and color after importing the HTML, in case these attributes are explicitly specified rather than intrinsic to a hyperlink.

Constrain the top of the attribution view to all the attribution buttons, in case one of them needs additional headspace.

* [ios, macos] Display unlinked attribution strings

Unlinked attribution strings are represented on macOS as buttons that have the default cursor and do nothing when clicked. On iOS, they are action sheet buttons that do nothing but dismiss the action sheet.

* [macos] Fixed random Auto Layout exception

Auto Layout randomly finds itself unable to satisfy constraints when updating attribution, due to some spurious constraints between attribution buttons. Regenerate the entire attribution view every time the source attribution changes.

* [ios, macos] Thoroughly dedupe attribution infos

Also added a test to verify parity with the GL JS implementation. This implementation avoids sorting.

* [ios, macos] Trim whitespace from attribution strings

Also added parsing tests.

* [ios, macos] Added attribution parsing tests for styles

Included an emoji test to ensure that attribution strings are interpreted as UTF-8, to avoid mojibake. Included a test of removing the underline from a leading copyright symbol.

* [ios, macos] Derive feedback link from source

MGLAttributionInfo now detects feedback links in the attribution HTML code, and it is responsible for tailoring the feedback URL to the current viewport.

Removed the hard-coded feedback action from the attribution sheet on iOS in favor of a source-derived feedback title and URL. Moved the feedback action from macosapp to MGLMapView; applications are now expected to hook an Improve This Map menu item to an MGLMapView action.
2016-12-08 17:43:17 -08:00
Minh Nguyễn
a39f53df22 [ios, macos] Migrate MGLCustomStyleLayerAdditions to style layer API (#7250)
* [ios, macos] Replaced custom style layer API with MGLOpenGLStyleLayer

Replaced the custom style layer API on MGLMapView with an equally unsupported MGLOpenGLStyleLayer API that nonetheless is consistent with the broader runtime styling API and is compatible with macOS.

Fixed an unrecognized selector crash when wrapping a layer of unrecognized type coming from mbgl.

* [macos] Added lime green layer demo to macosapp

Reprised the demo removed from iosapp in #5091.

* [ios, macos] Rationalized MGLOpenGLStyleLayer API

MGLStyle now strongly references any MGLOpenGLStyleLayer object that’s added to it, in order to prevent pointers from going stale and make it easy for layer drawing code to get more information about the map view. Replaced the MGLOpenGLStyleLayer callback blocks with overridable instance methods. Added internal documentation for each method. Subclassed MGLOpenGLStyleLayer as LimeGreenStyleLayer inside macosapp.

Consolidated -addToMapView: into -addToMapView:belowLayer: to ensure that MGLRedundantLayerException gets raised even if the layer is being inserted rather than added to the bottom of the stack.

* [core] Clarified that rendering happens on the main thread

* [ios, macos] Fixed removing and re-adding MGLOpenGLStyleLayer

Don’t allow index-based layer removal to circumvent -removeFromMapView:, which MGLOpenGLStyleLayer relies on to synchronize the style’s array of MGLOpenGLStyleLayers. When obtaining an MGLOpenGLStyleLayer, get the instance already added to the style instead of creating a new one to wrap the underlying CustomLayer.
2016-12-07 00:01:11 -08:00
Fredrik Karlsson
440e06c112 [ios] keep callout view open when panning 2016-12-05 11:42:31 +01:00
Minh Nguyễn
3503c0e767 Merge branch 'release-ios-v3.4.0' into 1ec5-release-ios-v3.4.0-beta.4-master 2016-12-03 15:36:42 -08:00
Jesse Crocker
5dd71d3c30 [ios, macos] Make tap gesture recognizer fail if it doesn’t do anything (#7246)
* Make tap gesture recognizer fail if it doesn’t do anything.

* fix typo

* Use the right nullable

* update changelog

* Make single click gesture recognizer fail if it doesn’t select an annotation

* fix changelog typo

* Remove singleTapGestureRecognizer from public header
2016-12-01 11:50:20 -08:00
Minh Nguyễn
4096544188 [ios, macos] Marked C array parameters as const
Fixes #7214.
2016-11-29 22:47:30 -08:00
Jesse Bounds
d830c48e4a [ios, macos] Refcount view activations (#7208)
This adds a ref count to guard against calling activate after it has
already been called. This can happen when a layer is added during
certain map lifecycle methods like MapChangeWillStartRenderingFrame
that also triggers activation. This also protects against issues
related to a deactivation of the context happening in an inner scope
while an outer scope is still expecting to be able to use the context.
2016-11-29 08:56:59 -08:00
Minh Nguyễn
9fac640bf3 [ios, macos] Key-value compliance for MGLStyle
Replaced -[MGLMapView style] with a property. Keep the MGLStyle object around for the lifetime of the style.

Bracket changes to layers in willChange and didChange calls. The built-in point annotation layer is added after the style is finished loading but before the map is finished loading. Cause a second wave of change notifications to go out, about both sources and layers. Issue change notifications for style layers when shape annotations are added or removed.
2016-11-28 15:45:43 -08:00
Konstantin Käfer
4577c56745 [core] remove unused umbrella header in favor of individual includes 2016-11-22 20:58:51 +01:00