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

Commit 4db1ae80 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Make setFontVariationSettings work with weight adjustment

If setFontVariationSettings is called, the font weight adjustment
no longer adjusted except for the synthetic bolding.

From target SDK 36, because the font variation settings is stored
in the Paint class, it is possible to adjust the weight at runtime
without using synthetic bolding.

Bug: 380202452
Test: atest CtsGraphicsTestCases
Test: atest CtsTextTestCases
Test: atest minikin_tests
Test: manually done
Flag: com.android.text.flags.typeface_redesign_readonly
Change-Id: Ie591086b48d538bc4e554854d9d4a7d04a6b398a
parent dbe81bbb
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.widget;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.graphics.Paint.NEW_FONT_VARIATION_MANAGEMENT;
import static android.view.ContentInfo.FLAG_CONVERT_TO_PLAIN_TEXT;
import static android.view.ContentInfo.SOURCE_AUTOFILL;
import static android.view.ContentInfo.SOURCE_CLIPBOARD;
@@ -5542,7 +5543,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                        && fontVariationSettings.equals(existingSettings))) {
            return true;
        }
        boolean effective = mTextPaint.setFontVariationSettings(fontVariationSettings);
        final boolean useFontVariationStore = Flags.typefaceRedesignReadonly()
                && CompatChanges.isChangeEnabled(NEW_FONT_VARIATION_MANAGEMENT);
        boolean effective;
        if (useFontVariationStore) {
            if (mFontWeightAdjustment != 0
                    && mFontWeightAdjustment != Configuration.FONT_WEIGHT_ADJUSTMENT_UNDEFINED) {
                mTextPaint.setFontVariationSettings(fontVariationSettings, mFontWeightAdjustment);
            } else {
                mTextPaint.setFontVariationSettings(fontVariationSettings);
            }
            effective = true;
        } else {
            effective = mTextPaint.setFontVariationSettings(fontVariationSettings);
        }
        if (effective && mLayout != null) {
            nullLayouts();
+16 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.app.compat.CompatChanges;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.compat.annotation.UnsupportedAppUsage;
import android.graphics.fonts.FontStyle;
import android.graphics.fonts.FontVariationAxis;
import android.graphics.text.TextRunShaper;
import android.os.Build;
@@ -2141,6 +2142,14 @@ public class Paint {
     * @see FontVariationAxis
     */
    public boolean setFontVariationSettings(String fontVariationSettings) {
        return setFontVariationSettings(fontVariationSettings, 0 /* wght adjust */);
    }

    /**
     * Set font variation settings with weight adjustment
     * @hide
     */
    public boolean setFontVariationSettings(String fontVariationSettings, int wghtAdjust) {
        final boolean useFontVariationStore = Flags.typefaceRedesignReadonly()
                && CompatChanges.isChangeEnabled(NEW_FONT_VARIATION_MANAGEMENT);
        if (useFontVariationStore) {
@@ -2154,8 +2163,13 @@ public class Paint {

            long builderPtr = nCreateFontVariationBuilder(axes.length);
            for (int i = 0; i < axes.length; ++i) {
                nAddFontVariationToBuilder(builderPtr, axes[i].getOpenTypeTagValue(),
                        axes[i].getStyleValue());
                int tag = axes[i].getOpenTypeTagValue();
                float value = axes[i].getStyleValue();
                if (tag == 0x77676874 /* wght */) {
                    value = Math.clamp(value + wghtAdjust,
                            FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX);
                }
                nAddFontVariationToBuilder(builderPtr, tag, value);
            }
            nSetFontVariationOverride(mNativePaint, builderPtr);
            mFontVariationSettings = fontVariationSettings;