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.mm13
1 files changed, 10 insertions, 3 deletions
diff --git a/platform/macos/src/NSColor+MGLAdditions.mm b/platform/macos/src/NSColor+MGLAdditions.mm
index ea7d99f66d..0714ac1ada 100644
--- a/platform/macos/src/NSColor+MGLAdditions.mm
+++ b/platform/macos/src/NSColor+MGLAdditions.mm
@@ -15,15 +15,22 @@
}
[srgbColor getRed:&r green:&g blue:&b alpha:&a];
- return { (float)r, (float)g, (float)b, (float)a };
+ // Premultiply 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 {
+ // Since CIColor expects color values to be non-multiplied, we transform them here
+ // to non-premultiplied values
+ 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:color.r green:color.g blue:color.b alpha:color.a];
+ return [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:color.a];
} else {
- return [NSColor colorWithRed:color.r green:color.g blue:color.b alpha:color.a];
+ return [NSColor colorWithRed:red green:green blue:blue alpha:color.a];
}
}