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

Commit b85f02e9 authored by Roozbeh Pournader's avatar Roozbeh Pournader Committed by Android (Google) Code Review
Browse files

Merge "Frameworks support for hyphenation for various complex cases"

parents 272fe5c3 46c6f4c5
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -852,6 +852,18 @@ class TextLine {
        return runIsRtl ? -ret : ret;
    }

    private int adjustHyphenEdit(int start, int limit, int hyphenEdit) {
        int result = hyphenEdit;
        // Only draw hyphens on first or last run in line. Disable them otherwise.
        if (start > 0) { // not the first run
            result &= ~Paint.HYPHENEDIT_MASK_START_OF_LINE;
        }
        if (limit < mLen) { // not the last run
            result &= ~Paint.HYPHENEDIT_MASK_END_OF_LINE;
        }
        return result;
    }

    /**
     * Utility function for handling a unidirectional run.  The run must not
     * contain tabs but can contain styles.
@@ -893,9 +905,9 @@ class TextLine {
        if (mSpanned == null) {
            TextPaint wp = mWorkPaint;
            wp.set(mPaint);
            final int mlimit = measureLimit;
            wp.setHyphenEdit(adjustHyphenEdit(start, limit, wp.getHyphenEdit()));
            return handleText(wp, start, limit, start, limit, runIsRtl, c, x, top,
                    y, bottom, fmi, needWidth || mlimit < measureLimit, mlimit);
                    y, bottom, fmi, needWidth, measureLimit);
        }

        mMetricAffectingSpanSpanSet.init(mSpanned, mStart + start, mStart + limit);
@@ -953,10 +965,8 @@ class TextLine {
                    span.updateDrawState(wp);
                }

                // Only draw hyphen on last run in line
                if (jnext < mLen) {
                    wp.setHyphenEdit(0);
                }
                wp.setHyphenEdit(adjustHyphenEdit(j, jnext, wp.getHyphenEdit()));

                x += handleText(wp, j, jnext, i, inext, runIsRtl, c, x,
                        top, y, bottom, fmi, needWidth || jnext < measureLimit, offset);
            }
+16 −1
Original line number Diff line number Diff line
@@ -339,6 +339,20 @@ public class Paint {
     */
    private static final int CURSOR_OPT_MAX_VALUE = CURSOR_AT;

    /**
     * Mask for hyphen edits that happen at the end of a line. Keep in sync with the definition in
     * Minikin's Hyphenator.h.
     * @hide
     */
    public static final int HYPHENEDIT_MASK_END_OF_LINE = 0x07;

    /**
     * Mask for hyphen edits that happen at the start of a line. Keep in sync with the definition in
     * Minikin's Hyphenator.h.
     * @hide
     */
    public static final int HYPHENEDIT_MASK_START_OF_LINE = 0x03 << 3;

    /**
     * The Style specifies if the primitive being drawn is filled, stroked, or
     * both (in the same color). The default is FILL.
@@ -1540,7 +1554,8 @@ public class Paint {
     * Set a hyphen edit on the paint (causes a hyphen to be added to text when
     * measured or drawn).
     *
     * @param hyphen 0 for no edit, 1 for adding a hyphen (other values in future)
     * @param hyphen 0 for no edit, 1 for adding a hyphen at the end, etc.
     *        Definition of various values are in the HyphenEdit class in Minikin's Hyphenator.h.
     *
     * @hide
     */
+1 −0
Original line number Diff line number Diff line
@@ -187,6 +187,7 @@ hwui_c_includes += \
    external/skia/src/effects \
    external/skia/src/image \
    external/skia/src/utils \
    external/icu/icu4c/source/common \
    external/harfbuzz_ng/src \
    external/freetype/include