summaryrefslogtreecommitdiff
path: root/platform/macos
diff options
context:
space:
mode:
authorNadia Barbosa <nadiabarbosa@me.com>2019-04-11 17:00:10 -0700
committerNadia Barbosa <captainbarbosa@users.noreply.github.com>2019-04-12 11:07:46 -0700
commit2ee967a036d115d35aa474c0c84a645ab7097c72 (patch)
tree0cb339193abb65c8016d5c29d7812fa95ca4634e /platform/macos
parent19c6010ff29eba791be76e26dbbeb9c3c325827a (diff)
downloadqtlocation-mapboxgl-2ee967a036d115d35aa474c0c84a645ab7097c72.tar.gz
[ios, macos] Premultiply color values for mgl_color
Fixes https://github.com/mapbox/mapbox-gl-native/issues/14329
Diffstat (limited to 'platform/macos')
-rw-r--r--platform/macos/CHANGELOG.md1
-rw-r--r--platform/macos/src/NSColor+MGLAdditions.mm25
2 files changed, 23 insertions, 3 deletions
diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md
index ebfb3f335a..98bdda0abc 100644
--- a/platform/macos/CHANGELOG.md
+++ b/platform/macos/CHANGELOG.md
@@ -12,6 +12,7 @@
* Added `mgl_attributed:` expression operator, which concatenate `MGLAttributedExpression` objects for specifying rich text in the `MGLSymbolStyleLayer.text` property. ([#14094](https://github.com/mapbox/mapbox-gl-native/pull/14094))
* Fixed an issue that caused conditional expressions to crash when passed nested conditional expressions as parameters. ([#14181](https://github.com/mapbox/mapbox-gl-native/pull/14181))
* Added `-[MGLMapViewDelegate mapView:didFailToLoadImage:]` to load missing symbol icons in the style if they are not found. ([#14302](https://github.com/mapbox/mapbox-gl-native/pull/14302))
+* Fixed a bug where non-opaque `NSColor` values were ignored when assigned to a style layer color property. ([#14406](https://github.com/mapbox/mapbox-gl-native/pull/14406))
### Offline
diff --git a/platform/macos/src/NSColor+MGLAdditions.mm b/platform/macos/src/NSColor+MGLAdditions.mm
index ea7d99f66d..6df3d750ce 100644
--- a/platform/macos/src/NSColor+MGLAdditions.mm
+++ b/platform/macos/src/NSColor+MGLAdditions.mm
@@ -15,15 +15,34 @@
}
[srgbColor getRed:&r green:&g blue:&b alpha:&a];
- return { (float)r, (float)g, (float)b, (float)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: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];
}
}