Use VariationSettings instead of vector of FontVariation
Bug: 361260253
Test: minikin_tests
Flag: com.android.text.flags.typeface_redesign
Change-Id: Ia967c6576e2e97b159aefa844207a4cce25dc749
diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp
index bbb1420..f0bcfe53 100644
--- a/libs/hwui/hwui/MinikinSkia.cpp
+++ b/libs/hwui/hwui/MinikinSkia.cpp
@@ -36,7 +36,7 @@
MinikinFontSkia::MinikinFontSkia(sk_sp<SkTypeface> typeface, int sourceId, const void* fontData,
size_t fontSize, std::string_view filePath, int ttcIndex,
- const std::vector<minikin::FontVariation>& axes)
+ const minikin::VariationSettings& axes)
: mTypeface(std::move(typeface))
, mSourceId(sourceId)
, mFontData(fontData)
@@ -123,12 +123,12 @@
return mTtcIndex;
}
-const std::vector<minikin::FontVariation>& MinikinFontSkia::GetAxes() const {
+const minikin::VariationSettings& MinikinFontSkia::GetAxes() const {
return mAxes;
}
std::shared_ptr<minikin::MinikinFont> MinikinFontSkia::createFontWithVariation(
- const std::vector<minikin::FontVariation>& variations) const {
+ const minikin::VariationSettings& variations) const {
SkFontArguments args;
std::vector<SkFontArguments::VariationPosition::Coordinate> skVariation;
diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h
index de9a5c2..7fe5978bfd 100644
--- a/libs/hwui/hwui/MinikinSkia.h
+++ b/libs/hwui/hwui/MinikinSkia.h
@@ -32,7 +32,7 @@
public:
MinikinFontSkia(sk_sp<SkTypeface> typeface, int sourceId, const void* fontData, size_t fontSize,
std::string_view filePath, int ttcIndex,
- const std::vector<minikin::FontVariation>& axes);
+ const minikin::VariationSettings& axes);
float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint,
const minikin::FontFakery& fakery) const override;
@@ -59,9 +59,9 @@
size_t GetFontSize() const;
int GetFontIndex() const;
const std::string& getFilePath() const { return mFilePath; }
- const std::vector<minikin::FontVariation>& GetAxes() const;
+ const minikin::VariationSettings& GetAxes() const;
std::shared_ptr<minikin::MinikinFont> createFontWithVariation(
- const std::vector<minikin::FontVariation>&) const;
+ const minikin::VariationSettings&) const;
int GetSourceId() const override { return mSourceId; }
static uint32_t packFontFlags(const SkFont&);
@@ -80,7 +80,7 @@
const void* mFontData;
size_t mFontSize;
int mTtcIndex;
- std::vector<minikin::FontVariation> mAxes;
+ minikin::VariationSettings mAxes;
std::string mFilePath;
};
diff --git a/libs/hwui/hwui/Typeface.cpp b/libs/hwui/hwui/Typeface.cpp
index a9d1a2a..2d812d6 100644
--- a/libs/hwui/hwui/Typeface.cpp
+++ b/libs/hwui/hwui/Typeface.cpp
@@ -92,8 +92,8 @@
return result;
}
-Typeface* Typeface::createFromTypefaceWithVariation(
- Typeface* src, const std::vector<minikin::FontVariation>& variations) {
+Typeface* Typeface::createFromTypefaceWithVariation(Typeface* src,
+ const minikin::VariationSettings& variations) {
const Typeface* resolvedFace = Typeface::resolveDefault(src);
Typeface* result = new Typeface();
if (result != nullptr) {
@@ -192,9 +192,8 @@
sk_sp<SkTypeface> typeface = fm->makeFromStream(std::move(fontData));
LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", kRobotoFont);
- std::shared_ptr<minikin::MinikinFont> font =
- std::make_shared<MinikinFontSkia>(std::move(typeface), 0, data, st.st_size, kRobotoFont,
- 0, std::vector<minikin::FontVariation>());
+ std::shared_ptr<minikin::MinikinFont> font = std::make_shared<MinikinFontSkia>(
+ std::move(typeface), 0, data, st.st_size, kRobotoFont, 0, minikin::VariationSettings());
std::vector<std::shared_ptr<minikin::Font>> fonts;
fonts.push_back(minikin::Font::Builder(font).build());
diff --git a/libs/hwui/hwui/Typeface.h b/libs/hwui/hwui/Typeface.h
index 565136e..2c96c1a 100644
--- a/libs/hwui/hwui/Typeface.h
+++ b/libs/hwui/hwui/Typeface.h
@@ -74,8 +74,8 @@
static Typeface* createRelative(Typeface* src, Style desiredStyle);
static Typeface* createAbsolute(Typeface* base, int weight, bool italic);
- static Typeface* createFromTypefaceWithVariation(
- Typeface* src, const std::vector<minikin::FontVariation>& variations);
+ static Typeface* createFromTypefaceWithVariation(Typeface* src,
+ const minikin::VariationSettings& variations);
static Typeface* createFromFamilies(
std::vector<std::shared_ptr<minikin::FontFamily>>&& families, int weight, int italic,
diff --git a/libs/hwui/jni/FontFamily.cpp b/libs/hwui/jni/FontFamily.cpp
index e6d790f..9922ff3 100644
--- a/libs/hwui/jni/FontFamily.cpp
+++ b/libs/hwui/jni/FontFamily.cpp
@@ -133,9 +133,9 @@
builder->axes.clear();
return false;
}
- std::shared_ptr<minikin::MinikinFont> minikinFont =
- std::make_shared<MinikinFontSkia>(std::move(face), fonts::getNewSourceId(), fontPtr,
- fontSize, "", ttcIndex, builder->axes);
+ std::shared_ptr<minikin::MinikinFont> minikinFont = std::make_shared<MinikinFontSkia>(
+ std::move(face), fonts::getNewSourceId(), fontPtr, fontSize, "", ttcIndex,
+ minikin::VariationSettings(builder->axes, false));
minikin::Font::Builder fontBuilder(minikinFont);
if (weight != RESOLVE_BY_FONT_TABLE) {
diff --git a/libs/hwui/jni/Typeface.cpp b/libs/hwui/jni/Typeface.cpp
index 209b35c..0f458dd 100644
--- a/libs/hwui/jni/Typeface.cpp
+++ b/libs/hwui/jni/Typeface.cpp
@@ -80,7 +80,8 @@
AxisHelper axis(env, axisObject);
variations.push_back(minikin::FontVariation(axis.getTag(), axis.getStyleValue()));
}
- return toJLong(Typeface::createFromTypefaceWithVariation(toTypeface(familyHandle), variations));
+ return toJLong(Typeface::createFromTypefaceWithVariation(
+ toTypeface(familyHandle), minikin::VariationSettings(variations, false /* sorted */)));
}
static jlong Typeface_createWeightAlias(JNIEnv* env, jobject, jlong familyHandle, jint weight) {
@@ -273,7 +274,7 @@
const std::string& path = typeface->GetFontPath();
writer->writeString(path);
writer->write<int>(typeface->GetFontIndex());
- const std::vector<minikin::FontVariation>& axes = typeface->GetAxes();
+ const minikin::VariationSettings& axes = typeface->GetAxes();
writer->writeArray<minikin::FontVariation>(axes.data(), axes.size());
bool hasVerity = getVerity(path);
writer->write<int8_t>(static_cast<int8_t>(hasVerity));
diff --git a/libs/hwui/jni/fonts/Font.cpp b/libs/hwui/jni/fonts/Font.cpp
index f405aba..6a05b6c 100644
--- a/libs/hwui/jni/fonts/Font.cpp
+++ b/libs/hwui/jni/fonts/Font.cpp
@@ -142,7 +142,7 @@
std::shared_ptr<minikin::MinikinFont> newMinikinFont = std::make_shared<MinikinFontSkia>(
std::move(newTypeface), minikinSkia->GetSourceId(), minikinSkia->GetFontData(),
minikinSkia->GetFontSize(), minikinSkia->getFilePath(), minikinSkia->GetFontIndex(),
- builder->axes);
+ minikin::VariationSettings(builder->axes, false));
std::shared_ptr<minikin::Font> newFont = minikin::Font::Builder(newMinikinFont)
.setWeight(weight)
.setSlant(static_cast<minikin::FontStyle::Slant>(italic))
@@ -303,7 +303,7 @@
var = reader.readArray<minikin::FontVariation>().first[index];
} else {
const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->baseTypeface();
- var = minikinFont->GetAxes().at(index);
+ var = minikinFont->GetAxes()[index];
}
uint32_t floatBinary = *reinterpret_cast<const uint32_t*>(&var.value);
return (static_cast<uint64_t>(var.axisTag) << 32) | static_cast<uint64_t>(floatBinary);