summaryrefslogtreecommitdiff
path: root/platform/macos/src/NSColor+MGLAdditions.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/macos/src/NSColor+MGLAdditions.mm')
-rw-r--r--platform/macos/src/NSColor+MGLAdditions.mm124
1 files changed, 0 insertions, 124 deletions
diff --git a/platform/macos/src/NSColor+MGLAdditions.mm b/platform/macos/src/NSColor+MGLAdditions.mm
deleted file mode 100644
index 6df3d750ce..0000000000
--- a/platform/macos/src/NSColor+MGLAdditions.mm
+++ /dev/null
@@ -1,124 +0,0 @@
-#import "NSColor+MGLAdditions.h"
-
-@implementation NSColor (MGLAdditions)
-
-- (mbgl::Color)mgl_color {
- CGFloat r, g, b, a;
-
- // The Mapbox Style Specification does not specify a color space, but it is
- // assumed to be sRGB for consistency with CSS.
- NSColor *srgbColor = self;
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- srgbColor = [srgbColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
- } else {
- srgbColor = [srgbColor colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
- }
- [srgbColor getRed:&r green:&g blue:&b alpha:&a];
-
- // NSColor provides non-premultiplied color components, so we have to premultiply each
- // color component with the alpha value to transform it into a valid
- // mbgl::Color which expects premultiplied color components.
- return { static_cast<float>(r*a), static_cast<float>(g*a), static_cast<float>(b*a), static_cast<float>(a) };
-}
-
-+ (NSColor *)mgl_colorWithColor:(mbgl::Color)color {
- // If there is no alpha value, return original color values.
- if (color.a == 0.0f) {
- // macOS 10.12 Sierra and below uses calibrated RGB by default.
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- return [NSColor colorWithCalibratedRed:color.r green:color.g blue:color.b alpha:color.a];
- } else {
- return [NSColor colorWithRed:color.r green:color.g blue:color.b alpha:color.a];
- }
- }
-
- // mbgl::Color provides premultiplied color components, so we have to convert color
- // components to non-premultiplied values to return a valid NSColor object.
- float red = static_cast<float>((color.r / color.a));
- float green = static_cast<float>((color.g / color.a));
- float blue = static_cast<float>((color.b / color.a));
-
- // macOS 10.12 Sierra and below uses calibrated RGB by default.
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- return [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:color.a];
- } else {
- return [NSColor colorWithRed:red green:green blue:blue alpha:color.a];
- }
-}
-
-- (mbgl::style::PropertyValue<mbgl::Color>)mgl_colorPropertyValue {
- mbgl::Color color = self.mgl_color;
- return {{ color.r, color.g, color.b, color.a }};
-}
-
-@end
-
-@implementation NSExpression (MGLColorAdditions)
-
-+ (NSExpression *)mgl_expressionForRGBComponents:(NSArray<NSExpression *> *)components {
- if (NSColor *color = [self mgl_colorWithRGBComponents:components]) {
- return [NSExpression expressionForConstantValue:color];
- }
-
- NSExpression *color = [NSExpression expressionForConstantValue:[NSColor class]];
- NSExpression *alpha = [NSExpression expressionForConstantValue:@1.0];
- return [NSExpression expressionForFunction:color
- selectorName:@"colorWithRed:green:blue:alpha:"
- arguments:[components arrayByAddingObject:alpha]];
-}
-
-+ (NSExpression *)mgl_expressionForRGBAComponents:(NSArray<NSExpression *> *)components {
- if (NSColor *color = [self mgl_colorWithRGBComponents:components]) {
- return [NSExpression expressionForConstantValue:color];
- }
-
- NSExpression *color = [NSExpression expressionForConstantValue:[NSColor class]];
- return [NSExpression expressionForFunction:color
- selectorName:@"colorWithRed:green:blue:alpha:"
- arguments:components];
-}
-
-/**
- Returns a color object corresponding to the given component expressions.
- */
-+ (NSColor *)mgl_colorWithRGBComponents:(NSArray<NSExpression *> *)componentExpressions {
- // Map the component expressions to constant components. If any component is
- // a non-constant expression, the components cannot be converted into a
- // constant color value.
- std::vector<CGFloat> components;
- for (NSExpression *componentExpression in componentExpressions) {
- if (componentExpression.expressionType != NSConstantValueExpressionType) {
- return nil;
- }
-
- NSNumber *component = (NSNumber *)componentExpression.constantValue;
- if (![component isKindOfClass:[NSNumber class]]) {
- return nil;
- }
-
- components.push_back(component.doubleValue / 255.0);
- }
-
- if (components.size() < 4) {
- components.push_back(1.0);
- } else {
- // Alpha
- components.back() *= 255.0;
- }
-
-
- // macOS 10.12 Sierra and below uses calibrated RGB by default.
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- return [NSColor colorWithCalibratedRed:components[0]
- green:components[1]
- blue:components[2]
- alpha:components[3]];
- }
- // The Mapbox Style Specification does not specify a color space, but it is
- // assumed to be sRGB for consistency with CSS.
- return [NSColor colorWithColorSpace:[NSColorSpace sRGBColorSpace]
- components:&components[0]
- count:components.size()];
-}
-
-@end