diff options
Diffstat (limited to 'platform/osx')
-rw-r--r-- | platform/osx/INSTALL.md | 2 | ||||
-rw-r--r-- | platform/osx/README.md | 2 | ||||
-rw-r--r-- | platform/osx/app/MainMenu.xib | 16 | ||||
-rw-r--r-- | platform/osx/app/MapDocument.m | 44 | ||||
-rw-r--r-- | platform/osx/include/MGLAccountManager.h | 44 | ||||
-rw-r--r-- | platform/osx/include/MGLAnnotationImage.h | 58 | ||||
-rw-r--r-- | platform/osx/include/MGLMapView+IBAdditions.h | 68 | ||||
-rw-r--r-- | platform/osx/include/MGLMapView.h | 639 | ||||
-rw-r--r-- | platform/osx/include/MGLMapViewDelegate.h | 199 | ||||
-rwxr-xr-x | platform/osx/scripts/run.sh | 5 | ||||
-rw-r--r-- | platform/osx/sdk/Mapbox.m | 2 | ||||
-rw-r--r-- | platform/osx/sdk/framework-osx.gypi | 2 | ||||
-rw-r--r-- | platform/osx/src/MGLAccountManager.m | 2 | ||||
-rw-r--r-- | platform/osx/src/MGLAccountManager_Private.h | 2 | ||||
-rw-r--r-- | platform/osx/src/MGLAnnotationImage.m | 2 | ||||
-rw-r--r-- | platform/osx/src/MGLMapView+IBAdditions.m | 2 | ||||
-rw-r--r-- | platform/osx/src/MGLMapView.mm | 24 | ||||
-rw-r--r-- | platform/osx/src/MGLMapView_Private.h | 2 | ||||
-rw-r--r-- | platform/osx/src/MGLOpenGLLayer.mm | 2 | ||||
-rw-r--r-- | platform/osx/test/MGLGeometryTests.mm | 2 | ||||
-rw-r--r-- | platform/osx/test/osxtest.gypi | 4 |
21 files changed, 1087 insertions, 36 deletions
diff --git a/platform/osx/INSTALL.md b/platform/osx/INSTALL.md index 4016c360c6..e4566625eb 100644 --- a/platform/osx/INSTALL.md +++ b/platform/osx/INSTALL.md @@ -23,7 +23,7 @@ The Mapbox OS X SDK requires the OS X 10.10.0 SDK or above. ## Use -The [Mapbox iOS SDK’s API documentation](https://www.mapbox.com/ios-sdk/api/3.0.1/) applies to the Mapbox OS X SDK with few differences, mostly around unimplemented features like user location tracking. +The [Mapbox iOS SDK’s API documentation](https://www.mapbox.com/ios-sdk/api/) applies to the Mapbox OS X SDK with few differences, mostly around unimplemented features like user location tracking. ## Troubleshooting diff --git a/platform/osx/README.md b/platform/osx/README.md index 8a21897f64..3f9a5cd62e 100644 --- a/platform/osx/README.md +++ b/platform/osx/README.md @@ -4,7 +4,7 @@ A library based on [Mapbox GL Native](../../README.md) for embedding interactive map views with scalable, customizable vector maps into Cocoa applications on OS X 10.10.0 and above using Objective-C, Swift, or Interface Builder. -This SDK is analogous to the Mapbox iOS SDK, and much of the iOS SDK documentation applies here. Mapbox does not officially support the OS X to the same extent as the iOS SDK; however, bug reports and pull requests are certainly welcome. +This SDK is analogous to the Mapbox iOS SDK, and much of the iOS SDK documentation applies here. Mapbox does not officially support the OS X SDK to the same extent as the iOS SDK; however, bug reports and pull requests are certainly welcome. * [Integrating the Mapbox OS X SDK into your application](INSTALL.md) * [Contributing to the Mapbox OS X SDK](DEVELOPING.md) diff --git a/platform/osx/app/MainMenu.xib b/platform/osx/app/MainMenu.xib index 844af08f3e..64ff4e550d 100644 --- a/platform/osx/app/MainMenu.xib +++ b/platform/osx/app/MainMenu.xib @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10109" systemVersion="15E39d" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <dependencies> - <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10109"/> </dependencies> <objects> <customObject id="-2" userLabel="File's Owner" customClass="NSApplication"> @@ -473,10 +473,16 @@ <action selector="dropManyPins:" target="-1" id="Rtv-8N-3Z8"/> </connections> </menuItem> - <menuItem title="Remove All Pins" id="6rC-68-vk0"> + <menuItem title="Add Polygon and Polyline" id="DVr-vT-lpe"> <modifierMask key="keyEquivalentModifierMask"/> <connections> - <action selector="removeAllPins:" target="-1" id="NRM-y5-Wul"/> + <action selector="drawPolygonAndPolyLineAnnotations:" target="-1" id="EhT-CB-gee"/> + </connections> + </menuItem> + <menuItem title="Remove All Annotations" id="6rC-68-vk0"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="removeAllAnnotations:" target="-1" id="6v3-0E-LsR"/> </connections> </menuItem> <menuItem isSeparatorItem="YES" id="wQq-Mx-QY0"/> @@ -545,7 +551,7 @@ <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/> <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> <rect key="contentRect" x="109" y="131" width="350" height="62"/> - <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/> + <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1050"/> <view key="contentView" id="eA4-n3-qPe"> <rect key="frame" x="0.0" y="0.0" width="350" height="62"/> <autoresizingMask key="autoresizingMask"/> diff --git a/platform/osx/app/MapDocument.m b/platform/osx/app/MapDocument.m index 6881f6bd5b..7c42bc9802 100644 --- a/platform/osx/app/MapDocument.m +++ b/platform/osx/app/MapDocument.m @@ -33,6 +33,7 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = { BOOL _showsToolTipsOnDroppedPins; BOOL _randomizesCursorsOnDroppedPins; BOOL _isTouringWorld; + BOOL _isShowingPolygonAndPolylineAnnotations; } #pragma mark Lifecycle @@ -241,7 +242,7 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = { } - (IBAction)dropManyPins:(id)sender { - [self.mapView removeAnnotations:self.mapView.annotations]; + [self removeAllAnnotations:sender]; NSRect bounds = self.mapView.bounds; NSMutableArray *annotations = [NSMutableArray array]; @@ -273,14 +274,15 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = { } } -- (IBAction)removeAllPins:(id)sender { +- (IBAction)removeAllAnnotations:(id)sender { [self.mapView removeAnnotations:self.mapView.annotations]; + _isShowingPolygonAndPolylineAnnotations = NO; } - (IBAction)startWorldTour:(id)sender { _isTouringWorld = YES; - [self removeAllPins:sender]; + [self removeAllAnnotations:sender]; NSUInteger numberOfAnnotations = sizeof(WorldTourDestinations) / sizeof(WorldTourDestinations[0]); NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:numberOfAnnotations]; for (NSUInteger i = 0; i < numberOfAnnotations; i++) { @@ -319,6 +321,35 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = { self.mapView.camera = self.mapView.camera; } +- (IBAction)drawPolygonAndPolyLineAnnotations:(id)sender { + + if (_isShowingPolygonAndPolylineAnnotations) { + [self removeAllAnnotations:sender]; + return; + } + + _isShowingPolygonAndPolylineAnnotations = YES; + + // Pacific Northwest triangle + CLLocationCoordinate2D triangleCoordinates[3] = { + CLLocationCoordinate2DMake(44, -122), + CLLocationCoordinate2DMake(46, -122), + CLLocationCoordinate2DMake(46, -121) + }; + MGLPolygon *triangle = [MGLPolygon polygonWithCoordinates:triangleCoordinates count:3]; + [self.mapView addAnnotation:triangle]; + + // West coast line + CLLocationCoordinate2D lineCoordinates[4] = { + CLLocationCoordinate2DMake(47.6025, -122.3327), + CLLocationCoordinate2DMake(45.5189, -122.6726), + CLLocationCoordinate2DMake(37.7790, -122.4177), + CLLocationCoordinate2DMake(34.0532, -118.2349) + }; + MGLPolyline *line = [MGLPolyline polylineWithCoordinates:lineCoordinates count:4]; + [self.mapView addAnnotation:line]; +} + #pragma mark Help methods - (IBAction)giveFeedback:(id)sender { @@ -457,8 +488,8 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = { if (menuItem.action == @selector(dropManyPins:)) { return YES; } - if (menuItem.action == @selector(removeAllPins:)) { - return self.mapView.annotations.count; + if (menuItem.action == @selector(removeAllAnnotations:)) { + return self.mapView.annotations.count > 0; } if (menuItem.action == @selector(startWorldTour:)) { return !_isTouringWorld; @@ -466,6 +497,9 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = { if (menuItem.action == @selector(stopWorldTour:)) { return _isTouringWorld; } + if (menuItem.action == @selector(drawPolygonAndPolyLineAnnotations:)) { + return !_isShowingPolygonAndPolylineAnnotations; + } if (menuItem.action == @selector(giveFeedback:)) { return YES; } diff --git a/platform/osx/include/MGLAccountManager.h b/platform/osx/include/MGLAccountManager.h new file mode 100644 index 0000000000..efcec5419c --- /dev/null +++ b/platform/osx/include/MGLAccountManager.h @@ -0,0 +1,44 @@ +#import <Foundation/Foundation.h> + +#import "MGLTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The MGLAccountManager object provides a global way to set a Mapbox API + access token, as well as other settings used framework-wide. */ +@interface MGLAccountManager : NSObject + +#pragma mark Authorizing access +/** @name Authorizing Access */ + +/** Set the + [Mapbox access token](https://www.mapbox.com/help/define-access-token/) to + used by all instances of MGLMapView in the current application. + + Mapbox-hosted vector tiles and styles require an API access token, which you + can obtain from the + [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). Access + tokens associate requests to Mapbox’s vector tile and style APIs with your + Mapbox account. They also deter other developers from using your styles + without your permission. + + @param accessToken A Mapbox access token. Calling this method with a value + of `nil` has no effect. + + @note You must set the access token before attempting to load any + Mapbox-hosted style. Therefore, you should generally set it before + creating an instance of MGLMapView. The recommended way to set an access + token is to add an entry to your application’s Info.plist file with the + key `MGLMapboxAccessToken` and the type String. Alternatively, you may + call this method from your application delegate’s + -applicationDidFinishLaunching: method. */ ++ (void)setAccessToken:(nullable NSString *)accessToken; + +/** Returns the + [Mapbox access token](https://www.mapbox.com/help/define-access-token/) in + use by instances of MGLMapView in the current application. */ ++ (nullable NSString *)accessToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/platform/osx/include/MGLAnnotationImage.h b/platform/osx/include/MGLAnnotationImage.h new file mode 100644 index 0000000000..a33ea75a5e --- /dev/null +++ b/platform/osx/include/MGLAnnotationImage.h @@ -0,0 +1,58 @@ +#import <AppKit/AppKit.h> + +#import "MGLTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** The MGLAnnotationImage class is responsible for presenting point-based + annotations visually on an MGLMapView instance. Annotation image objects + pair NSImage objects with annotation-related metadata. They may be recycled + later and put into a reuse queue that is maintained by the map view. */ +@interface MGLAnnotationImage : NSObject + +#pragma mark Initializing and preparing the image object +/** @name Initializing and Preparing the Image Object */ + +/** Initializes and returns a new annotation image object. + + @param image The image to display for the annotation. + @param reuseIdentifier The string that identifies this annotation image in + the reuse queue. + @return The initialized annotation image object or `nil` if there was a + problem initializing the object. */ ++ (instancetype)annotationImageWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier; + +#pragma mark Getting and setting attributes +/** @name Getting and Setting Attributes */ + +/** The image to display for the annotation. */ +@property (nonatomic, readonly) NSImage *image; + +/** The string that identifies this annotation image in the reuse queue. + (read-only) + + You specify the reuse identifier when you create the image object. You use + this type later to retrieve an annotation image object that was created + previously but which is currently unused because its annotation is not + on-screen. + + If you define distinctly different types of annotations (with distinctly + different annotation images to go with them), you can differentiate between + the annotation types by specifying different reuse identifiers for each one. + */ +@property (nonatomic, readonly) NSString *reuseIdentifier; + +/** A Boolean value indicating whether the annotation is selectable. + + The default value of this property is `YES`. If the value of this property + is `NO`, the annotation image ignores click events and cannot be selected. + */ +@property (nonatomic, getter=isSelectable) BOOL selectable; + +/** The cursor that appears above any annotation using this annotation image. By + default, this property is set to `nil`, representing the current cursor. */ +@property (nonatomic, nullable) NSCursor *cursor; + +@end + +NS_ASSUME_NONNULL_END diff --git a/platform/osx/include/MGLMapView+IBAdditions.h b/platform/osx/include/MGLMapView+IBAdditions.h new file mode 100644 index 0000000000..81f4506a57 --- /dev/null +++ b/platform/osx/include/MGLMapView+IBAdditions.h @@ -0,0 +1,68 @@ +#import <Foundation/Foundation.h> + +#import "MGLMapView.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MGLMapView (IBAdditions) + +#if TARGET_INTERFACE_BUILDER + +// Core properties that can be manipulated in the Attributes inspector in +// Interface Builder. These redeclarations merely add the IBInspectable keyword. +// They appear here to ensure that they appear above the convenience properties; +// inspectables declared in MGLMapView.h are always sorted before those in +// MGLMapView+IBAdditions.h, due to ASCII sort order. + +// We want this property to look like a URL bar in the Attributes inspector, but +// just calling it styleURL would violate Cocoa naming conventions and conflict +// with the existing NSURL property. Fortunately, IB strips out the two +// underscores for display. + +/** URL of the style currently displayed in the receiver. + + The URL may be a full HTTP or HTTPS URL, a Mapbox URL indicating the style’s + map ID (`mapbox://styles/<user>/<style>`), or a path to a local file + relative to the application’s resource path. Leave this field blank for the + default style. */ +@property (nonatomic, nullable) IBInspectable NSString *styleURL__; + +// Convenience properties related to the initial viewport. These properties +// are not meant to be used outside of Interface Builder. latitude and longitude +// are backed by properties of type CLLocationDegrees, but these declarations +// must use the type double because Interface Builder is unaware that +// CLLocationDegrees is a typedef for double. + +/** The initial center latitude. */ +@property (nonatomic) IBInspectable double latitude; + +/** The initial center longitude. */ +@property (nonatomic) IBInspectable double longitude; + +@property (nonatomic) IBInspectable double zoomLevel; + +// Renamed properties. Interface Builder derives the display name of each +// inspectable from the runtime name, but runtime names don’t always make sense +// in UI. + +/** A Boolean value that determines whether the user may zoom the map, changing + its zoom level. */ +@property (nonatomic) IBInspectable BOOL allowsZooming; + +/** A Boolean value that determines whether the user may scroll around the map, + changing its center coordinate. */ +@property (nonatomic) IBInspectable BOOL allowsScrolling; + +/** A Boolean value that determines whether the user may rotate the map, + changing its direction. */ +@property (nonatomic) IBInspectable BOOL allowsRotating; + +/** A Boolean value that determines whether the user may tilt the map, changing + its pitch. */ +@property (nonatomic) IBInspectable BOOL allowsTilting; + +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/platform/osx/include/MGLMapView.h b/platform/osx/include/MGLMapView.h new file mode 100644 index 0000000000..ca55ba7cd5 --- /dev/null +++ b/platform/osx/include/MGLMapView.h @@ -0,0 +1,639 @@ +#import <Cocoa/Cocoa.h> +#import <CoreLocation/CoreLocation.h> + +#import "MGLGeometry.h" + +NS_ASSUME_NONNULL_BEGIN + +/** Options for enabling debugging features in an MGLMapView instance. */ +typedef NS_OPTIONS(NSUInteger, MGLMapDebugMaskOptions) { + /** Edges of tile boundaries are shown as thick, red lines to help diagnose + tile clipping issues. */ + MGLMapDebugTileBoundariesMask = 1 << 1, + + /** Each tile shows its tile coordinate (x/y/z) in the upper-left corner. */ + MGLMapDebugTileInfoMask = 1 << 2, + + /** Each tile shows a timestamp indicating when it was loaded. */ + MGLMapDebugTimestampsMask = 1 << 3, + + /** Edges of glyphs and symbols are shown as faint, green lines to help + diagnose collision and label placement issues. */ + MGLMapDebugCollisionBoxesMask = 1 << 4, +}; + +@class MGLAnnotationImage; +@class MGLMapCamera; + +@protocol MGLAnnotation; +@protocol MGLMapViewDelegate; +@protocol MGLOverlay; + +/** An interactive, customizable map view with an interface similar to the one + provided by Apple’s MapKit. + + Using MGLMapView, you can embed the map inside a view, allow users to + manipulate it with standard gestures, animate the map between different + viewpoints, and present information in the form of annotations and overlays. + + The map view loads scalable vector tiles that conform to the + [Mapbox Vector Tile Specification](https://github.com/mapbox/vector-tile-spec). + It styles them with a style that conforms to the + [Mapbox GL style specification](https://www.mapbox.com/mapbox-gl-style-spec/). + Such styles can be designed in [Mapbox Studio](https://www.mapbox.com/studio/) + and hosted on mapbox.com. + + A collection of Mapbox-hosted styles is available through the MGLStyle + class. These basic styles use + [Mapbox Streets](https://www.mapbox.com/developers/vector-tiles/mapbox-streets) + or [Mapbox Satellite](https://www.mapbox.com/satellite/) data sources, but + you can specify a custom style that makes use of your own data. + + Mapbox-hosted vector tiles and styles require an API access token, which you + can obtain from the + [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). Access + tokens associate requests to Mapbox’s vector tile and style APIs with your + Mapbox account. They also deter other developers from using your styles + without your permission. + + @note You are responsible for getting permission to use the map data and for + ensuring that your use adheres to the relevant terms of use. */ +IB_DESIGNABLE +@interface MGLMapView : NSView + +#pragma mark Creating instances +/** @name Creating Instances */ + +/** Initializes and returns a newly allocated map view with the specified frame + and the default style. + + @param frame The frame for the view, measured in points. + @return An initialized map view. */ +- (instancetype)initWithFrame:(NSRect)frame; + +/** Initializes and returns a newly allocated map view with the specified frame + and style URL. + + @param frame The frame for the view, measured in points. + @param styleURL URL of the map style to display. The URL may be a full HTTP + or HTTPS URL, a Mapbox URL indicating the style’s map ID + (`mapbox://styles/<user>/<style>`), or a path to a local file relative + to the application’s resource path. Specify `nil` for the default style. + @return An initialized map view. */ +- (instancetype)initWithFrame:(NSRect)frame styleURL:(nullable NSURL *)styleURL; + +#pragma mark Accessing the delegate +/** @name Accessing the Delegate */ + +/** The receiver’s delegate. + + A map view sends messages to its delegate to notify it of changes to its + contents or the viewpoint. The delegate also provides information about + annotations displayed on the map, such as the styles to apply to individual + annotations. */ +@property (nonatomic, weak, nullable) IBOutlet id <MGLMapViewDelegate> delegate; + +#pragma mark Configuring the map’s appearance +/** @name Configuring the Map’s Appearance */ + + +/** URL of the style currently displayed in the receiver. + + The URL may be a full HTTP or HTTPS URL, a Mapbox URL indicating the style’s + map ID (`mapbox://styles/<user>/<style>`), or a path to a local file + relative to the application’s resource path. + + If you set this property to `nil`, the receiver will use the default style + and this property will automatically be set to that style’s URL. */ +@property (nonatomic, null_resettable) NSURL *styleURL; + +/** Reloads the style. + + You do not normally need to call this method. The map view automatically + responds to changes in network connectivity by reloading the style. You may + need to call this method if you change the access token after a style has + loaded but before loading a style associated with a different Mapbox + account. */ +- (IBAction)reloadStyle:(id)sender; + +/** A control for zooming in and out, positioned in the lower-right corner. */ +@property (nonatomic, readonly) NSSegmentedControl *zoomControls; + +/** A control indicating the map’s direction and allowing the user to manipulate + the direction, positioned above the zoom controls in the lower-right corner. + */ +@property (nonatomic, readonly) NSSlider *compass; + +/** The Mapbox logo, positioned in the lower-left corner. + + @note The Mapbox terms of service, which governs the use of Mapbox-hosted + vector tiles and styles, + [requires](https://www.mapbox.com/help/mapbox-logo/) most Mapbox + customers to display the Mapbox logo. If this applies to you, do not + hide this view or change its contents. */ +@property (nonatomic, readonly) NSImageView *logoView; + +/** A view showing legally required copyright notices, positioned along the + bottom of the map view, to the left of the Mapbox logo. + + @note The Mapbox terms of service, which governs the use of Mapbox-hosted + vector tiles and styles, + [requires](https://www.mapbox.com/help/attribution/) these copyright + notices to accompany any map that features Mapbox-designed styles, + OpenStreetMap data, or other Mapbox data such as satellite or terrain + data. If that applies to this map view, do not hide this view or remove + any notices from it. */ +@property (nonatomic, readonly) NSView *attributionView; + +#pragma mark Manipulating the viewpoint +/** @name Manipulating the Viewpoint */ + +/** The geographic coordinate at the center of the map view. + + Changing the value of this property centers the map on the new coordinate + without changing the current zoom level. + + Changing the value of this property updates the map view immediately. If you + want to animate the change, use the -setCenterCoordinate:animated: method + instead. */ +@property (nonatomic) CLLocationCoordinate2D centerCoordinate; + +/** Changes the center coordinate of the map and optionally animates the change. + + Changing the center coordinate centers the map on the new coordinate without + changing the current zoom level. + + @param coordinate The new center coordinate for the map. + @param animated Specify `YES` if you want the map view to scroll to the new + location or `NO` if you want the map to display the new location + immediately. */ +- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; + +/** The zoom level of the receiver. + + In addition to affecting the visual size and detail of features on the map, + the zoom level affects the size of the vector tiles that are loaded. At zoom + level 0, each tile covers the entire world map; at zoom level 1, it covers ¼ + of the world; at zoom level 2, <sup>1</sup>⁄<sub>16</sub> of the world, and + so on. + + Changing the value of this property updates the map view immediately. If you + want to animate the change, use the -setZoomLevel:animated: method instead. + */ +@property (nonatomic) double zoomLevel; + +/** + * The minimum zoom level at which the map can be shown. + * + * Depending on the map view’s aspect ratio, the map view may be prevented + * from reaching the minimum zoom level, in order to keep the map from + * repeating within the current viewport. + * + * If the value of this property is greater than that of the + * maximumZoomLevel property, the behavior is undefined. + * + * The default minimumZoomLevel is 0. + */ +@property (nonatomic) double minimumZoomLevel; + +/** + * The maximum zoom level the map can be shown at. + * + * If the value of this property is smaller than that of the + * minimumZoomLevel property, the behavior is undefined. + * + * The default maximumZoomLevel is 20. + */ +@property (nonatomic) double maximumZoomLevel; + +/** Changes the zoom level of the map and optionally animates the change. + + Changing the zoom level scales the map without changing the current center + coordinate. + + @param zoomLevel The new zoom level for the map. + @param animated Specify `YES` if you want the map view to animate the change + to the new zoom level or `NO` if you want the map to display the new + zoom level immediately. */ +- (void)setZoomLevel:(double)zoomLevel animated:(BOOL)animated; + +/** The heading of the map, measured in degrees clockwise from true north. + + The value `0` means that the top edge of the map view corresponds to true + north. The value `90` means the top of the map is pointing due east. The + value `180` means the top of the map points due south, and so on. + + Changing the value of this property updates the map view immediately. If you + want to animate the change, use the -setDirection:animated: method instead. + */ +@property (nonatomic) CLLocationDirection direction; + +/** Changes the heading of the map and optionally animates the change. + + @param direction The heading of the map, measured in degrees clockwise from + true north. + @param animated Specify `YES` if you want the map view to animate the change + to the new heading or `NO` if you want the map to display the new + heading immediately. + + Changing the heading rotates the map without changing the current center + coordinate or zoom level. */ +- (void)setDirection:(CLLocationDirection)direction animated:(BOOL)animated; + +/** A camera representing the current viewpoint of the map. */ +@property (nonatomic, copy) MGLMapCamera *camera; + +/** Moves the viewpoint to a different location with respect to the map with an + optional transition animation. + + @param camera The new viewpoint. + @param animated Specify `YES` if you want the map view to animate the change + to the new viewpoint or `NO` if you want the map to display the new + viewpoint immediately. */ +- (void)setCamera:(MGLMapCamera *)camera animated:(BOOL)animated; + +/** Moves the viewpoint to a different location with respect to the map with an + optional transition duration and timing function. + + @param camera The new viewpoint. + @param duration The amount of time, measured in seconds, that the transition + animation should take. Specify `0` to jump to the new viewpoint + instantaneously. + @param function A timing function used for the animation. Set this parameter + to `nil` for a transition that matches most system animations. If the + duration is `0`, this parameter is ignored. + @param completion The block to execute after the animation finishes. */ +- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion; + +/** Moves the viewpoint to a different location using a transition animation + that evokes powered flight and a default duration based on the length of the + flight path. + + The transition animation seamlessly incorporates zooming and panning to help + the user find his or her bearings even after traversing a great distance. + + @param camera The new viewpoint. + @param completion The block to execute after the animation finishes. */ +- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion; + +/** Moves the viewpoint to a different location using a transition animation + that evokes powered flight and an optional transition duration. + + The transition animation seamlessly incorporates zooming and panning to help + the user find his or her bearings even after traversing a great distance. + + @param camera The new viewpoint. + @param duration The amount of time, measured in seconds, that the transition + animation should take. Specify `0` to jump to the new viewpoint + instantaneously. Specify a negative value to use the default duration, + which is based on the length of the flight path. + @param completion The block to execute after the animation finishes. */ +- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion; + +/** Moves the viewpoint to a different location using a transition animation + that evokes powered flight and an optional transition duration and peak + altitude. + + The transition animation seamlessly incorporates zooming and panning to help + the user find his or her bearings even after traversing a great distance. + + @param camera The new viewpoint. + @param duration The amount of time, measured in seconds, that the transition + animation should take. Specify `0` to jump to the new viewpoint + instantaneously. Specify a negative value to use the default duration, + which is based on the length of the flight path. + @param peakAltitude The altitude, measured in meters, at the midpoint of the + animation. The value of this parameter is ignored if it is negative or + if the animation transition resulting from a similar call to + `-setCamera:animated:` would have a midpoint at a higher altitude. + @param completion The block to execute after the animation finishes. */ +- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration peakAltitude:(CLLocationDistance)peakAltitude completionHandler:(nullable void (^)(void))completion; + +/** The geographic coordinate bounds visible in the receiver’s viewport. + + Changing the value of this property updates the receiver immediately. If you + want to animate the change, use the -setVisibleCoordinateBounds:animated: + method instead. */ +@property (nonatomic) MGLCoordinateBounds visibleCoordinateBounds; + +/** Changes the receiver’s viewport to fit the given coordinate bounds, + optionally animating the change. + + @param bounds The bounds that the viewport will show in its entirety. + @param animated Specify `YES` to animate the change by smoothly scrolling + and zooming or `NO` to immediately display the given bounds. */ +- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds animated:(BOOL)animated; + +/** A Boolean value indicating whether the receiver automatically adjusts its + content insets. + + When the value of this property is `YES`, the map view automatically updates + its `contentInsets` property to account for any overlapping title bar or + toolbar. To overlap with the title bar or toolbar, the containing window’s + style mask must have `NSFullSizeContentViewWindowMask` set, and the title + bar must not be transparent. + + The default value of this property is `YES`. */ +@property (nonatomic, assign) BOOL automaticallyAdjustsContentInsets; + +/** The distance from the edges of the map view’s frame to the edges of the map + view’s logical viewport. + + When the value of this property is equal to `NSEdgeInsetsZero`, viewport + properties such as `centerCoordinate` assume a viewport that matches the map + view’s frame. Otherwise, those properties are inset, excluding part of the + frame from the viewport. For instance, if the only the top edge is inset, + the map center is effectively shifted downward. + + When the value of the `automaticallyAdjustsContentInsets` property is `YES`, + the value of this property may be overridden at any time. + + Changing the value of this property updates the map view immediately. If you + want to animate the change, use the `-setContentInsets:animated:` method + instead. */ +@property (nonatomic, assign) NSEdgeInsets contentInsets; + +/** Sets the distance from the edges of the map view’s frame to the edges of the + map view’s logical viewport, with an optional transition animation. + + When the value of this property is equal to `NSEdgeInsetsZero`, viewport + properties such as `centerCoordinate` assume a viewport that matches the map + view’s frame. Otherwise, those properties are inset, excluding part of the + frame from the viewport. For instance, if the only the top edge is inset, + the map center is effectively shifted downward. + + When the value of the `automaticallyAdjustsContentInsets` property is `YES`, + the value of this property may be overridden at any time. + + @param contentInsets The new values to inset the content by. + @param animated Specify `YES` if you want the map view to animate the change + to the content insets or `NO` if you want the map to inset the content + immediately. */ +- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated; + +#pragma mark Configuring gesture recognition +/** @name Configuring How the User Interacts with the Map */ + +/** A Boolean value that determines whether the user may zoom the map in and + out, changing the zoom level. + + When this property is set to `YES`, the default, the user may zoom the map + in and out by pinching two fingers, by using a scroll wheel on a + traditional mouse, or by dragging the mouse cursor up and down while holding + down the Shift key. When the receiver has focus, the user may also zoom by + pressing the up and down arrow keys while holding down the Option key. + + This property controls only user interactions with the map. If you set the + value of this property to `NO`, you may still change the map zoom + programmatically. */ +@property (nonatomic, getter=isZoomEnabled) BOOL zoomEnabled; + +/** A Boolean value that determines whether the user may scroll around the map, + changing the center coordinate. + + When this property is set to `YES`, the default, the user may scroll the map + by swiping with two fingers or dragging the mouse cursor. When the receiver + has focus, the user may also scroll around the map by pressing the arrow + keys. + + This property controls only user interactions with the map. If you set the + value of this property to `NO`, you may still change the map location + programmatically. */ +@property (nonatomic, getter=isScrollEnabled) BOOL scrollEnabled; + +/** A Boolean value that determines whether the user may rotate the map, + changing the direction. + + When this property is set to `YES`, the default, the user may rotate the map + by moving two fingers in a circular motion or by dragging the mouse cursor + left and right while holding down the Option key. When the receiver has + focus, the user may also zoom by pressing the left and right arrow keys + while holding down the Option key. + + This property controls only user interactions with the map. If you set the + value of this property to `NO`, you may still rotate the map + programmatically. */ +@property (nonatomic, getter=isRotateEnabled) BOOL rotateEnabled; + +/** A Boolean value that determines whether the user may tilt of the map, + changing the pitch. + + When this property is set to `YES`, the default, the user may rotate the map + by dragging the mouse cursor up and down while holding down the Option key. + + This property controls only user interactions with the map. If you set the + value of this property to `NO`, you may still change the pitch of the map + programmatically. */ +@property (nonatomic, getter=isPitchEnabled) BOOL pitchEnabled; + +#pragma mark Annotating the map +/** @name Annotating the Map */ + +/** The complete list of annotations associated with the receiver. (read-only) + + The objects in this array must adopt the MGLAnnotation protocol. If no + annotations are associated with the map view, the value of this property is + `nil`. */ +@property (nonatomic, readonly, nullable) NS_ARRAY_OF(id <MGLAnnotation>) *annotations; + +/** Adds an annotation to the map view. + + @param annotation The annotation object to add to the receiver. This object + must conform to the MGLAnnotation protocol. The map view retains the + annotation object. */ +- (void)addAnnotation:(id <MGLAnnotation>)annotation; + +/** Adds an array of annotations to the map view. + + @param annotations An array of annotation objects. Each object in the array + must conform to the MGLAnnotation protocol. The map view retains each + individual annotation object. */ +- (void)addAnnotations:(NS_ARRAY_OF(id <MGLAnnotation>) *)annotations; + +/** Removes an annotation from the map view, deselecting it if it is selected. + + Removing an annotation object dissociates it from the map view entirely, + preventing it from being displayed on the map. Thus you would typically call + this method only when you want to hide or delete a given annotation. + + @param annotation The annotation object to remove. This object must conform + to the MGLAnnotation protocol. */ +- (void)removeAnnotation:(id <MGLAnnotation>)annotation; + +/** Removes an array of annotations from the map view, deselecting any selected + annotations in the array. + + Removing annotation objects dissociates them from the map view entirely, + preventing them from being displayed on the map. Thus you would typically + call this method only when you want to hide or delete the given annotations. + + @param annotations The array of annotation objects to remove. Objects in the + array must conform to the MGLAnnotation protocol. */ +- (void)removeAnnotations:(NS_ARRAY_OF(id <MGLAnnotation>) *)annotations; + +/** Returns a reusable annotation image object associated with its identifier. + + For performance reasons, you should generally reuse MGLAnnotationImage + objects for identical-looking annotations in your map views. Dequeueing + saves time and memory during performance-critical operations such as + scrolling. + + @param identifier A string identifying the annotation image to be reused. + This string is the same one you specify when initially returning the + annotation image object using the -mapView:imageForAnnotation: method. + @return An annotation image object with the given identifier, or `nil` if no + such object exists in the reuse queue. */ +- (nullable MGLAnnotationImage *)dequeueReusableAnnotationImageWithIdentifier:(NSString *)identifier; + +#pragma mark Managing annotation selections +/** @name Managing Annotation Selections */ + +/** The currently selected annotations. + + Assigning a new array to this property selects only the first annotation in + the array. */ +@property (nonatomic, copy) NS_ARRAY_OF(id <MGLAnnotation>) *selectedAnnotations; + +/** Selects an annotation and displays a callout popover for it. + + If the given annotation is not visible within the current viewport, this + method has no effect. + + @param annotation The annotation object to select. */ +- (void)selectAnnotation:(id <MGLAnnotation>)annotation; + +/** Deselects an annotation and hides its callout popover. + + @param annotation The annotation object to deselect. */ +- (void)deselectAnnotation:(nullable id <MGLAnnotation>)annotation; + +/** A common view controller for managing a callout popover’s content view. + + Like any instance of NSPopover, an annotation callout manages its contents + with a view controller. The annotation object is the view controller’s + represented object. This means that you can bind controls in the view + controller’s content view to KVO-compliant properties of the annotation + object, such as -title and -subtitle. + + This property defines a common view controller that is used for every + annotation’s callout view. If you set this property to `nil`, a default + view controller will be used that manages a simple title label and subtitle + label. If you need distinct view controllers for different annotations, the + map view’s delegate should implement + -mapView:calloutViewControllerForAnnotation: instead. */ +@property (nonatomic, strong, null_resettable) IBOutlet NSViewController *calloutViewController; + +#pragma mark Finding annotations +/** @name Finding Annotations */ + +/** Returns a point annotation located at the given point. + + @param point A point in the view’s coordinate system. + @return A point annotation whose annotation image coincides with the point. + If multiple point annotations coincide with the point, the return value + is the annotation that would be selected if the user clicks at this + point. + */ +- (id <MGLAnnotation>)annotationAtPoint:(NSPoint)point; + +#pragma mark Overlaying the map +/** @name Overlaying the Map */ + +/** Adds a single overlay to the map. + + To remove an overlay from a map, use the -removeOverlay: method. + + @param overlay The overlay object to add. This object must conform to the + MGLOverlay protocol. */ +- (void)addOverlay:(id <MGLOverlay>)overlay; + +/** Adds an array of overlays to the map. + + To remove multiple overlays from a map, use the -removeOverlays: method. + + @param overlays An array of objects, each of which must conform to the + MGLOverlay protocol. */ +- (void)addOverlays:(NS_ARRAY_OF(id <MGLOverlay>) *)overlays; + +/** Removes a single overlay from the map. + + If the specified overlay is not currently associated with the map view, this + method does nothing. + + @param overlay The overlay object to remove. */ +- (void)removeOverlay:(id <MGLOverlay>)overlay; + +/** Removes an array of overlays from the map. + + If a given overlay object is not associated with the map view, it is + ignored. + + @param overlays An array of objects, each of which conforms to the + MGLOverlay protocol. */ +- (void)removeOverlays:(NS_ARRAY_OF(id <MGLOverlay>) *)overlays; + +#pragma mark Converting geographic coordinates +/** @name Converting Geographic Coordinates */ + +/** Converts a geographic coordinate to a point in the given view’s coordinate + system. + + @param coordinate The geographic coordinate to convert. + @param view The view in whose coordinate system the returned point should be + expressed. If this parameter is `nil`, the returned point is expressed + in the window’s coordinate system. If `view` is not `nil`, it must + belong to the same window as the map view. + @return The point (in the appropriate view or window coordinate system) + corresponding to the given geographic coordinate. */ +- (NSPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(nullable NSView *)view; + +/** Converts a point in the given view’s coordinate system to a geographic + coordinate. + + @param point The point to convert. + @param view The view in whose coordinate system the point is expressed. + @return The geographic coordinate at the given point. */ +- (CLLocationCoordinate2D)convertPoint:(NSPoint)point toCoordinateFromView:(nullable NSView *)view; + +/** Converts a geographic bounding box to a rectangle in the given view’s + coordinate system. + + @param bounds The geographic bounding box to convert. + @param view The view in whose coordinate system the returned rectangle + should be expressed. If this parameter is `nil`, the returned rectangle + is expressed in the window’s coordinate system. If `view` is not `nil`, + it must belong to the same window as the map view. */ +- (NSRect)convertCoordinateBounds:(MGLCoordinateBounds)bounds toRectToView:(nullable NSView *)view; + +/** Converts a rectangle in the given view’s coordinate system to a geographic + bounding box. + + @param rect The rectangle to convert. + @param view The view in whose coordinate system the rectangle is expressed. + @return The geographic bounding box coextensive with the given rectangle. */ +- (MGLCoordinateBounds)convertRect:(NSRect)rect toCoordinateBoundsFromView:(nullable NSView *)view; + +/** Returns the distance spanned by one point in the map view’s coordinate + system at the given latitude and current zoom level. + + The distance between points decreases as the latitude approaches the poles. + This relationship parallels the relationship between longitudinal + coordinates at different latitudes. + + @param latitude The latitude of the geographic coordinate represented by the + point. + @return The distance in meters spanned by a single point. */ +- (CLLocationDistance)metersPerPointAtLatitude:(CLLocationDegrees)latitude; + +#pragma mark Debugging the map +/** @name Debugging the Map */ + +/** The options that determine which debugging aids are shown on the map. + + These options are all disabled by default and should remain disabled in + released software for performance and aesthetic reasons. */ +@property (nonatomic) MGLMapDebugMaskOptions debugMask; + +@end + +NS_ASSUME_NONNULL_END diff --git a/platform/osx/include/MGLMapViewDelegate.h b/platform/osx/include/MGLMapViewDelegate.h new file mode 100644 index 0000000000..fcd013284d --- /dev/null +++ b/platform/osx/include/MGLMapViewDelegate.h @@ -0,0 +1,199 @@ +#import <Foundation/Foundation.h> + +#import "MGLTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class MGLMapView; +@class MGLAnnotationImage; +@class MGLPolygon; +@class MGLPolyline; +@class MGLShape; + +/** The MGLMapViewDelegate protocol defines a set of optional methods that you + can use to receive messages from an MGLMapView instance. Because many map + operations require the MGLMapView class to load data asynchronously, the map + view calls these methods to notify your application when specific operations + complete. The map view also uses these methods to request information about + annotations displayed on the map, such as the styles and interaction modes + to apply to individual annotations. */ +@protocol MGLMapViewDelegate <NSObject> + +@optional + +#pragma mark Responding to map viewpoint changes +/** @name Responding to Map Viewpoint Changes */ + +/** Tells the delegate that the viewpoint depicted by the map view is about to + change. + + This method is called whenever the currently displayed map camera will start + changing for any reason. + + @param mapView The map view whose viewpoint will change. + @param animated Whether the change will cause an animated effect on the map. + */ +- (void)mapView:(MGLMapView *)mapView cameraWillChangeAnimated:(BOOL)animated; + +/** Tells the delegate that the viewpoint depicted by the map view is changing. + + This method is called as the currently displayed map camera changes due to + animation. During movement, this method may be called many times to report + updates to the viewpoint. Therefore, your implementation of this method + should be as lightweight as possible to avoid affecting performance. + + @param mapView The map view whose viewpoint is changing. */ +- (void)mapViewCameraIsChanging:(MGLMapView *)mapView; + +/** Tells the delegate that the viewpoint depicted by the map view has finished + changing. + + This method is called whenever the currently displayed map camera has + finished changing. + + @param mapView The map view whose viewpoint has changed. + @param animated Whether the change caused an animated effect on the map. */ +- (void)mapView:(MGLMapView *)mapView cameraDidChangeAnimated:(BOOL)animated; + +#pragma mark Loading the map +/** @name Loading the Map */ + +/** Tells the delegate that the map view will begin to load. + + This method is called whenever the map view starts loading, including when a + new style has been set and the map must reload. + + @param mapView The map view that is starting to load. */ +- (void)mapViewWillStartLoadingMap:(MGLMapView *)mapView; + +/** Tells the delegate that the map view has finished loading. + + This method is called whenever the map view finishes loading, either after + the initial load or after a style change has forced a reload. + + @param mapView The map view that has finished loading. */ +- (void)mapViewDidFinishLoadingMap:(MGLMapView *)mapView; + +- (void)mapViewWillStartRenderingMap:(MGLMapView *)mapView; +- (void)mapViewDidFinishRenderingMap:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered; +- (void)mapViewWillStartRenderingFrame:(MGLMapView *)mapView; +- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered; + +#pragma mark Managing the display of annotations +/** @name Managing the Display of Annotations */ + +/** Returns an annotation image object to mark the given point annotation object + on the map. + + @param mapView The map view that requested the annotation image. + @param annotation The object representing the annotation that is about to be + displayed. + @return The image object to display for the given annotation or `nil` if you + want to display the default marker image. */ +- (nullable MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation; + +/** Returns the alpha value to use when rendering a shape annotation. + + A value of 0.0 results in a completely transparent shape. A value of 1.0, + the default, results in a completely opaque shape. + + @param mapView The map view rendering the shape annotation. + @param annotation The annotation being rendered. + @return An alpha value between 0 and 1.0. */ +- (CGFloat)mapView:(MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation; + +/** Returns the color to use when rendering the outline of a shape annotation. + + The default stroke color is the selected menu item color. If a pattern + color is specified, the result is undefined. + + @param mapView The map view rendering the shape annotation. + @param annotation The annotation being rendered. + @return A color to use for the shape outline. */ +- (NSColor *)mapView:(MGLMapView *)mapView strokeColorForShapeAnnotation:(MGLShape *)annotation; + +/** Returns the color to use when rendering the fill of a polygon annotation. + + The default fill color is selected menu item color. If a pattern color + is specified, the result is undefined. + + @param mapView The map view rendering the polygon annotation. + @param annotation The annotation being rendered. + @return The polygon’s interior fill color. */ +- (NSColor *)mapView:(MGLMapView *)mapView fillColorForPolygonAnnotation:(MGLPolygon *)annotation; + +/** Returns the line width in points to use when rendering the outline of a + polyline annotation. + + By default, the polyline is outlined with a line 3.0 points wide. + + @param mapView The map view rendering the polygon annotation. + @param annotation The annotation being rendered. + @return A line width for the polyline, measured in points. */ +- (CGFloat)mapView:(MGLMapView *)mapView lineWidthForPolylineAnnotation:(MGLPolyline *)annotation; + +#pragma mark Selecting annotations +/** @name Selecting annotations */ + +/** Tells the delegate that one of its annotations has been selected. + + You can use this method to track changes to the selection state of + annotations. + + @param mapView The map view containing the annotation. + @param annotation The annotation that was selected. */ +- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id <MGLAnnotation>)annotation; + +/** Tells the delegate that one of its annotations has been deselected. + + You can use this method to track changes in the selection state of + annotations. + + @param mapView The map view containing the annotation. + @param annotation The annotation that was deselected. */ +- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(id <MGLAnnotation>)annotation; + +#pragma mark Displaying information about annotations +/** @name Displaying Information About Annotations */ + +/** Returns a Boolean value indicating whether the annotation is able to display + extra information in a callout popover. + + This method is called after an annotation is selected, before any callout is + displayed for the annotation. + + If the return value is `YES`, a callout popover is shown when the user + clicks on a selected annotation. The default callout displays the + annotation’s title and subtitle. You can customize the popover’s contents by + implementing the -mapView:calloutViewControllerForAnnotation: method. + + If the return value is `NO`, or if this method is unimplemented, or if the + annotation lacks a title, the annotation will not show a callout even when + selected. + + @param mapView The map view that has selected the annotation. + @param annotation The object representing the annotation. + @return A Boolean value indicating whether the annotation should show a + callout. + */ +- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id <MGLAnnotation>)annotation; + +/** Returns a view controller to manage the callout popover’s content view. + + Like any instance of NSPopover, an annotation callout manages its contents + with a view controller. The annotation object is the view controller’s + represented object. This means that you can bind controls in the view + controller’s content view to KVO-compliant properties of the annotation + object, such as -title and -subtitle. + + If each annotation should have an identical callout, you can set the + MGLMapView instance’s -setCalloutViewController: method instead. + + @param mapView The map view that is requesting a callout view controller. + @param annotation The object representing the annotation. + @return A view controller for the given annotation. */ +- (nullable NSViewController *)mapView:(MGLMapView *)mapView calloutViewControllerForAnnotation:(id <MGLAnnotation>)annotation; + +@end + +NS_ASSUME_NONNULL_END diff --git a/platform/osx/scripts/run.sh b/platform/osx/scripts/run.sh index 6969863afd..6d00d1b977 100755 --- a/platform/osx/scripts/run.sh +++ b/platform/osx/scripts/run.sh @@ -12,7 +12,10 @@ BUILDTYPE=${BUILDTYPE:-Release} ################################################################################ mapbox_time "compile_render_binary" \ -make xrender -j${JOBS} BUILDTYPE=${BUILDTYPE} +make render -j${JOBS} BUILDTYPE=${BUILDTYPE} + +mapbox_time "compile_offline_binary" \ +make offline -j${JOBS} BUILDTYPE=${BUILDTYPE} mapbox_time "compile_tests" \ make xtest -j${JOBS} BUILDTYPE=${BUILDTYPE} diff --git a/platform/osx/sdk/Mapbox.m b/platform/osx/sdk/Mapbox.m index a96ec6df2d..58ebb408e0 100644 --- a/platform/osx/sdk/Mapbox.m +++ b/platform/osx/sdk/Mapbox.m @@ -3,7 +3,7 @@ #import "../src/MGLMapView_Private.h" #import "../src/NSBundle+MGLAdditions.h" #import "../src/NSProcessInfo+MGLAdditions.h" -#import "../../darwin/NSString+MGLAdditions.h" +#import "../../darwin/src/NSString+MGLAdditions.h" __attribute__((constructor)) static void InitializeMapbox() { diff --git a/platform/osx/sdk/framework-osx.gypi b/platform/osx/sdk/framework-osx.gypi index 3f03f9edaf..259066f702 100644 --- a/platform/osx/sdk/framework-osx.gypi +++ b/platform/osx/sdk/framework-osx.gypi @@ -37,7 +37,7 @@ 'mac_framework_headers': [ './Mapbox.h', - '<!@(find ../include/mbgl/{darwin,osx} -type f \! -name \'.*\')', + '<!@(find ../platform/{darwin,osx}/include -type f \! -name \'.*\')', ], 'sources': [ diff --git a/platform/osx/src/MGLAccountManager.m b/platform/osx/src/MGLAccountManager.m index f3a2fce7cf..8458248357 100644 --- a/platform/osx/src/MGLAccountManager.m +++ b/platform/osx/src/MGLAccountManager.m @@ -1,6 +1,6 @@ #import "MGLAccountManager_Private.h" -#import <mbgl/osx/MGLMapView.h> +#import <MGLMapView.h> @interface MGLAccountManager () diff --git a/platform/osx/src/MGLAccountManager_Private.h b/platform/osx/src/MGLAccountManager_Private.h index a918f2b2d3..5088c8dfd2 100644 --- a/platform/osx/src/MGLAccountManager_Private.h +++ b/platform/osx/src/MGLAccountManager_Private.h @@ -1,4 +1,4 @@ -#import <mbgl/osx/MGLAccountManager.h> +#import <MGLAccountManager.h> @interface MGLAccountManager (Private) diff --git a/platform/osx/src/MGLAnnotationImage.m b/platform/osx/src/MGLAnnotationImage.m index 855105fded..e65a6d15cf 100644 --- a/platform/osx/src/MGLAnnotationImage.m +++ b/platform/osx/src/MGLAnnotationImage.m @@ -1,4 +1,4 @@ -#import <mbgl/osx/MGLAnnotationImage.h> +#import <MGLAnnotationImage.h> @interface MGLAnnotationImage () diff --git a/platform/osx/src/MGLMapView+IBAdditions.m b/platform/osx/src/MGLMapView+IBAdditions.m index 2d37d29037..cafd4511f1 100644 --- a/platform/osx/src/MGLMapView+IBAdditions.m +++ b/platform/osx/src/MGLMapView+IBAdditions.m @@ -1,4 +1,4 @@ -#import <mbgl/osx/MGLMapView+IBAdditions.h> +#import <MGLMapView+IBAdditions.h> #import "MGLMapView_Private.h" diff --git a/platform/osx/src/MGLMapView.mm b/platform/osx/src/MGLMapView.mm index ca282facdb..cd8cd45265 100644 --- a/platform/osx/src/MGLMapView.mm +++ b/platform/osx/src/MGLMapView.mm @@ -5,20 +5,20 @@ #import "MGLOpenGLLayer.h" #import "MGLStyle.h" -#import "../../darwin/MGLGeometry_Private.h" -#import "../../darwin/MGLMultiPoint_Private.h" +#import "../../darwin/src/MGLGeometry_Private.h" +#import "../../darwin/src/MGLMultiPoint_Private.h" -#import <mbgl/darwin/MGLMapCamera.h> -#import <mbgl/darwin/MGLPolygon.h> -#import <mbgl/darwin/MGLPolyline.h> -#import <mbgl/osx/MGLAnnotationImage.h> -#import <mbgl/osx/MGLMapViewDelegate.h> +#import <MGLMapCamera.h> +#import <MGLPolygon.h> +#import <MGLPolyline.h> +#import <MGLAnnotationImage.h> +#import <MGLMapViewDelegate.h> #import <mbgl/mbgl.hpp> #import <mbgl/annotation/point_annotation.hpp> #import <mbgl/map/camera.hpp> #import <mbgl/platform/darwin/reachability.h> -#import <mbgl/platform/gl.hpp> +#import <mbgl/gl/gl.hpp> #import <mbgl/sprite/sprite_image.hpp> #import <mbgl/storage/default_file_source.hpp> #import <mbgl/storage/network_status.hpp> @@ -32,8 +32,8 @@ #import "NSBundle+MGLAdditions.h" #import "NSProcessInfo+MGLAdditions.h" -#import "../../darwin/NSException+MGLAdditions.h" -#import "../../darwin/NSString+MGLAdditions.h" +#import "../../darwin/src/NSException+MGLAdditions.h" +#import "../../darwin/src/NSString+MGLAdditions.h" #import <QuartzCore/QuartzCore.h> @@ -1999,14 +1999,14 @@ public: - (mbgl::Color)strokeColorForShapeAnnotation:(MGLShape *)annotation { NSColor *color = (_delegateHasStrokeColorsForShapeAnnotations ? [self.delegate mapView:self strokeColorForShapeAnnotation:annotation] - : [NSColor blackColor]); + : [NSColor selectedMenuItemColor]); return MGLColorObjectFromNSColor(color); } - (mbgl::Color)fillColorForPolygonAnnotation:(MGLPolygon *)annotation { NSColor *color = (_delegateHasFillColorsForShapeAnnotations ? [self.delegate mapView:self fillColorForPolygonAnnotation:annotation] - : [NSColor blueColor]); + : [NSColor selectedMenuItemColor]); return MGLColorObjectFromNSColor(color); } diff --git a/platform/osx/src/MGLMapView_Private.h b/platform/osx/src/MGLMapView_Private.h index 77f2aab323..a162beca61 100644 --- a/platform/osx/src/MGLMapView_Private.h +++ b/platform/osx/src/MGLMapView_Private.h @@ -1,4 +1,4 @@ -#import <mbgl/osx/MGLMapView.h> +#import <MGLMapView.h> void mgl_linkMapViewIBCategory(); diff --git a/platform/osx/src/MGLOpenGLLayer.mm b/platform/osx/src/MGLOpenGLLayer.mm index 06a7be961c..e8fa521351 100644 --- a/platform/osx/src/MGLOpenGLLayer.mm +++ b/platform/osx/src/MGLOpenGLLayer.mm @@ -2,7 +2,7 @@ #import "MGLMapView_Private.h" -#import <mbgl/platform/gl.hpp> +#import <mbgl/gl/gl.hpp> @implementation MGLOpenGLLayer diff --git a/platform/osx/test/MGLGeometryTests.mm b/platform/osx/test/MGLGeometryTests.mm index be3c7cb2da..e6e7c4b45c 100644 --- a/platform/osx/test/MGLGeometryTests.mm +++ b/platform/osx/test/MGLGeometryTests.mm @@ -1,4 +1,4 @@ -#import "../../darwin/MGLGeometry_Private.h" +#import "../../darwin/src/MGLGeometry_Private.h" #pragma clang diagnostic ignored "-Wgnu-statement-expression" #pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments" diff --git a/platform/osx/test/osxtest.gypi b/platform/osx/test/osxtest.gypi index d5d54f3c22..30bced31c4 100644 --- a/platform/osx/test/osxtest.gypi +++ b/platform/osx/test/osxtest.gypi @@ -48,8 +48,8 @@ ], 'include_dirs': [ - '../../../include/mbgl/osx', - '../../../include/mbgl/darwin', + '../../../platform/osx/include', + '../../../platform/darwin/include', '../../../include', '../../../src', ], |