Add LastLineSpacingSpan
This commit is contained in:
parent
eca93dd27c
commit
06c2763ac6
@ -0,0 +1,43 @@
|
||||
package io.noties.markwon.core.spans;
|
||||
|
||||
import android.graphics.Paint;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.LineHeightSpan;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Px;
|
||||
|
||||
/**
|
||||
* @since 4.0.0-SNAPSHOT
|
||||
*/
|
||||
public class LastLineSpacingSpan implements LineHeightSpan {
|
||||
|
||||
@NonNull
|
||||
public static LastLineSpacingSpan create(@Px int spacing) {
|
||||
return new LastLineSpacingSpan(spacing);
|
||||
}
|
||||
|
||||
private final int spacing;
|
||||
|
||||
public LastLineSpacingSpan(@Px int spacing) {
|
||||
this.spacing = spacing;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, Paint.FontMetricsInt fm) {
|
||||
if (selfEnd(end, text, this)) {
|
||||
// let's just add what we want
|
||||
fm.descent += spacing;
|
||||
fm.bottom += spacing;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean selfEnd(int end, CharSequence text, Object span) {
|
||||
// this is some kind of interesting magic here... only the last
|
||||
// span will receive correct _end_ argument, but previous spans
|
||||
// receive it tilted by one (1). Most likely it's just a new-line character... and
|
||||
// if needed we could check for that
|
||||
final int spanEnd = ((Spanned) text).getSpanEnd(span);
|
||||
return spanEnd == end || spanEnd == end - 1;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user