summaryrefslogtreecommitdiff
path: root/platform/ios/src/UIColor+MGLAdditions.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios/src/UIColor+MGLAdditions.mm')
-rw-r--r--platform/ios/src/UIColor+MGLAdditions.mm18
1 files changed, 16 insertions, 2 deletions
diff --git a/platform/ios/src/UIColor+MGLAdditions.mm b/platform/ios/src/UIColor+MGLAdditions.mm
index 7c1fbddc20..68e77f5b10 100644
--- a/platform/ios/src/UIColor+MGLAdditions.mm
+++ b/platform/ios/src/UIColor+MGLAdditions.mm
@@ -6,7 +6,10 @@
{
CGFloat r, g, b, a;
[self getRed:&r green:&g blue:&b alpha:&a];
- return { (float)r, (float)g, (float)b, (float)a };
+ // UIColor 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) };
}
- (mbgl::style::PropertyValue<mbgl::Color>)mgl_colorPropertyValue
@@ -17,7 +20,18 @@
+ (UIColor *)mgl_colorWithColor:(mbgl::Color)color
{
- return [UIColor colorWithRed:color.r green:color.g blue:color.b alpha:color.a];
+ // If there is no alpha value, return original color values.
+ if (color.a == 0.0f) {
+ return [UIColor 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 UIColor 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));
+
+ return [UIColor colorWithRed:red green:green blue:blue alpha:color.a];
}
@end