From 8d536c0cc76ee3d783d26b1f27da7b916797eab4 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Tue, 29 Oct 2024 11:16:30 +0100 Subject: [PATCH] Issue #2646 - Parse "variations" keywords. Resolves #2646 --- gfx/thebes/gfxUserFontSet.h | 13 +++++++++++-- layout/inspector/nsFontFace.cpp | 12 ++++++++++++ layout/style/FontFaceSet.cpp | 9 +++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/gfx/thebes/gfxUserFontSet.h b/gfx/thebes/gfxUserFontSet.h index 3a13573ac2..2570bd7119 100644 --- a/gfx/thebes/gfxUserFontSet.h +++ b/gfx/thebes/gfxUserFontSet.h @@ -191,14 +191,23 @@ public: FLAG_FORMAT_WOFF = 1 << 6, FLAG_FORMAT_WOFF2 = 1 << 7, + FLAG_FORMAT_OPENTYPE_VARIATIONS = 1 << 8, + FLAG_FORMAT_TRUETYPE_VARIATIONS = 1 << 9, + FLAG_FORMAT_WOFF_VARIATIONS = 1 << 10, + FLAG_FORMAT_WOFF2_VARIATIONS = 1 << 11, + // the common formats that we support everywhere FLAG_FORMATS_COMMON = FLAG_FORMAT_OPENTYPE | FLAG_FORMAT_TRUETYPE | FLAG_FORMAT_WOFF | - FLAG_FORMAT_WOFF2, + FLAG_FORMAT_WOFF2 | + FLAG_FORMAT_OPENTYPE_VARIATIONS | + FLAG_FORMAT_TRUETYPE_VARIATIONS | + FLAG_FORMAT_WOFF_VARIATIONS | + FLAG_FORMAT_WOFF2_VARIATIONS, // mask of all unused bits, update when adding new formats - FLAG_FORMAT_NOT_USED = ~((1 << 8)-1) + FLAG_FORMAT_NOT_USED = ~((1 << 12)-1) }; diff --git a/layout/inspector/nsFontFace.cpp b/layout/inspector/nsFontFace.cpp index abf9f6439c..03ac0d583f 100644 --- a/layout/inspector/nsFontFace.cpp +++ b/layout/inspector/nsFontFace.cpp @@ -178,6 +178,18 @@ nsFontFace::GetFormat(nsAString & aFormat) if (formatFlags & gfxUserFontSet::FLAG_FORMAT_WOFF2) { AppendToFormat(aFormat, "woff2"); } + if (formatFlags & gfxUserFontSet::FLAG_FORMAT_OPENTYPE_VARIATIONS) { + AppendToFormat(aFormat, "opentype-variations"); + } + if (formatFlags & gfxUserFontSet::FLAG_FORMAT_TRUETYPE_VARIATIONS) { + AppendToFormat(aFormat, "truetype-variations"); + } + if (formatFlags & gfxUserFontSet::FLAG_FORMAT_WOFF_VARIATIONS) { + AppendToFormat(aFormat, "woff-variations"); + } + if (formatFlags & gfxUserFontSet::FLAG_FORMAT_WOFF2_VARIATIONS) { + AppendToFormat(aFormat, "woff2-variations"); + } } return NS_OK; } diff --git a/layout/style/FontFaceSet.cpp b/layout/style/FontFaceSet.cpp index 81e6250ec7..54dc570a91 100644 --- a/layout/style/FontFaceSet.cpp +++ b/layout/style/FontFaceSet.cpp @@ -1132,6 +1132,15 @@ FontFaceSet::FindOrCreateUserFontEntryFromFontFace(const nsAString& aFamilyName, face->mFormatFlags |= gfxUserFontSet::FLAG_FORMAT_EOT; } else if (valueString.LowerCaseEqualsASCII("svg")) { face->mFormatFlags |= gfxUserFontSet::FLAG_FORMAT_SVG; + } else if (valueString.LowerCaseEqualsASCII("woff-variations")) { + face->mFormatFlags |= gfxUserFontSet::FLAG_FORMAT_WOFF_VARIATIONS; + } else if (Preferences::GetBool(GFX_PREF_WOFF2_ENABLED) && + valueString.LowerCaseEqualsASCII("woff2-variations")) { + face->mFormatFlags |= gfxUserFontSet::FLAG_FORMAT_WOFF2_VARIATIONS; + } else if (valueString.LowerCaseEqualsASCII("opentype-variations")) { + face->mFormatFlags |= gfxUserFontSet::FLAG_FORMAT_OPENTYPE_VARIATIONS; + } else if (valueString.LowerCaseEqualsASCII("truetype-variations")) { + face->mFormatFlags |= gfxUserFontSet::FLAG_FORMAT_TRUETYPE_VARIATIONS; } else { // unknown format specified, mark to distinguish from the // case where no format hints are specified