Merge "Take padding information into StaticLayout"
This commit is contained in:
committed by
Android (Google) Code Review
commit
6070e80348
@@ -1915,8 +1915,7 @@ public abstract class Layout {
|
||||
return margin;
|
||||
}
|
||||
|
||||
/* package */
|
||||
static float measurePara(TextPaint paint, CharSequence text, int start, int end,
|
||||
private static float measurePara(TextPaint paint, CharSequence text, int start, int end,
|
||||
TextDirectionHeuristic textDir) {
|
||||
MeasuredText mt = MeasuredText.obtain();
|
||||
TextLine tl = TextLine.obtain();
|
||||
|
||||
@@ -119,6 +119,8 @@ public class StaticLayout extends Layout {
|
||||
b.mLeftIndents = null;
|
||||
b.mRightIndents = null;
|
||||
b.mLocales = null;
|
||||
b.mLeftPaddings = null;
|
||||
b.mRightPaddings = null;
|
||||
nFinishBuilder(b.mNativePtr);
|
||||
sPool.release(b);
|
||||
}
|
||||
@@ -130,6 +132,8 @@ public class StaticLayout extends Layout {
|
||||
mPaint = null;
|
||||
mLeftIndents = null;
|
||||
mRightIndents = null;
|
||||
mLeftPaddings = null;
|
||||
mRightPaddings = null;
|
||||
mMeasuredText.finish();
|
||||
}
|
||||
|
||||
@@ -357,6 +361,28 @@ public class StaticLayout extends Layout {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set available paddings to draw overhanging text on. Arguments are arrays holding the
|
||||
* amount of padding available, one per line, measured in pixels. For lines past the last
|
||||
* element in the array, the last element repeats.
|
||||
*
|
||||
* The individual padding amounts should be non-negative. The result of passing negative
|
||||
* paddings is undefined.
|
||||
*
|
||||
* @param leftPaddings array of amounts of available padding for left margin, in pixels
|
||||
* @param rightPaddings array of amounts of available padding for right margin, in pixels
|
||||
* @return this builder, useful for chaining
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setAvailablePaddings(@Nullable int[] leftPaddings,
|
||||
@Nullable int[] rightPaddings) {
|
||||
mLeftPaddings = leftPaddings;
|
||||
mRightPaddings = rightPaddings;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set paragraph justification mode. The default value is
|
||||
* {@link Layout#JUSTIFICATION_MODE_NONE}. If the last line is too short for justification,
|
||||
@@ -484,6 +510,8 @@ public class StaticLayout extends Layout {
|
||||
private int mHyphenationFrequency;
|
||||
@Nullable private int[] mLeftIndents;
|
||||
@Nullable private int[] mRightIndents;
|
||||
@Nullable private int[] mLeftPaddings;
|
||||
@Nullable private int[] mRightPaddings;
|
||||
private int mJustificationMode;
|
||||
private boolean mAddLastLineLineSpacing;
|
||||
|
||||
@@ -644,6 +672,8 @@ public class StaticLayout extends Layout {
|
||||
|
||||
mLeftIndents = b.mLeftIndents;
|
||||
mRightIndents = b.mRightIndents;
|
||||
mLeftPaddings = b.mLeftPaddings;
|
||||
mRightPaddings = b.mRightPaddings;
|
||||
setJustificationMode(b.mJustificationMode);
|
||||
|
||||
generate(b, b.mIncludePad, b.mIncludePad);
|
||||
@@ -785,7 +815,10 @@ public class StaticLayout extends Layout {
|
||||
firstWidth, firstWidthLineCount, restWidth,
|
||||
variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency,
|
||||
// TODO: Support more justification mode, e.g. letter spacing, stretching.
|
||||
b.mJustificationMode != Layout.JUSTIFICATION_MODE_NONE, indents, mLineCount);
|
||||
b.mJustificationMode != Layout.JUSTIFICATION_MODE_NONE,
|
||||
// TODO: indents and paddings don't need to get passed to native code for every
|
||||
// paragraph. Pass them to native code just once.
|
||||
indents, mLeftPaddings, mRightPaddings, mLineCount);
|
||||
|
||||
// measurement has to be done before performing line breaking
|
||||
// but we don't want to recompute fontmetrics or span ranges the
|
||||
@@ -1506,7 +1539,8 @@ public class StaticLayout extends Layout {
|
||||
@FloatRange(from = 0.0f) float restWidth, @Nullable int[] variableTabStops,
|
||||
int defaultTabStop, @BreakStrategy int breakStrategy,
|
||||
@HyphenationFrequency int hyphenationFrequency, boolean isJustified,
|
||||
@Nullable int[] indents, @IntRange(from = 0) int indentsOffset);
|
||||
@Nullable int[] indents, @Nullable int[] leftPaddings, @Nullable int[] rightPaddings,
|
||||
@IntRange(from = 0) int indentsOffset);
|
||||
|
||||
private static native float nAddStyleRun(
|
||||
/* non zero */ long nativePtr, /* non zero */ long nativePaint,
|
||||
@@ -1594,4 +1628,6 @@ public class StaticLayout extends Layout {
|
||||
|
||||
@Nullable private int[] mLeftIndents;
|
||||
@Nullable private int[] mRightIndents;
|
||||
@Nullable private int[] mLeftPaddings;
|
||||
@Nullable private int[] mRightPaddings;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,8 @@ class JNILineBreakerLineWidth : public minikin::LineBreaker::LineWidthDelegate {
|
||||
static void nSetupParagraph(JNIEnv* env, jclass, jlong nativePtr, jcharArray text, jint length,
|
||||
jfloat firstWidth, jint firstWidthLineLimit, jfloat restWidth,
|
||||
jintArray variableTabStops, jint defaultTabStop, jint strategy, jint hyphenFrequency,
|
||||
jboolean isJustified, jintArray indents, jint indentsOffset) {
|
||||
jboolean isJustified, jintArray indents, jintArray leftPaddings, jintArray rightPaddings,
|
||||
jint indentsOffset) {
|
||||
minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr);
|
||||
b->resize(length);
|
||||
env->GetCharArrayRegion(text, 0, length, b->buffer());
|
||||
@@ -245,7 +246,7 @@ static const JNINativeMethod gMethods[] = {
|
||||
{"nFreeBuilder", "(J)V", (void*) nFreeBuilder},
|
||||
{"nFinishBuilder", "(J)V", (void*) nFinishBuilder},
|
||||
{"nLoadHyphenator", "(Ljava/nio/ByteBuffer;III)J", (void*) nLoadHyphenator},
|
||||
{"nSetupParagraph", "(J[CIFIF[IIIIZ[II)V", (void*) nSetupParagraph},
|
||||
{"nSetupParagraph", "(J[CIFIF[IIIIZ[I[I[II)V", (void*) nSetupParagraph},
|
||||
{"nAddStyleRun", "(JJIIZLjava/lang/String;[J)F", (void*) nAddStyleRun},
|
||||
{"nAddMeasuredRun", "(JII[F)V", (void*) nAddMeasuredRun},
|
||||
{"nAddReplacementRun", "(JIIF)V", (void*) nAddReplacementRun},
|
||||
|
||||
Reference in New Issue
Block a user