diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2018-03-30 16:43:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-30 16:43:55 -0700 |
commit | 59e92904c360e5aad94a1b789276bf6147120d7c (patch) | |
tree | fcb675741c492692324d841f8aaae905a3ccf8f4 /platform/darwin/src/NSExpression+MGLAdditions.mm | |
parent | b6866f764e5a804399ed60bbbce43a379b568ece (diff) | |
download | qtlocation-mapboxgl-59e92904c360e5aad94a1b789276bf6147120d7c.tar.gz |
Eviscerate mbgl expression to Foundation JSON object conversion (#11389)
* [ios, macos] Eviscerate mbgl expression to Foundation JSON object conversion
* [ios, macos] Remove literal special case
MGLJSONObjectFromMBGLValue() is just a literal translation from C++ types to Foundation types; no need for expression-specific literal wrapping.
* [ios, macos] Implemented RGB(A) operators
* [ios, macos] More robust color conversion
* [macos] Create calibrated RGB from expression on Sierra
* [macos] Calibrate colors in expressions at runtime
* [ios, macos] Special-case number conversion without fallbacks
* [ios, macos] Test mgl_number expressions
* [ios, macos] Updated tests for aftermarket expressions
* [ios, macos] Relax roundtripping requirement for serialize()
* [ios, macos] Fixed interpolation expression tests
* [ios, macos] Removed dead code
* [ios, macos] Fixed color conversion on Sierra
Diffstat (limited to 'platform/darwin/src/NSExpression+MGLAdditions.mm')
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.mm | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 7fe8ce3c91..17b130639f 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -541,7 +541,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { } else if ([op isEqualToString:@"to-boolean"]) { NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.firstObject]; return [NSExpression expressionForFunction:operand selectorName:@"boolValue" arguments:@[]]; - } else if ([op isEqualToString:@"to-number"]) { + } else if ([op isEqualToString:@"to-number"] || [op isEqualToString:@"number"]) { NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.firstObject]; if (argumentObjects.count == 1) { return [NSExpression expressionWithFormat:@"CAST(%@, 'NSNumber')", operand]; @@ -570,6 +570,12 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { function = @"length:"; } return [NSExpression expressionForFunction:function arguments:@[subexpressions.firstObject]]; + } else if ([op isEqualToString:@"rgb"]) { + NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); + return [NSExpression mgl_expressionForRGBComponents:subexpressions]; + } else if ([op isEqualToString:@"rgba"]) { + NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); + return [NSExpression mgl_expressionForRGBAComponents:subexpressions]; } else if ([op isEqualToString:@"min"]) { NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; @@ -842,7 +848,8 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { return @[@"at", self.arguments[1].mgl_jsonExpressionObject, self.arguments[0].mgl_jsonExpressionObject]; } else if ([function isEqualToString:@"boolValue"]) { return @[@"to-boolean", self.operand.mgl_jsonExpressionObject]; - } else if ([function isEqualToString:@"mgl_numberWithFallbackValues:"] || + } else if ([function isEqualToString:@"mgl_number"] || + [function isEqualToString:@"mgl_numberWithFallbackValues:"] || [function isEqualToString:@"decimalValue"] || [function isEqualToString:@"floatValue"] || [function isEqualToString:@"doubleValue"]) { @@ -895,6 +902,9 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { format:@"Casting expression to %@ not yet implemented.", type]; } else if ([function isEqualToString:@"MGL_FUNCTION"]) { return self.arguments.mgl_jsonExpressionObject; + } else if (op == [MGLColor class] && [function isEqualToString:@"colorWithRed:green:blue:alpha:"]) { + NSArray *arguments = self.arguments.mgl_jsonExpressionObject; + return [@[@"rgba"] arrayByAddingObjectsFromArray:arguments]; } else if ([function isEqualToString:@"median:"] || [function isEqualToString:@"mode:"] || [function isEqualToString:@"stddev:"] || |