summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/darwin/src/MGLStyleValue.h7
-rw-r--r--platform/darwin/src/MGLStyleValue.mm27
-rw-r--r--platform/darwin/src/MGLStyleValue_Private.h6
3 files changed, 33 insertions, 7 deletions
diff --git a/platform/darwin/src/MGLStyleValue.h b/platform/darwin/src/MGLStyleValue.h
index 1f19a5e028..010a0d68cb 100644
--- a/platform/darwin/src/MGLStyleValue.h
+++ b/platform/darwin/src/MGLStyleValue.h
@@ -13,7 +13,9 @@
+ (instancetype)valueWithRawValue:(T)rawValue;
-- (instancetype)initWithRawValue:(T)rawValue;
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithRawValue:(T)rawValue NS_DESIGNATED_INITIALIZER;
@property (nonatomic) T rawValue;
@@ -22,9 +24,10 @@
@interface MGLStyleFunction<T> : MGLStyleValue
+ (instancetype)functionWithBase:(CGFloat)base stops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops;
+
+ (instancetype)functionWithStops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops;
-- (instancetype)initWithBase:(CGFloat)base stops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops;
+- (instancetype)initWithBase:(CGFloat)base stops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops NS_DESIGNATED_INITIALIZER;
@property (nonatomic) CGFloat base;
@property (nonatomic, copy) NSDictionary<NSNumber *, MGLStyleValue<T> *> *stops;
diff --git a/platform/darwin/src/MGLStyleValue.mm b/platform/darwin/src/MGLStyleValue.mm
index f8d5fd3a5d..43b51d6788 100644
--- a/platform/darwin/src/MGLStyleValue.mm
+++ b/platform/darwin/src/MGLStyleValue.mm
@@ -33,6 +33,10 @@
return [self.rawValue description];
}
+- (NSString *)debugDescription {
+ return [self.rawValue debugDescription];
+}
+
- (BOOL)isEqual:(MGLStyleConstantValue *)other {
return [other isKindOfClass:[self class]] && [other.rawValue isEqual:self.rawValue];
}
@@ -54,18 +58,31 @@
}
- (instancetype)init {
- if (self = [super init]) {
- _base = 1;
- }
- return self;
+ return [self initWithBase:1 stops:@{}];
}
- (instancetype)initWithBase:(CGFloat)base stops:(NSDictionary *)stops {
- if (self = [self init]) {
+ if (self = [super init]) {
_base = base;
_stops = stops;
}
return self;
}
+- (NSString *)description {
+ return [NSString stringWithFormat:@"<%@: %p, base = %f; stops = %@>",
+ NSStringFromClass([self class]), (void *)self,
+ self.base,
+ self.stops];
+}
+
+- (BOOL)isEqual:(MGLStyleFunction *)other {
+ return ([other isKindOfClass:[self class]] && other.base == self.base
+ && [other.stops isEqualToDictionary:self.stops]);
+}
+
+- (NSUInteger)hash {
+ return self.base + self.stops.hash;
+}
+
@end
diff --git a/platform/darwin/src/MGLStyleValue_Private.h b/platform/darwin/src/MGLStyleValue_Private.h
index e48db02bf1..cc3fecec7e 100644
--- a/platform/darwin/src/MGLStyleValue_Private.h
+++ b/platform/darwin/src/MGLStyleValue_Private.h
@@ -42,6 +42,12 @@ public:
mbglStops.emplace_back(zoomKey.floatValue, mbglStopValue.asConstant());
}];
return mbgl::style::Function<MBGLType>({{mbglStops}}, function.base);
+ } else if (value) {
+ [NSException raise:@"MGLAbstractClassException" format:
+ @"The style value %@ cannot be applied to the style. "
+ @"Make sure the style value was created as a member of a concrete subclass of MGLStyleValue.",
+ NSStringFromClass([value class])];
+ return {};
} else {
return {};
}