Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60d2dfc6 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Update the impl of wghtOverride and italOverride

The wghtOverride and italOverride are not used in the redesigned
variation settings. These values are stored in the variation
settings instead. To keep the existing behavior, find the value
from variation settings and return it.

Bug: 361260253
Test: minikin_tests
Flag: com.android.text.flags.typeface_redesign

Change-Id: I2fc987ea3db14cf62d5aa807f428d19f3892cbfa
parent 53aebb03
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -156,17 +156,48 @@ 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);
    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);
    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
static jlong TextShaper_Result_getFont(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {