Skip to content

Commit 8306ce4

Browse files
committed
fix(android): faster StaticLayout
1 parent ab8e6da commit 8306ce4

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.akylas.canvas;
2+
3+
import android.os.Build;
4+
import android.graphics.Typeface;
5+
import android.graphics.Paint;
6+
import android.text.TextPaint;
7+
import android.text.Layout;
8+
import java.lang.CharSequence;
9+
10+
public class StaticLayout {
11+
12+
public static android.text.StaticLayout createStaticLayout(CharSequence source, TextPaint paint, int width,
13+
Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad) {
14+
15+
if (Build.VERSION.SDK_INT >= 24) {
16+
android.text.StaticLayout.Builder builder = android.text.StaticLayout.Builder
17+
.obtain(source, 0, source.length(), paint, width)
18+
.setBreakStrategy(android.text.Layout.BREAK_STRATEGY_SIMPLE).setAlignment(align)
19+
.setLineSpacing(spacingadd, spacingmult).setIncludePad(includepad);
20+
if (Build.VERSION.SDK_INT >= 26) {
21+
builder = builder.setJustificationMode(android.text.Layout.JUSTIFICATION_MODE_NONE);
22+
}
23+
return builder.build();
24+
} else {
25+
return new android.text.StaticLayout(source, paint, width, align, spacingmult, spacingadd, includepad);
26+
}
27+
}
28+
29+
public static android.text.StaticLayout createStaticLayout(CharSequence source, Paint paint, int width,
30+
Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad) {
31+
return createStaticLayout(source, new TextPaint(paint), width, align, spacingmult, spacingadd, includepad);
32+
}
33+
}

Diff for: src/canvas.android.ts

+6-21
Original file line numberDiff line numberDiff line change
@@ -476,29 +476,14 @@ export class StaticLayout {
476476
return this._native;
477477
}
478478
constructor(text: any, paint: android.graphics.Paint, width: number, align = LayoutAlignment.ALIGN_NORMAL, spacingmult = 1, spacingadd = 0, includepad = true) {
479-
paint = paint['_native'] ? (paint as any).getNative() : paint;
480-
if (!(text instanceof java.lang.CharSequence) && !(typeof text === 'string')) {
479+
paint = (paint as any).getNative ? (paint as any).getNative() : paint;
480+
481+
if (typeof text === 'boolean' || typeof text === 'number') {
482+
// in case it is a number or a boolean
481483
text = text + '';
482484
}
483-
if (getSDK() >=24) {
484-
let builder = android.text.StaticLayout.Builder.obtain(
485-
text,
486-
0,
487-
typeof text.length === 'function' ? text.length() : text.length,
488-
paint instanceof android.text.TextPaint ? paint : new android.text.TextPaint(paint),
489-
width
490-
)
491-
.setBreakStrategy(android.text.Layout.BREAK_STRATEGY_SIMPLE)
492-
.setAlignment(align)
493-
.setLineSpacing(spacingadd, spacingmult)
494-
.setIncludePad(includepad);
495-
if (getSDK() >=26) {
496-
builder = builder.setJustificationMode(android.text.Layout.JUSTIFICATION_MODE_NONE);
497-
}
498-
this._native = builder.build();
499-
} else {
500-
this._native = new android.text.StaticLayout(text, paint instanceof android.text.TextPaint ? paint : new android.text.TextPaint(paint), width, align, spacingmult, spacingadd, includepad);
501-
}
485+
this._native = com.akylas.canvas.StaticLayout.createStaticLayout(text, paint, width, align, spacingmult, spacingadd, includepad);
486+
502487
return new Proxy(this, this);
503488
}
504489
get(target, name, receiver) {

0 commit comments

Comments
 (0)