That fuck shit the fascists are using
1package org.tm.archive.util;
2
3import android.text.Layout;
4
5import androidx.annotation.NonNull;
6
7/**
8 * Utility functions for dealing with {@link Layout}.
9 *
10 * Ported and modified from https://github.com/googlearchive/android-text/tree/master/RoundedBackground-Kotlin
11 */
12public class LayoutUtil {
13 private static final float DEFAULT_LINE_SPACING_EXTRA = 0f;
14
15 private static final float DEFAULT_LINE_SPACING_MULTIPLIER = 1f;
16
17 public static int getLineHeight(@NonNull Layout layout, int line) {
18 return layout.getLineTop(line + 1) - layout.getLineTop(line);
19 }
20
21 public static int getLineTopWithoutPadding(@NonNull Layout layout, int line) {
22 int lineTop = layout.getLineTop(line);
23 if (line == 0) {
24 lineTop -= layout.getTopPadding();
25 }
26 return lineTop;
27 }
28
29 public static int getLineBottomWithoutPadding(@NonNull Layout layout, int line) {
30 int lineBottom = getLineBottomWithoutSpacing(layout, line);
31 if (line == layout.getLineCount() - 1) {
32 lineBottom -= layout.getBottomPadding();
33 }
34 return lineBottom;
35 }
36
37 public static int getLineBottomWithoutSpacing(@NonNull Layout layout, int line) {
38 int lineBottom = layout.getLineBottom(line);
39 boolean isLastLine = line == layout.getLineCount() - 1;
40 float lineSpacingExtra = layout.getSpacingAdd();
41 float lineSpacingMultiplier = layout.getSpacingMultiplier();
42 boolean hasLineSpacing = lineSpacingExtra != DEFAULT_LINE_SPACING_EXTRA || lineSpacingMultiplier != DEFAULT_LINE_SPACING_MULTIPLIER;
43
44 int lineBottomWithoutSpacing;
45 if (!hasLineSpacing || isLastLine) {
46 lineBottomWithoutSpacing = lineBottom;
47 } else {
48 float extra;
49 if (Float.compare(lineSpacingMultiplier, DEFAULT_LINE_SPACING_MULTIPLIER) != 0) {
50 int lineHeight = getLineHeight(layout, line);
51 extra = lineHeight - (lineHeight - lineSpacingExtra) / lineSpacingMultiplier;
52 } else {
53 extra = lineSpacingExtra;
54 }
55
56 lineBottomWithoutSpacing = (int) (lineBottom - extra);
57 }
58
59 return lineBottomWithoutSpacing;
60 }
61}