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

Commit 219e2c79 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Add wordSpacing parameter to Paint

Adds the ability to control word spacing from Java, wiring up the
plumbing to the corresponding change that adds it at the Minikin
level.

Bug: 31707212
Test: ran graphicstests
Change-Id: I568186aca961d51ee5231cb0331f882b7b005e90
parent 171cb036
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -915,6 +915,16 @@ namespace PaintGlue {
        paint->setLetterSpacing(letterSpacing);
    }

    static jfloat getWordSpacing(jlong paintHandle) {
        Paint* paint = reinterpret_cast<Paint*>(paintHandle);
        return paint->getWordSpacing();
    }

    static void setWordSpacing(jlong paintHandle, jfloat wordSpacing) {
        Paint* paint = reinterpret_cast<Paint*>(paintHandle);
        paint->setWordSpacing(wordSpacing);
    }

    static jint getHyphenEdit(jlong paintHandle, jint hyphen) {
        Paint* paint = reinterpret_cast<Paint*>(paintHandle);
        return paint->getHyphenEdit();
@@ -1043,6 +1053,8 @@ static const JNINativeMethod methods[] = {
    {"nSetTextSkewX","(JF)V", (void*) PaintGlue::setTextSkewX},
    {"nGetLetterSpacing","(J)F", (void*) PaintGlue::getLetterSpacing},
    {"nSetLetterSpacing","(JF)V", (void*) PaintGlue::setLetterSpacing},
    {"nGetWordSpacing","(J)F", (void*) PaintGlue::getWordSpacing},
    {"nSetWordSpacing","(JF)V", (void*) PaintGlue::setWordSpacing},
    {"nGetHyphenEdit", "(J)I", (void*) PaintGlue::getHyphenEdit},
    {"nSetHyphenEdit", "(JI)V", (void*) PaintGlue::setHyphenEdit},
    {"nAscent","(JJ)F", (void*) PaintGlue::ascent},
+26 −0
Original line number Diff line number Diff line
@@ -1441,6 +1441,28 @@ public class Paint {
        nSetLetterSpacing(mNativePaint, letterSpacing);
    }

    /**
     * Return the paint's word-spacing for text. The default value is 0.
     *
     * @return the paint's word-spacing for drawing text.
     * @hide
     */
    public float getWordSpacing() {
        return nGetWordSpacing(mNativePaint);
    }

    /**
     * Set the paint's word-spacing for text. The default value is 0.
     * The value is in pixels (note the units are not the same as for
     * letter-spacing).
     *
     * @param wordSpacing set the paint's word-spacing for drawing text.
     * @hide
     */
    public void setWordSpacing(float wordSpacing) {
        nSetWordSpacing(mNativePaint, wordSpacing);
    }

    /**
     * Returns the font feature settings. The format is the same as the CSS
     * font-feature-settings attribute:
@@ -2711,6 +2733,10 @@ public class Paint {
    @CriticalNative
    private static native void nSetLetterSpacing(long paintPtr, float letterSpacing);
    @CriticalNative
    private static native float nGetWordSpacing(long paintPtr);
    @CriticalNative
    private static native void nSetWordSpacing(long paintPtr, float wordSpacing);
    @CriticalNative
    private static native int nGetHyphenEdit(long paintPtr);
    @CriticalNative
    private static native void nSetHyphenEdit(long paintPtr, int hyphen);
+9 −0
Original line number Diff line number Diff line
@@ -218,4 +218,13 @@ public class PaintTest extends AndroidTestCase {
            assertEquals(width, p.measureText(bidiText), 1.0f);
        }
    }

    public void testSetGetWordSpacing() {
        Paint p = new Paint();
        assertEquals(0.0f, p.getWordSpacing());  // The default value should be 0.
        p.setWordSpacing(1.0f);
        assertEquals(1.0f, p.getWordSpacing());
        p.setWordSpacing(-2.0f);
        assertEquals(-2.0f, p.getWordSpacing());
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ minikin::FontStyle MinikinUtils::prepareMinikinPaint(minikin::MinikinPaint* mini
    minikinPaint->scaleX = paint->getTextScaleX();
    minikinPaint->skewX = paint->getTextSkewX();
    minikinPaint->letterSpacing = paint->getLetterSpacing();
    minikinPaint->wordSpacing = paint->getWordSpacing();
    minikinPaint->paintFlags = MinikinFontSkia::packPaintFlags(paint);
    minikinPaint->fontFeatureSettings = paint->getFontFeatureSettings();
    minikinPaint->hyphenEdit = minikin::HyphenEdit(paint->getHyphenEdit());
+9 −0
Original line number Diff line number Diff line
@@ -48,6 +48,14 @@ public:
        return mLetterSpacing;
    }

    void setWordSpacing(float wordSpacing) {
        mWordSpacing = wordSpacing;
    }

    float getWordSpacing() const {
        return mWordSpacing;
    }

    void setFontFeatureSettings(const std::string& fontFeatureSettings) {
        mFontFeatureSettings = fontFeatureSettings;
    }
@@ -82,6 +90,7 @@ public:

private:
    float mLetterSpacing = 0;
    float mWordSpacing = 0;
    std::string mFontFeatureSettings;
    uint32_t mMinikinLangListId;
    minikin::FontVariant mFontVariant;
Loading