Once the algorithm finds the center of the line, if placement is
not possible, do not place the anchor.
Previous code was trying to continue place the label beyond the center
of the segment.
Fixes#15139.
Change in 3ffc14a325
was a typo while addresssing review nit: while it didn't affect render tests it doesn't work properly in all cases.
Fixes: #14844, #14779, #15039
Viewport center offset usage was wrongly submitted in #14664. It was part of alternative approach that used enlarged viewport. Existing and added tests were not sufficient to spot the regression, since the collision check padding is usually larger than the center offset x and y. Annotation picking has tolerance of only 10 pixels but no annotation integration test was using content insets.
Usage of offset is not needed because `posMatrix` in e.g. `CollisionIndex::projectPoint(const mat4& posMatrix, const Point<float>& point)` already incorporates center offset (projection matrix) and the code in current master was just offsetting all by the value.
Modified [ios] MGLAnnotationViewIntegrationTests.testSelectingAnnotationWithCenterOffset to use different insets. It verifies the fix.
Fixes [iOS] Annotations are not selectable (added via iosapp menu) #15106:
In case of #15106, view's original content insets is {top:88, bottom:34}, causing that center offset is {x:0, y:27} and selection with tolerance of 10 wouldn't select annotation.
After tapping the view, so that the header gets removed, view's content insets get changed to {top:44, bottom:34}, center offset is {x:0, y:5} and annotation selection would work, as described in #15106.
Fixes: #15106
To changelog:
Fixed incorrect center coordinate after pinch regression caused by edge insets fix (#14664).
While working on #14664, missed to understand the logic used in
```
CLLocationCoordinate2D centerCoordinate = _previousPinchCenterCoordinate;
mbgl::EdgeInsets padding { centerPoint.y, centerPoint.x, self.size.height - centerPoint.y, self.size.width - centerPoint.x };
self.mbglMap.jumpTo(mbgl::CameraOptions()
.withCenter(MGLLatLngFromLocationCoordinate2D(centerCoordinate))
.withPadding(padding));
```
Replacing this code by moveBy achieves the required translation.
Fixes: #14977, #15082
Before this change render passes were assigned for the
whole layer at properties evaluation stage.
This caused problems, as layer render data are bound
to the tile and these data might differ from tile to
tile, depending on which tile has been updated by the
tile worker and which has not been yet updated.
This change takes into consideration the actual render
passes required for each tile and combines them for
the layer render passes. Naturally, this change also
introduces render pass check for each render layer in
`RenderLayer::render()` implementations.