Commit 27c88800 authored by erikchen@chromium.org's avatar erikchen@chromium.org

Reland #2: Add a short term solution to fix OSX 10.11 system font rendering problems.

The mechanism that Blink was using to determine OSX version number was not
reliable. This has since been fixed.

> I landed a CL (https://codereview.chromium.org/1276003003/) which fixes system
> font problems on OSX 10.9 and OSX 10.10. The CL also fixed MatchNSFontFamily()
> to correctly return the system font on 10.11, but this causes glyph rendering
> problems. In the short term, I'm adding logic to MatchNSFontFamily() to return
> nil on 10.11, which was the original behavior before I landed that CL.
>
> BUG=521034
> Committed: https://src.chromium.org/viewvc/blink?view=rev&revision=200618

BUG=521034
TBR=tkent@chromium.org, keishi@chromium.org

Review URL: https://codereview.chromium.org/1299713004

git-svn-id: svn://svn.chromium.org/blink/trunk@200855 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 991d782f
...@@ -133,6 +133,15 @@ static BOOL betterChoice(NSFontTraitMask desiredTraits, int desiredWeight, ...@@ -133,6 +133,15 @@ static BOOL betterChoice(NSFontTraitMask desiredTraits, int desiredWeight,
NSFont* MatchNSFontFamily(NSString* desiredFamily, NSFontTraitMask desiredTraits, FontWeight desiredWeight, float size) NSFont* MatchNSFontFamily(NSString* desiredFamily, NSFontTraitMask desiredTraits, FontWeight desiredWeight, float size)
{ {
if ([desiredFamily isEqualToString:@"BlinkMacSystemFont"]) { if ([desiredFamily isEqualToString:@"BlinkMacSystemFont"]) {
// On OSX 10.11, returning the default system font causes rendering
// problems. In the short term, return nil, which is what would be
// returned if "BlinkMacSystemFont" was never introduced.
// TODO(erikchen): Fix the rendering problems.
// http://crbug.com/521034.
if (IsOSElCapitan()) {
return nil;
}
// On OSX 10.9, the default system font depends on the SDK version. When // On OSX 10.9, the default system font depends on the SDK version. When
// compiled against the OSX 10.10 SDK, the font is .LucidaGrandeUI. When // compiled against the OSX 10.10 SDK, the font is .LucidaGrandeUI. When
// compiled against the OSX 10.6 SDK, the font is Lucida Grande. Layout // compiled against the OSX 10.6 SDK, the font is Lucida Grande. Layout
......
...@@ -24,7 +24,7 @@ void TestSystemFontContainsString(FontWeight desiredWeight, NSString* substring) ...@@ -24,7 +24,7 @@ void TestSystemFontContainsString(FontWeight desiredWeight, NSString* substring)
TEST(FontFamilyMatcherMacTest, YosemiteFontWeights) TEST(FontFamilyMatcherMacTest, YosemiteFontWeights)
{ {
if (IsOSMavericksOrEarlier()) if (!IsOSYosemite())
return; return;
TestSystemFontContainsString(FontWeight100, @"-UltraLight"); TestSystemFontContainsString(FontWeight100, @"-UltraLight");
......
...@@ -16,6 +16,12 @@ PLATFORM_EXPORT bool IsOSLionOrEarlier(); ...@@ -16,6 +16,12 @@ PLATFORM_EXPORT bool IsOSLionOrEarlier();
PLATFORM_EXPORT bool IsOSMavericksOrEarlier(); PLATFORM_EXPORT bool IsOSMavericksOrEarlier();
PLATFORM_EXPORT bool IsOSMavericks(); PLATFORM_EXPORT bool IsOSMavericks();
// Yosemite is Mac OS X 10.10, Darwin 14.
PLATFORM_EXPORT bool IsOSYosemite();
// El Capitan is Mac OS X 10.11, Darwin 15.
PLATFORM_EXPORT bool IsOSElCapitan();
} // namespace blink } // namespace blink
#endif // VersionUtilMac_h #endif // VersionUtilMac_h
...@@ -60,6 +60,8 @@ int MacOSXMinorVersion() ...@@ -60,6 +60,8 @@ int MacOSXMinorVersion()
enum { enum {
LION_MINOR_VERSION = 7, LION_MINOR_VERSION = 7,
MAVERICKS_MINOR_VERSION = 9, MAVERICKS_MINOR_VERSION = 9,
YOSEMITE_MINOR_VERSION = 10,
EL_CAPITAN_MINOR_VERSION = 11,
}; };
} // namespace } // namespace
...@@ -81,4 +83,14 @@ bool IsOSMavericks() ...@@ -81,4 +83,14 @@ bool IsOSMavericks()
return MacOSXMinorVersion() == MAVERICKS_MINOR_VERSION; return MacOSXMinorVersion() == MAVERICKS_MINOR_VERSION;
} }
bool IsOSYosemite()
{
return MacOSXMinorVersion() == YOSEMITE_MINOR_VERSION;
}
bool IsOSElCapitan()
{
return MacOSXMinorVersion() == EL_CAPITAN_MINOR_VERSION;
}
} // namespace blink } // namespace blink
...@@ -23,6 +23,11 @@ ...@@ -23,6 +23,11 @@
// This number was determined by writing a tiny Cocoa App on 10.10.4. // This number was determined by writing a tiny Cocoa App on 10.10.4.
#define NSAppKitVersionNumber10_10Max 1348 #define NSAppKitVersionNumber10_10Max 1348
// This number was measured on OSX 10.11 Beta 15A234d. The 10.11
// AppKit.framework does not provide an NSAppKitVersionNumber preprocessor
// definition for OSX 10.11.
#define NSAppKitVersionNumber10_11Max 1389
// AppKit version is loosely correlated to OSX version. It's still useful as a // AppKit version is loosely correlated to OSX version. It's still useful as a
// sanity check in unit tests, though we don't want to rely on it in production // sanity check in unit tests, though we don't want to rely on it in production
// code. // code.
...@@ -32,6 +37,8 @@ TEST(VersionUtilMac, AppKitVersions) ...@@ -32,6 +37,8 @@ TEST(VersionUtilMac, AppKitVersions)
EXPECT_TRUE(blink::IsOSLionOrEarlier()); EXPECT_TRUE(blink::IsOSLionOrEarlier());
EXPECT_TRUE(blink::IsOSMavericksOrEarlier()); EXPECT_TRUE(blink::IsOSMavericksOrEarlier());
EXPECT_FALSE(blink::IsOSMavericks()); EXPECT_FALSE(blink::IsOSMavericks());
EXPECT_FALSE(blink::IsOSYosemite());
EXPECT_FALSE(blink::IsOSElCapitan());
return; return;
} }
...@@ -39,19 +46,36 @@ TEST(VersionUtilMac, AppKitVersions) ...@@ -39,19 +46,36 @@ TEST(VersionUtilMac, AppKitVersions)
EXPECT_FALSE(blink::IsOSLionOrEarlier()); EXPECT_FALSE(blink::IsOSLionOrEarlier());
EXPECT_TRUE(blink::IsOSMavericksOrEarlier()); EXPECT_TRUE(blink::IsOSMavericksOrEarlier());
EXPECT_FALSE(blink::IsOSMavericks()); EXPECT_FALSE(blink::IsOSMavericks());
EXPECT_FALSE(blink::IsOSYosemite());
EXPECT_FALSE(blink::IsOSElCapitan());
return; return;
} }
if (floor(NSAppKitVersionNumber) == NSAppKitVersionNumber10_9) { if (floor(NSAppKitVersionNumber) == NSAppKitVersionNumber10_9) {
EXPECT_FALSE(blink::IsOSLionOrEarlier()); EXPECT_FALSE(blink::IsOSLionOrEarlier());
EXPECT_TRUE(blink::IsOSMavericksOrEarlier()); EXPECT_TRUE(blink::IsOSMavericksOrEarlier());
EXPECT_TRUE(blink::IsOSMavericks()); EXPECT_TRUE(blink::IsOSMavericks());
EXPECT_FALSE(blink::IsOSYosemite());
EXPECT_FALSE(blink::IsOSElCapitan());
return; return;
} }
if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_10Max && if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_10Max &&
floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_10) { floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_10) {
EXPECT_FALSE(blink::IsOSLionOrEarlier()); EXPECT_FALSE(blink::IsOSLionOrEarlier());
EXPECT_FALSE(blink::IsOSMavericksOrEarlier()); EXPECT_FALSE(blink::IsOSMavericksOrEarlier());
EXPECT_FALSE(blink::IsOSMavericks()); EXPECT_FALSE(blink::IsOSMavericks());
EXPECT_TRUE(blink::IsOSYosemite());
EXPECT_FALSE(blink::IsOSElCapitan());
return;
}
if (floor(NSAppKitVersionNumber) == NSAppKitVersionNumber10_11Max) {
EXPECT_FALSE(blink::IsOSLionOrEarlier());
EXPECT_FALSE(blink::IsOSMavericksOrEarlier());
EXPECT_FALSE(blink::IsOSMavericks());
EXPECT_FALSE(blink::IsOSYosemite());
EXPECT_TRUE(blink::IsOSElCapitan());
return; return;
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment