From f6e79d70735361438655f279c8699a786d25458c Mon Sep 17 00:00:00 2001 From: Lauren Budorick Date: Thu, 27 Apr 2017 15:56:55 -0700 Subject: [core] Render fill-extrusion layers (#8431) --- platform/darwin/src/MGLFillExtrusionStyleLayer.mm | 335 ++++++++++++++++++++++ 1 file changed, 335 insertions(+) create mode 100644 platform/darwin/src/MGLFillExtrusionStyleLayer.mm (limited to 'platform/darwin/src/MGLFillExtrusionStyleLayer.mm') diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm new file mode 100644 index 0000000000..b00ed8e09f --- /dev/null +++ b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm @@ -0,0 +1,335 @@ +// This file is generated. +// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. + +#import "MGLSource.h" +#import "NSPredicate+MGLAdditions.h" +#import "NSDate+MGLAdditions.h" +#import "MGLStyleLayer_Private.h" +#import "MGLStyleValue_Private.h" +#import "MGLFillExtrusionStyleLayer.h" + +#include +#include + +namespace mbgl { + + MBGL_DEFINE_ENUM(MGLFillExtrusionTranslationAnchor, { + { MGLFillExtrusionTranslationAnchorMap, "map" }, + { MGLFillExtrusionTranslationAnchorViewport, "viewport" }, + }); + +} + +@interface MGLFillExtrusionStyleLayer () + +@property (nonatomic, readonly) mbgl::style::FillExtrusionLayer *rawLayer; + +@end + +@implementation MGLFillExtrusionStyleLayer + +- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source +{ + auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); + return self = [super initWithPendingLayer:std::move(layer)]; +} + +- (mbgl::style::FillExtrusionLayer *)rawLayer +{ + return (mbgl::style::FillExtrusionLayer *)super.rawLayer; +} + +- (NSString *)sourceIdentifier +{ + MGLAssertStyleLayerIsValid(); + + return @(self.rawLayer->getSourceID().c_str()); +} + +- (NSString *)sourceLayerIdentifier +{ + MGLAssertStyleLayerIsValid(); + + auto layerID = self.rawLayer->getSourceLayer(); + return layerID.empty() ? nil : @(layerID.c_str()); +} + +- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier +{ + MGLAssertStyleLayerIsValid(); + + self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); +} + +- (void)setPredicate:(NSPredicate *)predicate +{ + MGLAssertStyleLayerIsValid(); + + self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::NullFilter()); +} + +- (NSPredicate *)predicate +{ + MGLAssertStyleLayerIsValid(); + + return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; +} + +#pragma mark - Accessing the Paint Attributes + +- (void)setFillExtrusionBase:(MGLStyleValue *)fillExtrusionBase { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer().toDataDrivenPropertyValue(fillExtrusionBase); + self.rawLayer->setFillExtrusionBase(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionBase { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionBase(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer().toDataDrivenStyleValue(self.rawLayer->getDefaultFillExtrusionBase()); + } + return MGLStyleValueTransformer().toDataDrivenStyleValue(propertyValue); +} + +- (void)setFillExtrusionBaseTransition:(MGLTransition )transition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; + self.rawLayer->setFillExtrusionBaseTransition(options); +} + +- (MGLTransition)fillExtrusionBaseTransition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionBaseTransition(); + MGLTransition transition; + transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero())); + transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero())); + + return transition; +} + +- (void)setFillExtrusionColor:(MGLStyleValue *)fillExtrusionColor { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer().toDataDrivenPropertyValue(fillExtrusionColor); + self.rawLayer->setFillExtrusionColor(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionColor { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionColor(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer().toDataDrivenStyleValue(self.rawLayer->getDefaultFillExtrusionColor()); + } + return MGLStyleValueTransformer().toDataDrivenStyleValue(propertyValue); +} + +- (void)setFillExtrusionColorTransition:(MGLTransition )transition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; + self.rawLayer->setFillExtrusionColorTransition(options); +} + +- (MGLTransition)fillExtrusionColorTransition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionColorTransition(); + MGLTransition transition; + transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero())); + transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero())); + + return transition; +} + +- (void)setFillExtrusionHeight:(MGLStyleValue *)fillExtrusionHeight { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer().toDataDrivenPropertyValue(fillExtrusionHeight); + self.rawLayer->setFillExtrusionHeight(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionHeight { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionHeight(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer().toDataDrivenStyleValue(self.rawLayer->getDefaultFillExtrusionHeight()); + } + return MGLStyleValueTransformer().toDataDrivenStyleValue(propertyValue); +} + +- (void)setFillExtrusionHeightTransition:(MGLTransition )transition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; + self.rawLayer->setFillExtrusionHeightTransition(options); +} + +- (MGLTransition)fillExtrusionHeightTransition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionHeightTransition(); + MGLTransition transition; + transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero())); + transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero())); + + return transition; +} + +- (void)setFillExtrusionOpacity:(MGLStyleValue *)fillExtrusionOpacity { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer().toInterpolatablePropertyValue(fillExtrusionOpacity); + self.rawLayer->setFillExtrusionOpacity(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionOpacity { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionOpacity(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer().toStyleValue(self.rawLayer->getDefaultFillExtrusionOpacity()); + } + return MGLStyleValueTransformer().toStyleValue(propertyValue); +} + +- (void)setFillExtrusionOpacityTransition:(MGLTransition )transition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; + self.rawLayer->setFillExtrusionOpacityTransition(options); +} + +- (MGLTransition)fillExtrusionOpacityTransition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionOpacityTransition(); + MGLTransition transition; + transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero())); + transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero())); + + return transition; +} + +- (void)setFillExtrusionPattern:(MGLStyleValue *)fillExtrusionPattern { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer().toPropertyValue(fillExtrusionPattern); + self.rawLayer->setFillExtrusionPattern(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionPattern { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionPattern(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer().toStyleValue(self.rawLayer->getDefaultFillExtrusionPattern()); + } + return MGLStyleValueTransformer().toStyleValue(propertyValue); +} + +- (void)setFillExtrusionPatternTransition:(MGLTransition )transition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; + self.rawLayer->setFillExtrusionPatternTransition(options); +} + +- (MGLTransition)fillExtrusionPatternTransition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionPatternTransition(); + MGLTransition transition; + transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero())); + transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero())); + + return transition; +} + +- (void)setFillExtrusionTranslation:(MGLStyleValue *)fillExtrusionTranslation { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer, NSValue *>().toInterpolatablePropertyValue(fillExtrusionTranslation); + self.rawLayer->setFillExtrusionTranslate(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionTranslation { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionTranslate(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer, NSValue *>().toStyleValue(self.rawLayer->getDefaultFillExtrusionTranslate()); + } + return MGLStyleValueTransformer, NSValue *>().toStyleValue(propertyValue); +} + +- (void)setFillExtrusionTranslationTransition:(MGLTransition )transition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; + self.rawLayer->setFillExtrusionTranslateTransition(options); +} + +- (MGLTransition)fillExtrusionTranslationTransition { + MGLAssertStyleLayerIsValid(); + + mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionTranslateTransition(); + MGLTransition transition; + transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero())); + transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero())); + + return transition; +} + +- (void)setFillExtrusionTranslate:(MGLStyleValue *)fillExtrusionTranslate { +} + +- (MGLStyleValue *)fillExtrusionTranslate { + return self.fillExtrusionTranslation; +} + +- (void)setFillExtrusionTranslationAnchor:(MGLStyleValue *)fillExtrusionTranslationAnchor { + MGLAssertStyleLayerIsValid(); + + auto mbglValue = MGLStyleValueTransformer().toEnumPropertyValue(fillExtrusionTranslationAnchor); + self.rawLayer->setFillExtrusionTranslateAnchor(mbglValue); +} + +- (MGLStyleValue *)fillExtrusionTranslationAnchor { + MGLAssertStyleLayerIsValid(); + + auto propertyValue = self.rawLayer->getFillExtrusionTranslateAnchor(); + if (propertyValue.isUndefined()) { + return MGLStyleValueTransformer().toEnumStyleValue(self.rawLayer->getDefaultFillExtrusionTranslateAnchor()); + } + return MGLStyleValueTransformer().toEnumStyleValue(propertyValue); +} + +- (void)setFillExtrusionTranslateAnchor:(MGLStyleValue *)fillExtrusionTranslateAnchor { +} + +- (MGLStyleValue *)fillExtrusionTranslateAnchor { + return self.fillExtrusionTranslationAnchor; +} + +@end + +@implementation NSValue (MGLFillExtrusionStyleLayerAdditions) + ++ (NSValue *)valueWithMGLFillExtrusionTranslationAnchor:(MGLFillExtrusionTranslationAnchor)fillExtrusionTranslationAnchor { + return [NSValue value:&fillExtrusionTranslationAnchor withObjCType:@encode(MGLFillExtrusionTranslationAnchor)]; +} + +- (MGLFillExtrusionTranslationAnchor)MGLFillExtrusionTranslationAnchorValue { + MGLFillExtrusionTranslationAnchor fillExtrusionTranslationAnchor; + [self getValue:&fillExtrusionTranslationAnchor]; + return fillExtrusionTranslationAnchor; +} + +@end -- cgit v1.2.1