Add iOS/macOS observer hooks (#3245)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Bart Louwers <bart@emeel.net>
This commit is contained in:
@@ -124,6 +124,7 @@
|
||||
"MLNOfflineRegion.h": "platform/darwin/src/MLNOfflineRegion.h",
|
||||
"MLNTilePyramidOfflineRegion.h": "platform/darwin/src/MLNTilePyramidOfflineRegion.h",
|
||||
"NSValue+MLNAdditions.h": "platform/darwin/src/NSValue+MLNAdditions.h",
|
||||
"MLNTileOperation.h": "platform/darwin/src/MLNTileOperation.h",
|
||||
"MLNMapViewDelegate.h": "platform/macos/src/MLNMapViewDelegate.h",
|
||||
"MLNCluster.h": "platform/darwin/src/MLNCluster.h",
|
||||
"MLNFeature.h": "platform/darwin/src/MLNFeature.h",
|
||||
|
||||
@@ -38,6 +38,21 @@ class MLNMapViewImpl : public mbgl::MapObserver {
|
||||
void onSourceChanged(mbgl::style::Source& source) override;
|
||||
void onDidBecomeIdle() override;
|
||||
bool onCanRemoveUnusedStyleImage(const std::string& imageIdentifier) override;
|
||||
void onRegisterShaders(mbgl::gfx::ShaderRegistry&) override;
|
||||
void onPreCompileShader(mbgl::shaders::BuiltIn, mbgl::gfx::Backend::Type,
|
||||
const std::string&) override;
|
||||
void onPostCompileShader(mbgl::shaders::BuiltIn, mbgl::gfx::Backend::Type,
|
||||
const std::string&) override;
|
||||
void onShaderCompileFailed(mbgl::shaders::BuiltIn, mbgl::gfx::Backend::Type,
|
||||
const std::string&) override;
|
||||
void onGlyphsLoaded(const mbgl::FontStack&, const mbgl::GlyphRange&) override;
|
||||
void onGlyphsError(const mbgl::FontStack&, const mbgl::GlyphRange&, std::exception_ptr) override;
|
||||
void onGlyphsRequested(const mbgl::FontStack&, const mbgl::GlyphRange&) override;
|
||||
void onTileAction(mbgl::TileOperation, const mbgl::OverscaledTileID&,
|
||||
const std::string&) override;
|
||||
void onSpriteLoaded(const std::optional<mbgl::style::Sprite>&) override;
|
||||
void onSpriteError(const std::optional<mbgl::style::Sprite>&, std::exception_ptr) override;
|
||||
void onSpriteRequested(const std::optional<mbgl::style::Sprite>&) override;
|
||||
|
||||
protected:
|
||||
/// Cocoa map view that this adapter bridges to.
|
||||
|
||||
@@ -112,3 +112,89 @@ bool MLNMapViewImpl::onCanRemoveUnusedStyleImage(const std::string &imageIdentif
|
||||
NSString *imageName = [NSString stringWithUTF8String:imageIdentifier.c_str()];
|
||||
return [mapView shouldRemoveStyleImage:imageName];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onRegisterShaders(mbgl::gfx::ShaderRegistry& shaders) {
|
||||
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onPreCompileShader(mbgl::shaders::BuiltIn shaderID, mbgl::gfx::Backend::Type backend, const std::string& defines) {
|
||||
NSString *definesCopy = [NSString stringWithUTF8String:defines.c_str()];
|
||||
[mapView shaderWillCompile:static_cast<int>(shaderID) backend:static_cast<int>(backend) defines:definesCopy];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onPostCompileShader(mbgl::shaders::BuiltIn shaderID, mbgl::gfx::Backend::Type backend, const std::string& defines) {
|
||||
NSString *definesCopy = [NSString stringWithUTF8String:defines.c_str()];
|
||||
[mapView shaderDidCompile:static_cast<int>(shaderID) backend:static_cast<int>(backend) defines:definesCopy];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onShaderCompileFailed(mbgl::shaders::BuiltIn shaderID, mbgl::gfx::Backend::Type backend, const std::string& defines) {
|
||||
NSString *definesCopy = [NSString stringWithUTF8String:defines.c_str()];
|
||||
[mapView shaderDidFailCompile:static_cast<int>(shaderID) backend:static_cast<int>(backend) defines:definesCopy];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onGlyphsLoaded(const mbgl::FontStack& fontStack, const mbgl::GlyphRange& range) {
|
||||
NSMutableArray* fontStackCopy = [[NSMutableArray alloc] init];
|
||||
std::for_each(fontStack.begin(), fontStack.end(), ^(const std::string& str) {
|
||||
[fontStackCopy addObject:[NSString stringWithUTF8String:str.c_str()]];
|
||||
});
|
||||
|
||||
[mapView glyphsDidLoad:fontStackCopy range:NSMakeRange(range.first, range.second - range.first)];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onGlyphsError(const mbgl::FontStack& fontStack, const mbgl::GlyphRange& range, std::exception_ptr error) {
|
||||
NSMutableArray* fontStackCopy = [[NSMutableArray alloc] init];
|
||||
std::for_each(fontStack.begin(), fontStack.end(), ^(const std::string& str) {
|
||||
[fontStackCopy addObject:[NSString stringWithUTF8String:str.c_str()]];
|
||||
});
|
||||
|
||||
[mapView glyphsDidError:fontStackCopy range:NSMakeRange(range.first, range.second - range.first)];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onGlyphsRequested(const mbgl::FontStack& fontStack, const mbgl::GlyphRange& range) {
|
||||
NSMutableArray* fontStackCopy = [[NSMutableArray alloc] init];
|
||||
std::for_each(fontStack.begin(), fontStack.end(), ^(const std::string& str) {
|
||||
[fontStackCopy addObject:[NSString stringWithUTF8String:str.c_str()]];
|
||||
});
|
||||
|
||||
[mapView glyphsWillLoad:fontStackCopy range:NSMakeRange(range.first, range.second - range.first)];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onTileAction(mbgl::TileOperation operation, const mbgl::OverscaledTileID& tile, const std::string& sourceID) {
|
||||
[mapView tileDidTriggerAction:MLNTileOperation(static_cast<int>(operation))
|
||||
x:tile.canonical.x
|
||||
y:tile.canonical.x
|
||||
z:tile.canonical.z
|
||||
wrap:tile.wrap
|
||||
overscaledZ:tile.overscaledZ
|
||||
sourceID:[NSString stringWithUTF8String:sourceID.c_str()]];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onSpriteLoaded(const std::optional<mbgl::style::Sprite>& spriteID) {
|
||||
if (!spriteID.has_value()) {
|
||||
[mapView spriteDidLoad:nil url:nil];
|
||||
return;
|
||||
}
|
||||
|
||||
[mapView spriteDidLoad:[NSString stringWithUTF8String:spriteID.value().id.c_str()]
|
||||
url:[NSString stringWithUTF8String:spriteID.value().spriteURL.c_str()]];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onSpriteError(const std::optional<mbgl::style::Sprite>& spriteID, std::exception_ptr error) {
|
||||
if (!spriteID.has_value()) {
|
||||
[mapView spriteDidError:nil url:nil];
|
||||
return;
|
||||
}
|
||||
|
||||
[mapView spriteDidError:[NSString stringWithUTF8String:spriteID.value().id.c_str()]
|
||||
url:[NSString stringWithUTF8String:spriteID.value().spriteURL.c_str()]];
|
||||
}
|
||||
|
||||
void MLNMapViewImpl::onSpriteRequested(const std::optional<mbgl::style::Sprite>& spriteID) {
|
||||
if (!spriteID.has_value()) {
|
||||
[mapView spriteWillLoad:nil url:nil];
|
||||
return;
|
||||
}
|
||||
|
||||
[mapView spriteWillLoad:[NSString stringWithUTF8String:spriteID.value().id.c_str()]
|
||||
url:[NSString stringWithUTF8String:spriteID.value().spriteURL.c_str()]];
|
||||
}
|
||||
|
||||
@@ -1000,6 +1000,113 @@ public:
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)shaderWillCompile:(NSInteger)id backend:(NSInteger)backend defines:(nonnull NSString *)defines {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:shaderWillCompile:backend:defines:)]) {
|
||||
[self.delegate mapView:self shaderWillCompile:id backend:backend defines:defines];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)shaderDidCompile:(NSInteger)id backend:(NSInteger)backend defines:(nonnull NSString *)defines {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:shaderDidCompile:backend:defines:)]) {
|
||||
[self.delegate mapView:self shaderDidCompile:id backend:backend defines:defines];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)shaderDidFailCompile:(NSInteger)id backend:(NSInteger)backend defines:(nonnull NSString *)defines {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:shaderDidFailCompile:backend:defines:)]) {
|
||||
[self.delegate mapView:self shaderDidFailCompile:id backend:backend defines:defines];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)glyphsWillLoad:(nonnull NSArray<NSString*>*)fontStack range:(NSRange)range {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:glyphsWillLoad:range:)]) {
|
||||
[self.delegate mapView:self glyphsWillLoad:fontStack range:range];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)glyphsDidLoad:(nonnull NSArray<NSString*>*)fontStack range:(NSRange)range {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:glyphsDidLoad:range:)]) {
|
||||
[self.delegate mapView:self glyphsDidLoad:fontStack range:range];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)glyphsDidError:(nonnull NSArray<NSString*>*)fontStack range:(NSRange)range {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:glyphsDidError:range:)]) {
|
||||
[self.delegate mapView:self glyphsDidError:fontStack range:range];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)tileDidTriggerAction:(MLNTileOperation)operation
|
||||
x:(NSInteger)x
|
||||
y:(NSInteger)y
|
||||
z:(NSInteger)z
|
||||
wrap:(NSInteger)wrap
|
||||
overscaledZ:(NSInteger)overscaledZ
|
||||
sourceID:(nonnull NSString *)sourceID {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:tileDidTriggerAction:x:y:z:wrap:overscaledZ:sourceID:)]) {
|
||||
[self.delegate mapView:self tileDidTriggerAction:operation x:x y:y z:z wrap:wrap overscaledZ:overscaledZ sourceID:sourceID];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)spriteWillLoad:(nullable NSString *)id url:(nullable NSString *)url {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:spriteWillLoad:url:)]) {
|
||||
[self.delegate mapView:self spriteWillLoad:id url:url];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)spriteDidLoad:(nullable NSString *)id url:(nullable NSString *)url {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:spriteDidLoad:url:)]) {
|
||||
[self.delegate mapView:self spriteDidLoad:id url:url];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)spriteDidError:(nullable NSString *)id url:(nullable NSString *)url {
|
||||
if (!_mbglMap) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(mapView:spriteDidError:url:)]) {
|
||||
[self.delegate mapView:self spriteDidError:id url:url];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: Printing
|
||||
|
||||
- (void)print:(__unused id)sender {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#import <AppKit/AppKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MLNTileOperation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@@ -227,6 +228,50 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
*/
|
||||
- (BOOL)mapView:(MLNMapView *)mapView shouldRemoveStyleImage:(NSString *)imageName;
|
||||
|
||||
// MARK: Shader Compilation
|
||||
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
shaderWillCompile:(NSInteger)id
|
||||
backend:(NSInteger)backend
|
||||
defines:(NSString *)defines;
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
shaderDidCompile:(NSInteger)id
|
||||
backend:(NSInteger)backend
|
||||
defines:(NSString *)defines;
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
shaderDidFailCompile:(NSInteger)id
|
||||
backend:(NSInteger)backend
|
||||
defines:(NSString *)defines;
|
||||
|
||||
// MARK: Glyph Requests
|
||||
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
glyphsWillLoad:(NSArray<NSString *> *)fontStack
|
||||
range:(NSRange)range;
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
glyphsDidLoad:(NSArray<NSString *> *)fontStack
|
||||
range:(NSRange)range;
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
glyphsDidError:(NSArray<NSString *> *)fontStack
|
||||
range:(NSRange)range;
|
||||
|
||||
// MARK: Tile Requests
|
||||
|
||||
- (void)mapView:(MLNMapView *)mapView
|
||||
tileDidTriggerAction:(MLNTileOperation)operation
|
||||
x:(NSInteger)x
|
||||
y:(NSInteger)y
|
||||
z:(NSInteger)z
|
||||
wrap:(NSInteger)wrap
|
||||
overscaledZ:(NSInteger)overscaledZ
|
||||
sourceID:(NSString *)sourceID;
|
||||
|
||||
// MARK: Sprite Requests
|
||||
|
||||
- (void)mapView:(MLNMapView *)mapView spriteWillLoad:(NSString *)id url:(NSString *)url;
|
||||
- (void)mapView:(MLNMapView *)mapView spriteDidLoad:(NSString *)id url:(NSString *)url;
|
||||
- (void)mapView:(MLNMapView *)mapView spriteDidError:(NSString *)id url:(NSString *)url;
|
||||
|
||||
// MARK: Managing the Appearance of Annotations
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#import "MLNMapView.h"
|
||||
#import "MLNTileOperation.h"
|
||||
|
||||
#include <mbgl/util/size.hpp>
|
||||
|
||||
@@ -47,6 +48,29 @@ class Renderer;
|
||||
- (void)sourceDidChange:(nonnull MLNSource *)source;
|
||||
- (BOOL)shouldRemoveStyleImage:(nonnull NSString *)imageName;
|
||||
|
||||
- (void)shaderWillCompile:(NSInteger)id
|
||||
backend:(NSInteger)backend
|
||||
defines:(nonnull NSString *)defines;
|
||||
- (void)shaderDidCompile:(NSInteger)id
|
||||
backend:(NSInteger)backend
|
||||
defines:(nonnull NSString *)defines;
|
||||
- (void)shaderDidFailCompile:(NSInteger)id
|
||||
backend:(NSInteger)backend
|
||||
defines:(nonnull NSString *)defines;
|
||||
- (void)glyphsWillLoad:(nonnull NSArray<NSString *> *)fontStack range:(NSRange)range;
|
||||
- (void)glyphsDidLoad:(nonnull NSArray<NSString *> *)fontStack range:(NSRange)range;
|
||||
- (void)glyphsDidError:(nonnull NSArray<NSString *> *)fontStack range:(NSRange)range;
|
||||
- (void)tileDidTriggerAction:(MLNTileOperation)operation
|
||||
x:(NSInteger)x
|
||||
y:(NSInteger)y
|
||||
z:(NSInteger)z
|
||||
wrap:(NSInteger)wrap
|
||||
overscaledZ:(NSInteger)overscaledZ
|
||||
sourceID:(nonnull NSString *)sourceID;
|
||||
- (void)spriteWillLoad:(nullable NSString *)id url:(nullable NSString *)url;
|
||||
- (void)spriteDidLoad:(nullable NSString *)id url:(nullable NSString *)url;
|
||||
- (void)spriteDidError:(nullable NSString *)id url:(nullable NSString *)url;
|
||||
|
||||
/// Asynchronously render a frame of the map.
|
||||
- (void)setNeedsRerender;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user