fix: use public APIs in place of private CTFontDescriptorIsSystemUIFont in ui/gfx (#26548)

This commit is contained in:
Samuel Attard 2020-11-18 09:32:56 -08:00 committed by GitHub
parent dcc6196fe7
commit f182a600e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 0 deletions

View file

@ -102,3 +102,4 @@ fix_properly_honor_printing_page_ranges.patch
fix_use_electron_generated_resources.patch fix_use_electron_generated_resources.patch
chore_expose_v8_initialization_isolate_callbacks.patch chore_expose_v8_initialization_isolate_callbacks.patch
export_gin_v8platform_pageallocator_for_usage_outside_of_the_gin.patch export_gin_v8platform_pageallocator_for_usage_outside_of_the_gin.patch
use_public_apis_to_determine_if_a_font_is_a_system_font_in_mas_build.patch

View file

@ -0,0 +1,37 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <samuel.r.attard@gmail.com>
Date: Tue, 17 Nov 2020 16:59:28 -0800
Subject: use public APIs to determine if a font is a system font in MAS build
CTFontDescriptorIsSystemUIFont is a private API, we're using an _interesting_ technique in the MAS build to determine if the font is a system font by checking if it's kCTFontPriorityAttribute is set to system priority.
diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm
index fc6047806e3511f60b58a669fdf628e1a48eb05b..bcc29ac87cfc965eb4c3f06d959605d2cb259770 100644
--- a/ui/gfx/platform_font_mac.mm
+++ b/ui/gfx/platform_font_mac.mm
@@ -25,9 +25,11 @@
using Weight = Font::Weight;
+#if !defined(MAS_BUILD)
extern "C" {
bool CTFontDescriptorIsSystemUIFont(CTFontDescriptorRef);
}
+#endif
namespace {
@@ -269,7 +271,13 @@ NSInteger ToNSFontManagerWeight(Weight weight) {
// TODO(avi, etienneb): Figure out this font stuff.
base::ScopedCFTypeRef<CTFontDescriptorRef> descriptor(
CTFontCopyFontDescriptor(font));
+#if defined(MAS_BUILD)
+ CFNumberRef priority = (CFNumberRef)CTFontDescriptorCopyAttribute(descriptor.get(), (CFStringRef)kCTFontPriorityAttribute);
+ SInt64 v;
+ if (CFNumberGetValue(priority, kCFNumberSInt64Type, &v) && v == kCTFontPrioritySystem) {
+#else
if (CTFontDescriptorIsSystemUIFont(descriptor.get())) {
+#endif
// Assume it's the standard system font. The fact that this much is known is
// enough.
return PlatformFontMac::SystemFontType::kGeneral;