diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-07-05 13:59:45 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@mapbox.com> | 2017-07-06 09:39:26 -0700 |
commit | d5fbcb242acff2ab270b4018b01c2c6be9c4955f (patch) | |
tree | 8ced368c0026c8fa3cdeee174fa8e17b2a2a61e9 /platform/darwin/src | |
parent | 3800edb133ea0bbeb7fc613dc8f6975d0d6b6513 (diff) | |
download | qtlocation-mapboxgl-d5fbcb242acff2ab270b4018b01c2c6be9c4955f.tar.gz |
[core] Implement circle-pitch-alignment property
Closes issue #9349.
Diffstat (limited to 'platform/darwin/src')
-rw-r--r-- | platform/darwin/src/MGLCircleStyleLayer.h | 45 | ||||
-rw-r--r-- | platform/darwin/src/MGLCircleStyleLayer.mm | 32 |
2 files changed, 77 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLCircleStyleLayer.h b/platform/darwin/src/MGLCircleStyleLayer.h index 789ff7a258..ea95f6beef 100644 --- a/platform/darwin/src/MGLCircleStyleLayer.h +++ b/platform/darwin/src/MGLCircleStyleLayer.h @@ -8,6 +8,23 @@ NS_ASSUME_NONNULL_BEGIN /** + Orientation of circle when map is pitched. + + Values of this type are used in the `MGLCircleStyleLayer.circlePitchAlignment` + property. + */ +typedef NS_ENUM(NSUInteger, MGLCirclePitchAlignment) { + /** + The circle is aligned to the plane of the map. + */ + MGLCirclePitchAlignmentMap, + /** + The circle is aligned to the plane of the viewport. + */ + MGLCirclePitchAlignmentViewport, +}; + +/** Controls the scaling behavior of the circle when the map is pitched. Values of this type are used in the `MGLCircleStyleLayer.circleScaleAlignment` @@ -221,6 +238,21 @@ MGL_EXPORT @property (nonatomic) MGLTransition circleOpacityTransition; /** + Orientation of circle when map is pitched. + + The default value of this property is an `MGLStyleValue` object containing an + `NSValue` object containing `MGLCirclePitchAlignmentViewport`. Set this + property to `nil` to reset it to the default value. + + You can set this property to an instance of: + + * `MGLConstantStyleValue` + * `MGLCameraStyleFunction` with an interpolation mode of + `MGLInterpolationModeInterval` + */ +@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *circlePitchAlignment; + +/** Circle radius. This property is measured in points. @@ -491,6 +523,19 @@ MGL_EXPORT #pragma mark Working with Circle Style Layer Attribute Values /** + Creates a new value object containing the given `MGLCirclePitchAlignment` enumeration. + + @param circlePitchAlignment The value for the new object. + @return A new value object that contains the enumeration value. + */ ++ (instancetype)valueWithMGLCirclePitchAlignment:(MGLCirclePitchAlignment)circlePitchAlignment; + +/** + The `MGLCirclePitchAlignment` enumeration representation of the value. + */ +@property (readonly) MGLCirclePitchAlignment MGLCirclePitchAlignmentValue; + +/** Creates a new value object containing the given `MGLCircleScaleAlignment` enumeration. @param circleScaleAlignment The value for the new object. diff --git a/platform/darwin/src/MGLCircleStyleLayer.mm b/platform/darwin/src/MGLCircleStyleLayer.mm index 42961f2e12..71ae37035e 100644 --- a/platform/darwin/src/MGLCircleStyleLayer.mm +++ b/platform/darwin/src/MGLCircleStyleLayer.mm @@ -13,6 +13,11 @@ namespace mbgl { + MBGL_DEFINE_ENUM(MGLCirclePitchAlignment, { + { MGLCirclePitchAlignmentMap, "map" }, + { MGLCirclePitchAlignmentViewport, "viewport" }, + }); + MBGL_DEFINE_ENUM(MGLCircleScaleAlignment, { { MGLCircleScaleAlignmentMap, "map" }, { MGLCircleScaleAlignmentViewport, "viewport" }, @@ -187,6 +192,23 @@ namespace mbgl { return transition; } +- (void)setCirclePitchAlignment:(MGLStyleValue<NSValue *> *)circlePitchAlignment { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer<mbgl::style::AlignmentType, NSValue *, mbgl::style::AlignmentType, MGLCirclePitchAlignment>().toEnumPropertyValue(circlePitchAlignment); + self.rawLayer->setCirclePitchAlignment(mbglValue); +} + +- (MGLStyleValue<NSValue *> *)circlePitchAlignment { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getCirclePitchAlignment(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer<mbgl::style::AlignmentType, NSValue *, mbgl::style::AlignmentType, MGLCirclePitchAlignment>().toEnumStyleValue(self.rawLayer->getDefaultCirclePitchAlignment()); + } + return MGLStyleValueTransformer<mbgl::style::AlignmentType, NSValue *, mbgl::style::AlignmentType, MGLCirclePitchAlignment>().toEnumStyleValue(propertyValue); +} + - (void)setCircleRadius:(MGLStyleValue<NSNumber *> *)circleRadius { MGLAssertStyleLayerIsValid(); @@ -421,6 +443,16 @@ namespace mbgl { @implementation NSValue (MGLCircleStyleLayerAdditions) ++ (NSValue *)valueWithMGLCirclePitchAlignment:(MGLCirclePitchAlignment)circlePitchAlignment { + return [NSValue value:&circlePitchAlignment withObjCType:@encode(MGLCirclePitchAlignment)]; +} + +- (MGLCirclePitchAlignment)MGLCirclePitchAlignmentValue { + MGLCirclePitchAlignment circlePitchAlignment; + [self getValue:&circlePitchAlignment]; + return circlePitchAlignment; +} + + (NSValue *)valueWithMGLCircleScaleAlignment:(MGLCircleScaleAlignment)circleScaleAlignment { return [NSValue value:&circleScaleAlignment withObjCType:@encode(MGLCircleScaleAlignment)]; } |