Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(940)

Unified Diff: third_party/WebKit/Source/core/layout/LayoutThemeMac.mm

Issue 2873333002: mac color: Use sRGB for native controls instead of device RGB (Closed)
Patch Set: And roll in the image decode bit Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/LayoutThemeMac.mm
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeMac.mm b/third_party/WebKit/Source/core/layout/LayoutThemeMac.mm
index 6835bd0bbf78ef4080811475d9910cd48ac36259..72a2a14b54a9205501ce9da81fd9388397ba7113 100644
--- a/third_party/WebKit/Source/core/layout/LayoutThemeMac.mm
+++ b/third_party/WebKit/Source/core/layout/LayoutThemeMac.mm
@@ -20,6 +20,10 @@
#import "core/layout/LayoutThemeMac.h"
+#import <AvailabilityMacros.h>
+#import <Carbon/Carbon.h>
+#import <Cocoa/Cocoa.h>
+#import <math.h>
#import "core/CSSValueKeywords.h"
#import "core/HTMLNames.h"
#import "core/fileapi/FileList.h"
@@ -29,6 +33,7 @@
#import "core/style/ShadowList.h"
#import "platform/LayoutTestSupport.h"
#import "platform/PlatformResourceLoader.h"
+#import "platform/RuntimeEnabledFeatures.h"
#import "platform/Theme.h"
#import "platform/graphics/BitmapImage.h"
#import "platform/mac/ColorMac.h"
@@ -37,10 +42,6 @@
#import "platform/mac/WebCoreNSCellExtras.h"
#import "platform/text/PlatformLocale.h"
#import "platform/text/StringTruncator.h"
-#import <AvailabilityMacros.h>
-#import <Carbon/Carbon.h>
-#import <Cocoa/Cocoa.h>
-#import <math.h>
// The methods in this file are specific to the Mac OS X platform.
@@ -128,6 +129,14 @@ bool FontSizeMatchesToControlSize(const ComputedStyle& style) {
return false;
}
+NSColor* ColorInColorSpace(NSColor* color) {
+ if (RuntimeEnabledFeatures::colorCorrectRenderingEnabled()) {
+ return [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
+ } else {
+ return [color colorUsingColorSpaceName:NSDeviceRGBColorSpace];
+ }
+}
+
} // namespace
using namespace HTMLNames;
@@ -151,16 +160,14 @@ bool FontSizeMatchesToControlSize(const ComputedStyle& style) {
}
Color LayoutThemeMac::PlatformActiveSelectionBackgroundColor() const {
- NSColor* color = [[NSColor selectedTextBackgroundColor]
- colorUsingColorSpaceName:NSDeviceRGBColorSpace];
+ NSColor* color = ColorInColorSpace([NSColor selectedTextBackgroundColor]);
return Color(static_cast<int>(255.0 * [color redComponent]),
static_cast<int>(255.0 * [color greenComponent]),
static_cast<int>(255.0 * [color blueComponent]));
}
Color LayoutThemeMac::PlatformInactiveSelectionBackgroundColor() const {
- NSColor* color = [[NSColor secondarySelectedControlColor]
- colorUsingColorSpaceName:NSDeviceRGBColorSpace];
+ NSColor* color = ColorInColorSpace([NSColor secondarySelectedControlColor]);
return Color(static_cast<int>(255.0 * [color redComponent]),
static_cast<int>(255.0 * [color greenComponent]),
static_cast<int>(255.0 * [color blueComponent]));
@@ -171,8 +178,7 @@ bool FontSizeMatchesToControlSize(const ComputedStyle& style) {
}
Color LayoutThemeMac::PlatformActiveListBoxSelectionBackgroundColor() const {
- NSColor* color = [[NSColor alternateSelectedControlColor]
- colorUsingColorSpaceName:NSDeviceRGBColorSpace];
+ NSColor* color = ColorInColorSpace([NSColor alternateSelectedControlColor]);
return Color(static_cast<int>(255.0 * [color redComponent]),
static_cast<int>(255.0 * [color greenComponent]),
static_cast<int>(255.0 * [color blueComponent]));
@@ -263,8 +269,7 @@ static FontWeight ToFontWeight(NSInteger app_kit_font_weight) {
}
static RGBA32 ConvertNSColorToColor(NSColor* color) {
- NSColor* color_in_color_space =
- [color colorUsingColorSpaceName:NSDeviceRGBColorSpace];
+ NSColor* color_in_color_space = ColorInColorSpace(color);
if (color_in_color_space) {
static const double kScaleFactor = nextafter(256.0, 0.0);
return MakeRGB(
@@ -274,12 +279,10 @@ static RGBA32 ConvertNSColorToColor(NSColor* color) {
}
// This conversion above can fail if the NSColor in question is an
- // NSPatternColor
- // (as many system colors are). These colors are actually a repeating pattern
- // not just a solid color. To work around this we simply draw a 1x1 image of
- // the color and use that pixel's color. It might be better to use an average
- // of
- // the colors in the pattern instead.
+ // NSPatternColor (as many system colors are). These colors are actually a
+ // repeating pattern not just a solid color. To work around this we simply
+ // draw a 1x1 image of the color and use that pixel's color. It might be
+ // better to use an average of the colors in the pattern instead.
NSBitmapImageRep* offscreen_rep =
[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
pixelsWide:1
@@ -302,10 +305,13 @@ static RGBA32 ConvertNSColorToColor(NSColor* color) {
NSUInteger pixel[4];
[offscreen_rep getPixel:pixel atX:0 y:0];
-
[offscreen_rep release];
-
- return MakeRGB(pixel[0], pixel[1], pixel[2]);
+ // This recursive call will not recurse again, because the color space
+ // the second time around is NSDeviceRGBColorSpace.
+ return ConvertNSColorToColor([NSColor colorWithDeviceRed:pixel[0] / 255.
+ green:pixel[1] / 255.
+ blue:pixel[2] / 255.
+ alpha:1.]);
}
static RGBA32 MenuBackgroundColor() {
@@ -332,10 +338,11 @@ static RGBA32 MenuBackgroundColor() {
NSUInteger pixel[4];
[offscreen_rep getPixel:pixel atX:0 y:0];
-
[offscreen_rep release];
-
- return MakeRGB(pixel[0], pixel[1], pixel[2]);
+ return ConvertNSColorToColor([NSColor colorWithDeviceRed:pixel[0] / 255.
+ green:pixel[1] / 255.
+ blue:pixel[2] / 255.
+ alpha:1.]);
}
void LayoutThemeMac::PlatformColorsDidChange() {

Powered by Google App Engine
This is Rietveld 408576698