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

Commit 365cebd7 authored by Behdad Esfahbod's avatar Behdad Esfahbod Committed by Android Git Automerger
Browse files

am 74b5b699: am 8bbd753a: Support FontFeatureSettings in Paint

* commit '74b5b699e634031042204aa9a085b3c96d84854e':
  Support FontFeatureSettings in Paint
parents d8cd23fb 6dea9bec
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ void MinikinUtils::doLayout(Layout* layout, const Paint* paint, int bidiFlags, T
    minikinPaint.skewX = paint->getTextSkewX();
    minikinPaint.letterSpacing = paint->getLetterSpacing();
    minikinPaint.paintFlags = MinikinFontSkia::packPaintFlags(paint);
    minikinPaint.fontFeatureSettings = paint->getFontFeatureSettings();

    layout->doLayout(buf, start, count, bufSize, bidiFlags, minikinStyle, minikinPaint);
}
+11 −0
Original line number Diff line number Diff line
@@ -428,6 +428,16 @@ public:
        paint->setLetterSpacing(letterSpacing);
    }

    static void setFontFeatureSettings(JNIEnv* env, jobject clazz, jlong paintHandle, jstring settings) {
        Paint* paint = reinterpret_cast<Paint*>(paintHandle);
        if (!settings)
            paint->setFontFeatureSettings(std::string());
        else {
            ScopedUtfChars settingsChars(env, settings);
            paint->setFontFeatureSettings(std::string(settingsChars.c_str(), settingsChars.size()));
        }
    }

    static SkScalar getMetricsInternal(JNIEnv* env, jobject jpaint, Paint::FontMetrics *metrics) {
        const int kElegantTop = 2500;
        const int kElegantBottom = -1000;
@@ -987,6 +997,7 @@ static JNINativeMethod methods[] = {
    {"setTextSkewX","(F)V", (void*) PaintGlue::setTextSkewX},
    {"native_getLetterSpacing","(J)F", (void*) PaintGlue::getLetterSpacing},
    {"native_setLetterSpacing","(JF)V", (void*) PaintGlue::setLetterSpacing},
    {"native_setFontFeatureSettings","(JLjava/lang/String;)V", (void*) PaintGlue::setFontFeatureSettings},
    {"ascent","()F", (void*) PaintGlue::ascent},
    {"descent","()F", (void*) PaintGlue::descent},
    {"getFontMetrics", "(Landroid/graphics/Paint$FontMetrics;)F", (void*)PaintGlue::getFontMetrics},
+10 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define ANDROID_GRAPHICS_PAINT_H

#include <SkPaint.h>
#include <string>

namespace android {

@@ -42,8 +43,17 @@ public:
        return mLetterSpacing;
    }

    void setFontFeatureSettings(const std::string &fontFeatureSettings) {
        mFontFeatureSettings = fontFeatureSettings;
    }

    std::string getFontFeatureSettings() const {
        return mFontFeatureSettings;
    }

private:
    float mLetterSpacing;
    std::string mFontFeatureSettings;
};

}  // namespace android
+5 −3
Original line number Diff line number Diff line
@@ -23,11 +23,11 @@
namespace android {

Paint::Paint() : SkPaint(),
        mLetterSpacing(0) {
        mLetterSpacing(0), mFontFeatureSettings() {
}

Paint::Paint(const Paint& paint) : SkPaint(paint),
        mLetterSpacing(0) {
        mLetterSpacing(0), mFontFeatureSettings() {
}

Paint::~Paint() {
@@ -36,12 +36,14 @@ Paint::~Paint() {
Paint& Paint::operator=(const Paint& other) {
    SkPaint::operator=(other);
    mLetterSpacing = other.mLetterSpacing;
    mFontFeatureSettings = other.mFontFeatureSettings;
    return *this;
}

bool operator==(const Paint& a, const Paint& b) {
    return static_cast<const SkPaint&>(a) == static_cast<const SkPaint&>(b)
            && a.mLetterSpacing == b.mLetterSpacing;
            && a.mLetterSpacing == b.mLetterSpacing
            && a.mFontFeatureSettings == b.mFontFeatureSettings;
}

}
+33 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ public class Paint {
    private float       mInvCompatScaling;

    private Locale      mLocale;
    private String      mFontFeatureSettings;

    /**
     * @hide
@@ -474,6 +475,7 @@ public class Paint {
        mBidiFlags = BIDI_DEFAULT_LTR;
        setTextLocale(Locale.getDefault());
        setElegantTextHeight(false);
        mFontFeatureSettings = null;
    }

    /**
@@ -513,6 +515,7 @@ public class Paint {

        mBidiFlags = paint.mBidiFlags;
        mLocale = paint.mLocale;
        mFontFeatureSettings = paint.mFontFeatureSettings;
    }

    /** @hide */
@@ -1282,6 +1285,34 @@ public class Paint {
        native_setLetterSpacing(mNativePaint, letterSpacing);
    }

    /**
     * Get font feature settings.  Default is null.
     *
     * @return the paint's currently set font feature settings.
     * @hide
     */
    public String getFontFeatureSettings() {
        return mFontFeatureSettings;
    }

    /**
     * Set font feature settings.
     *
     * The format is the same as the CSS font-feature-settings attribute:
     * http://dev.w3.org/csswg/css-fonts/#propdef-font-feature-settings
     *
     * @param settings the font feature settings string to use, may be null.
     * @hide
     */
    public void setFontFeatureSettings(String settings) {
        if (settings != null && settings.equals(""))
            settings = null;
        if ((settings == null && mFontFeatureSettings == null)
                || (settings != null && settings.equals(mFontFeatureSettings))) return;
        mFontFeatureSettings = settings;
        native_setFontFeatureSettings(mNativePaint, settings);
    }

    /**
     * Return the distance above (negative) the baseline (ascent) based on the
     * current typeface and text size.
@@ -2259,4 +2290,6 @@ public class Paint {
    private static native float native_getLetterSpacing(long native_object);
    private static native void native_setLetterSpacing(long native_object,
                                                       float letterSpacing);
    private static native void native_setFontFeatureSettings(long native_object,
                                                             String settings);
}