[ios, macos] Adds support for specifying an ideographic font family name
Adding a MGLIdeographicFontFamilyName to the containing app's Info.plist will result in CJK glyphs being rasterized on demand (#10522)
This commit is contained in:
committed by
Fabian Guerra Soto
parent
0dc00ad877
commit
c1705f37fb
@@ -187,6 +187,7 @@ public:
|
||||
@property (nonatomic) EAGLContext *context;
|
||||
@property (nonatomic) GLKView *glView;
|
||||
@property (nonatomic) UIImageView *glSnapshotView;
|
||||
|
||||
@property (nonatomic) NS_MUTABLE_ARRAY_OF(NSLayoutConstraint *) *scaleBarConstraints;
|
||||
@property (nonatomic, readwrite) MGLScaleBar *scaleBar;
|
||||
@property (nonatomic, readwrite) UIImageView *compassView;
|
||||
@@ -195,7 +196,10 @@ public:
|
||||
@property (nonatomic) NS_MUTABLE_ARRAY_OF(NSLayoutConstraint *) *logoViewConstraints;
|
||||
@property (nonatomic, readwrite) UIButton *attributionButton;
|
||||
@property (nonatomic) NS_MUTABLE_ARRAY_OF(NSLayoutConstraint *) *attributionButtonConstraints;
|
||||
|
||||
@property (nonatomic, readwrite) MGLStyle *style;
|
||||
@property (nonatomic, readonly) NSString *ideographicFontFamilyName;
|
||||
|
||||
@property (nonatomic) UITapGestureRecognizer *singleTapGestureRecognizer;
|
||||
@property (nonatomic) UITapGestureRecognizer *doubleTap;
|
||||
@property (nonatomic) UITapGestureRecognizer *twoFingerTap;
|
||||
@@ -204,11 +208,14 @@ public:
|
||||
@property (nonatomic) UIRotationGestureRecognizer *rotate;
|
||||
@property (nonatomic) UILongPressGestureRecognizer *quickZoom;
|
||||
@property (nonatomic) UIPanGestureRecognizer *twoFingerDrag;
|
||||
|
||||
/// Mapping from reusable identifiers to annotation images.
|
||||
@property (nonatomic) NS_MUTABLE_DICTIONARY_OF(NSString *, MGLAnnotationImage *) *annotationImagesByIdentifier;
|
||||
|
||||
/// Currently shown popover representing the selected annotation.
|
||||
@property (nonatomic) UIView<MGLCalloutView> *calloutViewForSelectedAnnotation;
|
||||
@property (nonatomic) MGLUserLocationAnnotationView *userLocationAnnotationView;
|
||||
|
||||
/// Indicates how thoroughly the map view is tracking the user location.
|
||||
@property (nonatomic) MGLUserTrackingState userTrackingState;
|
||||
@property (nonatomic) CLLocationManager *locationManager;
|
||||
@@ -402,8 +409,9 @@ public:
|
||||
mbgl::DefaultFileSource *mbglFileSource = [MGLOfflineStorage sharedOfflineStorage].mbglFileSource;
|
||||
const float scaleFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale];
|
||||
_mbglThreadPool = mbgl::sharedThreadPool();
|
||||
|
||||
auto renderer = std::make_unique<mbgl::Renderer>(*_mbglView, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique);
|
||||
NSString *fontFamilyName = self.ideographicFontFamilyName;
|
||||
|
||||
auto renderer = std::make_unique<mbgl::Renderer>(*_mbglView, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique, mbgl::optional<std::string>(), fontFamilyName ? std::string([fontFamilyName UTF8String]) : mbgl::optional<std::string>());
|
||||
_rendererFrontend = std::make_unique<MGLRenderFrontend>(std::move(renderer), self, *_mbglView);
|
||||
_mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, self.size, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
|
||||
|
||||
@@ -3460,6 +3468,12 @@ public:
|
||||
[self.style removeStyleClass:styleClass];
|
||||
}
|
||||
|
||||
#pragma mark Ideographic Font Info
|
||||
|
||||
- (NSString *)ideographicFontFamilyName {
|
||||
return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLIdeographicFontFamilyName"];
|
||||
}
|
||||
|
||||
#pragma mark - Annotations -
|
||||
|
||||
- (nullable NS_ARRAY_OF(id <MGLAnnotation>) *)annotations
|
||||
|
||||
@@ -143,6 +143,8 @@ public:
|
||||
@property (nonatomic, readwrite) NSView *attributionView;
|
||||
|
||||
@property (nonatomic, readwrite) MGLStyle *style;
|
||||
@property (nonatomic, readonly) NSString *ideographicFontFamilyName;
|
||||
|
||||
|
||||
/// Mapping from reusable identifiers to annotation images.
|
||||
@property (nonatomic) NS_MUTABLE_DICTIONARY_OF(NSString *, MGLAnnotationImage *) *annotationImagesByIdentifier;
|
||||
@@ -217,7 +219,7 @@ public:
|
||||
|
||||
- (instancetype)initWithFrame:(NSRect)frameRect {
|
||||
if (self = [super initWithFrame:frameRect]) {
|
||||
[self commonInit:nil];
|
||||
[self commonInit];
|
||||
self.styleURL = nil;
|
||||
}
|
||||
return self;
|
||||
@@ -225,7 +227,7 @@ public:
|
||||
|
||||
- (instancetype)initWithFrame:(NSRect)frame styleURL:(nullable NSURL *)styleURL {
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
[self commonInit:nil];
|
||||
[self commonInit];
|
||||
self.styleURL = styleURL;
|
||||
}
|
||||
return self;
|
||||
@@ -233,7 +235,7 @@ public:
|
||||
|
||||
- (instancetype)initWithCoder:(nonnull NSCoder *)decoder {
|
||||
if (self = [super initWithCoder:decoder]) {
|
||||
[self commonInit:nil];
|
||||
[self commonInit];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -252,7 +254,7 @@ public:
|
||||
return @[@"camera", @"debugMask"];
|
||||
}
|
||||
|
||||
- (void)commonInit:(nullable NSString*)fontFamily {
|
||||
- (void)commonInit {
|
||||
_isTargetingInterfaceBuilder = NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent;
|
||||
|
||||
// Set up cross-platform controllers and resources.
|
||||
@@ -271,10 +273,10 @@ public:
|
||||
[[NSFileManager defaultManager] removeItemAtURL:legacyCacheURL error:NULL];
|
||||
|
||||
mbgl::DefaultFileSource* mbglFileSource = [MGLOfflineStorage sharedOfflineStorage].mbglFileSource;
|
||||
|
||||
_mbglThreadPool = mbgl::sharedThreadPool();
|
||||
NSString *fontFamilyName = self.ideographicFontFamilyName;
|
||||
|
||||
auto renderer = std::make_unique<mbgl::Renderer>(*_mbglView, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique, mbgl::optional<std::string>(), fontFamily ? std::string([fontFamily UTF8String]) : mbgl::optional<std::string>());
|
||||
auto renderer = std::make_unique<mbgl::Renderer>(*_mbglView, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique, mbgl::optional<std::string>(), fontFamilyName ? std::string([fontFamilyName UTF8String]) : mbgl::optional<std::string>());
|
||||
_rendererFrontend = std::make_unique<MGLRenderFrontend>(std::move(renderer), self, *_mbglView, true);
|
||||
_mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, self.size, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default);
|
||||
|
||||
@@ -652,6 +654,12 @@ public:
|
||||
return _rendererFrontend->getRenderer();
|
||||
}
|
||||
|
||||
#pragma mark Ideographic Font Info
|
||||
|
||||
- (NSString *)ideographicFontFamilyName {
|
||||
return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLIdeographicFontFamilyName"];
|
||||
}
|
||||
|
||||
#pragma mark View hierarchy and drawing
|
||||
|
||||
- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
|
||||
|
||||
Reference in New Issue
Block a user