summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/hwui/jni/text/TextShaper.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/libs/hwui/jni/text/TextShaper.cpp b/libs/hwui/jni/text/TextShaper.cpp
index 6c05346d26da..456338631ae4 100644
--- a/libs/hwui/jni/text/TextShaper.cpp
+++ b/libs/hwui/jni/text/TextShaper.cpp
@@ -156,16 +156,47 @@ static jboolean TextShaper_Result_getFakeItalic(CRITICAL_JNI_PARAMS_COMMA jlong
return layout->layout.getFakery(i).isFakeItalic();
}
+float findValueFromVariationSettings(const minikin::FontFakery& fakery, minikin::AxisTag tag) {
+ for (const minikin::FontVariation& fv : fakery.variationSettings()) {
+ if (fv.axisTag == tag) {
+ return fv.value;
+ }
+ }
+ return std::numeric_limits<float>::quiet_NaN();
+}
+
// CriticalNative
static jfloat TextShaper_Result_getWeightOverride(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
- return layout->layout.getFakery(i).wghtAdjustment();
+ if (text_feature::typeface_redesign()) {
+ float value =
+ findValueFromVariationSettings(layout->layout.getFakery(i), minikin::TAG_wght);
+ if (!std::isnan(value)) {
+ return value;
+ } else {
+ const std::shared_ptr<minikin::Font>& font = layout->layout.getFontRef(i);
+ return font->style().weight();
+ }
+ } else {
+ return layout->layout.getFakery(i).wghtAdjustment();
+ }
}
// CriticalNative
static jfloat TextShaper_Result_getItalicOverride(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
- return layout->layout.getFakery(i).italAdjustment();
+ if (text_feature::typeface_redesign()) {
+ float value =
+ findValueFromVariationSettings(layout->layout.getFakery(i), minikin::TAG_ital);
+ if (!std::isnan(value)) {
+ return value;
+ } else {
+ const std::shared_ptr<minikin::Font>& font = layout->layout.getFontRef(i);
+ return font->style().isItalic();
+ }
+ } else {
+ return layout->layout.getFakery(i).italAdjustment();
+ }
}
// CriticalNative