This repository has been archived by the owner on May 20, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 298
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
upgpkg: electron 14.0.1-2: harfbuzz 3.0.0 rebuild
git-svn-id: file:///srv/repos/svn-community/svn@1016913 9fca08f4-af9d-4005-b8df-a31f2cc04f65
- Loading branch information
foutrelis
authored and
svntogit
committed
Sep 18, 2021
1 parent
15f432b
commit bab8ce6
Showing
3 changed files
with
127 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# https://github.com/chromium/chromium/commit/b289f6f3fcbc | ||
|
||
diff --git a/components/paint_preview/common/subset_font.cc b/components/paint_preview/common/subset_font.cc | ||
index 8ff0540d9a..20a7d37474 100644 | ||
--- a/components/paint_preview/common/subset_font.cc | ||
+++ b/components/paint_preview/common/subset_font.cc | ||
@@ -72,9 +72,11 @@ sk_sp<SkData> SubsetFont(SkTypeface* typeface, const GlyphUsage& usage) { | ||
hb_set_t* glyphs = | ||
hb_subset_input_glyph_set(input.get()); // Owned by |input|. | ||
usage.ForEach(base::BindRepeating(&AddGlyphs, base::Unretained(glyphs))); | ||
- hb_subset_input_set_retain_gids(input.get(), true); | ||
+ hb_subset_input_set_flags(input.get(), HB_SUBSET_FLAGS_RETAIN_GIDS); | ||
|
||
- HbScoped<hb_face_t> subset_face(hb_subset(face.get(), input.get())); | ||
+ HbScoped<hb_face_t> subset_face(hb_subset_or_fail(face.get(), input.get())); | ||
+ if (!subset_face) | ||
+ return nullptr; | ||
HbScoped<hb_blob_t> subset_blob(hb_face_reference_blob(subset_face.get())); | ||
if (!subset_blob) | ||
return nullptr; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
# Minimal diff for harfbuzz 3.0.0 support; based on: | ||
# https://github.com/google/skia/commit/66684b17b382 | ||
# https://github.com/google/skia/commit/51d83abcd24a | ||
|
||
diff --git a/gn/skia.gni b/gn/skia.gni | ||
index d98fdc19ee..199335d5c4 100644 | ||
--- a/gn/skia.gni | ||
+++ b/gn/skia.gni | ||
@@ -34,8 +34,6 @@ declare_args() { | ||
skia_include_multiframe_procs = false | ||
skia_lex = false | ||
skia_libgifcodec_path = "third_party/externals/libgifcodec" | ||
- skia_pdf_subset_harfbuzz = | ||
- false # TODO: set skia_pdf_subset_harfbuzz to skia_use_harfbuzz. | ||
skia_qt_path = getenv("QT_PATH") | ||
skia_skqp_global_error_tolerance = 0 | ||
skia_tools_require_resources = false | ||
@@ -99,6 +97,10 @@ declare_args() { | ||
skia_use_libfuzzer_defaults = true | ||
} | ||
|
||
+declare_args() { | ||
+ skia_pdf_subset_harfbuzz = skia_use_harfbuzz | ||
+} | ||
+ | ||
declare_args() { | ||
skia_compile_sksl_tests = skia_compile_processors | ||
skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype | ||
diff --git a/src/pdf/SkPDFSubsetFont.cpp b/src/pdf/SkPDFSubsetFont.cpp | ||
index 81c37eef3a..2340a7937b 100644 | ||
--- a/src/pdf/SkPDFSubsetFont.cpp | ||
+++ b/src/pdf/SkPDFSubsetFont.cpp | ||
@@ -49,6 +49,37 @@ static sk_sp<SkData> to_data(HBBlob blob) { | ||
blob.release()); | ||
} | ||
|
||
+template<typename...> using void_t = void; | ||
+template<typename T, typename = void> | ||
+struct SkPDFHarfBuzzSubset { | ||
+ // This is the HarfBuzz 3.0 interface. | ||
+ // hb_subset_flags_t does not exist in 2.0. It isn't dependent on T, so inline the value of | ||
+ // HB_SUBSET_FLAGS_RETAIN_GIDS until 2.0 is no longer supported. | ||
+ static HBFace Make(T input, hb_face_t* face) { | ||
+ // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY. | ||
+ // If it isn't known if a font is 'tricky', retain the hints. | ||
+ hb_subset_input_set_flags(input, 2/*HB_SUBSET_FLAGS_RETAIN_GIDS*/); | ||
+ return HBFace(hb_subset_or_fail(face, input)); | ||
+ } | ||
+}; | ||
+template<typename T> | ||
+struct SkPDFHarfBuzzSubset<T, void_t< | ||
+ decltype(hb_subset_input_set_retain_gids(std::declval<T>(), std::declval<bool>())), | ||
+ decltype(hb_subset_input_set_drop_hints(std::declval<T>(), std::declval<bool>())), | ||
+ decltype(hb_subset(std::declval<hb_face_t*>(), std::declval<T>())) | ||
+ >> | ||
+{ | ||
+ // This is the HarfBuzz 2.0 (non-public) interface, used if it exists. | ||
+ // This code should be removed as soon as all users are migrated to the newer API. | ||
+ static HBFace Make(T input, hb_face_t* face) { | ||
+ hb_subset_input_set_retain_gids(input, true); | ||
+ // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY. | ||
+ // If it isn't known if a font is 'tricky', retain the hints. | ||
+ hb_subset_input_set_drop_hints(input, false); | ||
+ return HBFace(hb_subset(face, input)); | ||
+ } | ||
+}; | ||
+ | ||
static sk_sp<SkData> subset_harfbuzz(sk_sp<SkData> fontData, | ||
const SkPDFGlyphUse& glyphUsage, | ||
int ttcIndex) { | ||
@@ -71,11 +102,10 @@ static sk_sp<SkData> subset_harfbuzz(sk_sp<SkData> fontData, | ||
hb_set_t* glyphs = hb_subset_input_glyph_set(input.get()); | ||
glyphUsage.getSetValues([&glyphs](unsigned gid) { hb_set_add(glyphs, gid);}); | ||
|
||
- hb_subset_input_set_retain_gids(input.get(), true); | ||
- // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY. | ||
- // If it isn't known if a font is 'tricky', retain the hints. | ||
- hb_subset_input_set_drop_hints(input.get(), false); | ||
- HBFace subset(hb_subset(face.get(), input.get())); | ||
+ HBFace subset = SkPDFHarfBuzzSubset<hb_subset_input_t*>::Make(input.get(), face.get()); | ||
+ if (!subset) { | ||
+ return nullptr; | ||
+ } | ||
HBBlob result(hb_face_reference_blob(subset.get())); | ||
return to_data(std::move(result)); | ||
} | ||
diff --git a/third_party/harfbuzz/BUILD.gn b/third_party/harfbuzz/BUILD.gn | ||
index 173830de62..4156607ef9 100644 | ||
--- a/third_party/harfbuzz/BUILD.gn | ||
+++ b/third_party/harfbuzz/BUILD.gn | ||
@@ -14,6 +14,9 @@ if (skia_use_system_harfbuzz) { | ||
system("harfbuzz") { | ||
include_dirs = [ "/usr/include/harfbuzz" ] | ||
libs = [ "harfbuzz" ] | ||
+ if (skia_pdf_subset_harfbuzz) { | ||
+ libs += [ "harfbuzz-subset" ] | ||
+ } | ||
} | ||
} else { | ||
third_party("harfbuzz") { |