[ios, macos] Implement default value for identity functions

This commit is contained in:
Jesse Bounds
2017-02-02 20:41:18 -08:00
parent 4867db5168
commit e5c9db4793
2 changed files with 22 additions and 25 deletions

View File

@@ -367,13 +367,7 @@ private: // Private utilities for converting from mgl to mbgl values
}];
mbgl::style::CategoricalStops<MBGLType> categoricalStops = {stops};
mbgl::style::SourceFunction<MBGLType> sourceFunction = {sourceStyleFunction.attributeName.UTF8String, categoricalStops};
if (sourceStyleFunction.defaultValue) {
NSCAssert([sourceStyleFunction.defaultValue isKindOfClass:[MGLStyleConstantValue class]], @"Default value must be constant");
MBGLType mbglValue;
id mglValue = [(MGLStyleConstantValue<ObjCType> *)sourceStyleFunction.defaultValue rawValue];
getMBGLValue(mglValue, mbglValue);
sourceFunction.defaultValue = mbglValue;
}
setDefaultMBGLValue(sourceStyleFunction, sourceFunction);
return sourceFunction;
}
@@ -387,13 +381,7 @@ private: // Private utilities for converting from mgl to mbgl values
}];
mbgl::style::ExponentialStops<MBGLType> exponentialStops = {stops, (float)sourceStyleFunction.interpolationBase};
mbgl::style::SourceFunction<MBGLType> sourceFunction = {sourceStyleFunction.attributeName.UTF8String, exponentialStops};
if (sourceStyleFunction.defaultValue) {
NSCAssert([sourceStyleFunction.defaultValue isKindOfClass:[MGLStyleConstantValue class]], @"Default value must be constant");
MBGLType mbglValue;
id mglValue = [(MGLStyleConstantValue<ObjCType> *)sourceStyleFunction.defaultValue rawValue];
getMBGLValue(mglValue, mbglValue);
sourceFunction.defaultValue = mbglValue;
}
setDefaultMBGLValue(sourceStyleFunction, sourceFunction);
return sourceFunction;
}
@@ -407,6 +395,18 @@ private: // Private utilities for converting from mgl to mbgl values
}];
mbgl::style::IntervalStops<MBGLType> intervalStops = {stops};
mbgl::style::SourceFunction<MBGLType> sourceFunction = {sourceStyleFunction.attributeName.UTF8String, intervalStops};
setDefaultMBGLValue(sourceStyleFunction, sourceFunction);
return sourceFunction;
}
mbgl::style::SourceFunction<MBGLType> toMBGLIdentitySourceFunction(MGLSourceStyleFunction<ObjCType> *sourceStyleFunction) {
mbgl::style::IdentityStops<MBGLType> identityStops;
mbgl::style::SourceFunction<MBGLType> sourceFunction = {sourceStyleFunction.attributeName.UTF8String, identityStops};
setDefaultMBGLValue(sourceStyleFunction, sourceFunction);
return sourceFunction;
}
void setDefaultMBGLValue(MGLSourceStyleFunction<ObjCType> *sourceStyleFunction, mbgl::style::SourceFunction<MBGLType> &sourceFunction) {
if (sourceStyleFunction.defaultValue) {
NSCAssert([sourceStyleFunction.defaultValue isKindOfClass:[MGLStyleConstantValue class]], @"Default value must be constant");
MBGLType mbglValue;
@@ -414,13 +414,6 @@ private: // Private utilities for converting from mgl to mbgl values
getMBGLValue(mglValue, mbglValue);
sourceFunction.defaultValue = mbglValue;
}
return sourceFunction;
}
mbgl::style::SourceFunction<MBGLType> toMBGLIdentitySourceFunction(MGLSourceStyleFunction<ObjCType> *sourceStyleFunction) {
mbgl::style::IdentityStops<MBGLType> identityStops;
mbgl::style::SourceFunction<MBGLType> sourceFunction = {sourceStyleFunction.attributeName.UTF8String, identityStops};
return sourceFunction;
}
// Bool
@@ -638,9 +631,13 @@ private: // Private utilities for converting from mbgl to mgl values
}
id operator()(const mbgl::style::IdentityStops<MBGLType> &mbglStops) {
return [MGLSourceStyleFunction functionWithInterpolationMode:MGLInterpolationModeIdentity
stops:nil
attributeName:@(mbglFunction.property.c_str()) options:nil];
MGLSourceStyleFunction *sourceFunction = [MGLSourceStyleFunction functionWithInterpolationMode:MGLInterpolationModeIdentity
stops:nil
attributeName:@(mbglFunction.property.c_str()) options:nil];
if (mbglFunction.defaultValue) {
sourceFunction.defaultValue = [MGLStyleValue valueWithRawValue:toMGLRawStyleValue(*mbglFunction.defaultValue)];
}
return sourceFunction;
}
const mbgl::style::SourceFunction<MBGLType> &mbglFunction;

View File

@@ -164,7 +164,7 @@ extension MGLStyleValueTests {
interpolationMode: .identity,
sourceStops: nil,
attributeName: "size",
options: nil
options: [.defaultValue: MGLStyleValue<UIColor>(rawValue: .green)]
)
circleStyleLayer.circleColor = expectedSourceIdentityValue
XCTAssertEqual(circleStyleLayer.circleColor, expectedSourceIdentityValue)