-
Notifications
You must be signed in to change notification settings - Fork 0
/
PaintCompatApi14.java
61 lines (56 loc) · 2.07 KB
/
PaintCompatApi14.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package android.support.v4.graphics;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v4.util.Pair;
class PaintCompatApi14 {
private static final String EM_STRING = "m";
private static final String TOFU_STRING = "";
private static final ThreadLocal<Pair<Rect, Rect>> sRectThreadLocal = new ThreadLocal<>();
PaintCompatApi14() {
}
static boolean hasGlyph(Paint paint, String str) {
int length = str.length();
if (length == 1 && Character.isWhitespace(str.charAt(0))) {
return true;
}
float measureText = paint.measureText(TOFU_STRING);
float measureText2 = paint.measureText(EM_STRING);
float measureText3 = paint.measureText(str);
float f = 0.0f;
if (measureText3 == 0.0f) {
return false;
}
if (str.codePointCount(0, str.length()) > 1) {
if (measureText3 > measureText2 * 2.0f) {
return false;
}
int i = 0;
while (i < length) {
int charCount = Character.charCount(str.codePointAt(i)) + i;
f += paint.measureText(str, i, charCount);
i = charCount;
}
if (measureText3 >= f) {
return false;
}
}
if (measureText3 != measureText) {
return true;
}
Pair<Rect, Rect> obtainEmptyRects = obtainEmptyRects();
paint.getTextBounds(TOFU_STRING, 0, 2, (Rect) obtainEmptyRects.first);
paint.getTextBounds(str, 0, length, (Rect) obtainEmptyRects.second);
return !((Rect) obtainEmptyRects.first).equals(obtainEmptyRects.second);
}
private static Pair<Rect, Rect> obtainEmptyRects() {
Pair<Rect, Rect> pair = sRectThreadLocal.get();
if (pair == null) {
Pair<Rect, Rect> pair2 = new Pair<>(new Rect(), new Rect());
sRectThreadLocal.set(pair2);
return pair2;
}
((Rect) pair.first).setEmpty();
((Rect) pair.second).setEmpty();
return pair;
}
}