diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-07-11 11:22:39 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@mapbox.com> | 2017-07-12 14:14:09 -0700 |
commit | e8657becc56c2aee5b070357092da028e752d461 (patch) | |
tree | 21a877d6adacfc468b4d2c0223bffec49ea3f5dc /platform/darwin/src | |
parent | af10e2d3be5f24c1887622c63332a3cf67bc19d5 (diff) | |
download | qtlocation-mapboxgl-e8657becc56c2aee5b070357092da028e752d461.tar.gz |
[core] Update shaders.
Implements 'icon-pitch-alignment' (issue #9345)
Fixes issue #9456 (map-aligned point label regression)
Diffstat (limited to 'platform/darwin/src')
-rw-r--r-- | platform/darwin/src/MGLSymbolStyleLayer.h | 52 | ||||
-rw-r--r-- | platform/darwin/src/MGLSymbolStyleLayer.mm | 33 |
2 files changed, 85 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLSymbolStyleLayer.h b/platform/darwin/src/MGLSymbolStyleLayer.h index 5df995aa01..f8df073efe 100644 --- a/platform/darwin/src/MGLSymbolStyleLayer.h +++ b/platform/darwin/src/MGLSymbolStyleLayer.h @@ -8,6 +8,27 @@ NS_ASSUME_NONNULL_BEGIN /** + Orientation of icon when map is pitched. + + Values of this type are used in the `MGLSymbolStyleLayer.iconPitchAlignment` + property. + */ +typedef NS_ENUM(NSUInteger, MGLIconPitchAlignment) { + /** + The icon is aligned to the plane of the map. + */ + MGLIconPitchAlignmentMap, + /** + The icon is aligned to the plane of the viewport. + */ + MGLIconPitchAlignmentViewport, + /** + Automatically matches the value of `iconRotationAlignment`. + */ + MGLIconPitchAlignmentAuto, +}; + +/** In combination with `symbolPlacement`, determines the rotation behavior of icons. @@ -477,6 +498,24 @@ MGL_EXPORT @property (nonatomic, null_resettable) MGLStyleValue<NSNumber *> *iconPadding; /** + Orientation of icon when map is pitched. + + The default value of this property is an `MGLStyleValue` object containing an + `NSValue` object containing `MGLIconPitchAlignmentAuto`. Set this property to + `nil` to reset it to the default value. + + This property is only applied to the style if `iconImageName` is non-`nil`. + Otherwise, it is ignored. + + You can set this property to an instance of: + + * `MGLConstantStyleValue` + * `MGLCameraStyleFunction` with an interpolation mode of + `MGLInterpolationModeInterval` + */ +@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *iconPitchAlignment; + +/** Rotates the icon clockwise. This property is measured in degrees. @@ -1925,6 +1964,19 @@ MGL_EXPORT #pragma mark Working with Symbol Style Layer Attribute Values /** + Creates a new value object containing the given `MGLIconPitchAlignment` enumeration. + + @param iconPitchAlignment The value for the new object. + @return A new value object that contains the enumeration value. + */ ++ (instancetype)valueWithMGLIconPitchAlignment:(MGLIconPitchAlignment)iconPitchAlignment; + +/** + The `MGLIconPitchAlignment` enumeration representation of the value. + */ +@property (readonly) MGLIconPitchAlignment MGLIconPitchAlignmentValue; + +/** Creates a new value object containing the given `MGLIconRotationAlignment` enumeration. @param iconRotationAlignment The value for the new object. diff --git a/platform/darwin/src/MGLSymbolStyleLayer.mm b/platform/darwin/src/MGLSymbolStyleLayer.mm index 5a8f8c6084..dd43ebd73c 100644 --- a/platform/darwin/src/MGLSymbolStyleLayer.mm +++ b/platform/darwin/src/MGLSymbolStyleLayer.mm @@ -13,6 +13,12 @@ namespace mbgl { + MBGL_DEFINE_ENUM(MGLIconPitchAlignment, { + { MGLIconPitchAlignmentMap, "map" }, + { MGLIconPitchAlignmentViewport, "viewport" }, + { MGLIconPitchAlignmentAuto, "auto" }, + }); + MBGL_DEFINE_ENUM(MGLIconRotationAlignment, { { MGLIconRotationAlignmentMap, "map" }, { MGLIconRotationAlignmentViewport, "viewport" }, @@ -259,6 +265,23 @@ namespace mbgl { return MGLStyleValueTransformer<float, NSNumber *>().toStyleValue(propertyValue); } +- (void)setIconPitchAlignment:(MGLStyleValue<NSValue *> *)iconPitchAlignment { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer<mbgl::style::AlignmentType, NSValue *, mbgl::style::AlignmentType, MGLIconPitchAlignment>().toEnumPropertyValue(iconPitchAlignment); + self.rawLayer->setIconPitchAlignment(mbglValue); +} + +- (MGLStyleValue<NSValue *> *)iconPitchAlignment { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getIconPitchAlignment(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer<mbgl::style::AlignmentType, NSValue *, mbgl::style::AlignmentType, MGLIconPitchAlignment>().toEnumStyleValue(self.rawLayer->getDefaultIconPitchAlignment()); + } + return MGLStyleValueTransformer<mbgl::style::AlignmentType, NSValue *, mbgl::style::AlignmentType, MGLIconPitchAlignment>().toEnumStyleValue(propertyValue); +} + - (void)setIconRotation:(MGLStyleValue<NSNumber *> *)iconRotation { MGLAssertStyleLayerIsValid(); @@ -1321,6 +1344,16 @@ namespace mbgl { @implementation NSValue (MGLSymbolStyleLayerAdditions) ++ (NSValue *)valueWithMGLIconPitchAlignment:(MGLIconPitchAlignment)iconPitchAlignment { + return [NSValue value:&iconPitchAlignment withObjCType:@encode(MGLIconPitchAlignment)]; +} + +- (MGLIconPitchAlignment)MGLIconPitchAlignmentValue { + MGLIconPitchAlignment iconPitchAlignment; + [self getValue:&iconPitchAlignment]; + return iconPitchAlignment; +} + + (NSValue *)valueWithMGLIconRotationAlignment:(MGLIconRotationAlignment)iconRotationAlignment { return [NSValue value:&iconRotationAlignment withObjCType:@encode(MGLIconRotationAlignment)]; } |