diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-03-02 18:36:44 -0800 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-03-04 15:42:07 -0800 |
commit | 161ae804c23ff76f6c25596e811ec5861833d960 (patch) | |
tree | b4e4f1fafd26c3710d783f279660fc7db533c591 /platform/macos/src/MGLMapView.mm | |
parent | 60d10dd27df38ac4e97214d1cd514198c381695c (diff) | |
download | qtlocation-mapboxgl-161ae804c23ff76f6c25596e811ec5861833d960.tar.gz |
[ios, macos] Add support for queryRenderedFeatures filter
Diffstat (limited to 'platform/macos/src/MGLMapView.mm')
-rw-r--r-- | platform/macos/src/MGLMapView.mm | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm index ff98095e15..e09daa1c18 100644 --- a/platform/macos/src/MGLMapView.mm +++ b/platform/macos/src/MGLMapView.mm @@ -50,6 +50,7 @@ #import "NSURL+MGLAdditions.h" #import "NSColor+MGLAdditions.h" #import "NSImage+MGLAdditions.h" +#import "NSPredicate+MGLAdditions.h" #import <QuartzCore/QuartzCore.h> @@ -2519,7 +2520,7 @@ public: return [self visibleFeaturesAtPoint:point inStyleLayersWithIdentifiers:nil]; } -- (NS_ARRAY_OF(id <MGLFeature>) *)visibleFeaturesAtPoint:(NSPoint)point inStyleLayersWithIdentifiers:(NS_SET_OF(NSString *) *)styleLayerIdentifiers { +- (NS_ARRAY_OF(id <MGLFeature>) *)visibleFeaturesAtPoint:(NSPoint)point inStyleLayersWithIdentifiers:(NS_SET_OF(NSString *) *)styleLayerIdentifiers predicate:(NSPredicate *)predicate { // Cocoa origin is at the lower-left corner. mbgl::ScreenCoordinate screenCoordinate = { point.x, NSHeight(self.bounds) - point.y }; @@ -2532,8 +2533,13 @@ public: }]; optionalLayerIDs = layerIDs; } - - std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs }); + + mbgl::optional<mbgl::style::Filter> optionalFilter; + if (predicate) { + optionalFilter = predicate.mgl_filter; + } + + std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter }); return MGLFeaturesFromMBGLFeatures(features); } @@ -2541,7 +2547,7 @@ public: return [self visibleFeaturesInRect:rect inStyleLayersWithIdentifiers:nil]; } -- (NS_ARRAY_OF(id <MGLFeature>) *)visibleFeaturesInRect:(NSRect)rect inStyleLayersWithIdentifiers:(NS_SET_OF(NSString *) *)styleLayerIdentifiers { +- (NS_ARRAY_OF(id <MGLFeature>) *)visibleFeaturesInRect:(NSRect)rect inStyleLayersWithIdentifiers:(NS_SET_OF(NSString *) *)styleLayerIdentifiers predicate:(NSPredicate *)predicate { // Cocoa origin is at the lower-left corner. mbgl::ScreenBox screenBox = { { NSMinX(rect), NSHeight(self.bounds) - NSMaxY(rect) }, @@ -2557,8 +2563,13 @@ public: }]; optionalLayerIDs = layerIDs; } - - std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, { optionalLayerIDs }); + + mbgl::optional<mbgl::style::Filter> optionalFilter; + if (predicate) { + optionalFilter = predicate.mgl_filter; + } + + std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter }); return MGLFeaturesFromMBGLFeatures(features); } |