- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
660 lines
26 KiB
Java
660 lines
26 KiB
Java
package androidx.core.graphics;
|
|
|
|
import android.graphics.Path;
|
|
import android.util.Log;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RestrictTo;
|
|
import com.fyber.inneractive.sdk.bidder.TokenParametersOuterClass$TokenParameters;
|
|
import com.ironsource.mediationsdk.utils.IronSourceConstants;
|
|
import java.util.ArrayList;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class PathParser {
|
|
private static final String LOGTAG = "PathParser";
|
|
|
|
public static class ExtractFloatResult {
|
|
int mEndPosition;
|
|
boolean mEndWithNegOrDot;
|
|
}
|
|
|
|
public static float[] copyOfRange(float[] fArr, int i, int i2) {
|
|
if (i > i2) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
int length = fArr.length;
|
|
if (i < 0 || i > length) {
|
|
throw new ArrayIndexOutOfBoundsException();
|
|
}
|
|
int i3 = i2 - i;
|
|
int min = Math.min(i3, length - i);
|
|
float[] fArr2 = new float[i3];
|
|
System.arraycopy(fArr, i, fArr2, 0, min);
|
|
return fArr2;
|
|
}
|
|
|
|
@NonNull
|
|
public static Path createPathFromPathData(@NonNull String str) {
|
|
Path path = new Path();
|
|
try {
|
|
PathDataNode.nodesToPath(createNodesFromPathData(str), path);
|
|
return path;
|
|
} catch (RuntimeException e) {
|
|
throw new RuntimeException("Error in parsing " + str, e);
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static PathDataNode[] createNodesFromPathData(@NonNull String str) {
|
|
ArrayList arrayList = new ArrayList();
|
|
int i = 0;
|
|
int i2 = 1;
|
|
while (i2 < str.length()) {
|
|
int nextStart = nextStart(str, i2);
|
|
String trim = str.substring(i, nextStart).trim();
|
|
if (!trim.isEmpty()) {
|
|
addNode(arrayList, trim.charAt(0), getFloats(trim));
|
|
}
|
|
i = nextStart;
|
|
i2 = nextStart + 1;
|
|
}
|
|
if (i2 - i == 1 && i < str.length()) {
|
|
addNode(arrayList, str.charAt(i), new float[0]);
|
|
}
|
|
return (PathDataNode[]) arrayList.toArray(new PathDataNode[0]);
|
|
}
|
|
|
|
@NonNull
|
|
public static PathDataNode[] deepCopyNodes(@NonNull PathDataNode[] pathDataNodeArr) {
|
|
PathDataNode[] pathDataNodeArr2 = new PathDataNode[pathDataNodeArr.length];
|
|
for (int i = 0; i < pathDataNodeArr.length; i++) {
|
|
pathDataNodeArr2[i] = new PathDataNode(pathDataNodeArr[i]);
|
|
}
|
|
return pathDataNodeArr2;
|
|
}
|
|
|
|
public static boolean canMorph(@Nullable PathDataNode[] pathDataNodeArr, @Nullable PathDataNode[] pathDataNodeArr2) {
|
|
if (pathDataNodeArr == null || pathDataNodeArr2 == null || pathDataNodeArr.length != pathDataNodeArr2.length) {
|
|
return false;
|
|
}
|
|
for (int i = 0; i < pathDataNodeArr.length; i++) {
|
|
if (pathDataNodeArr[i].mType != pathDataNodeArr2[i].mType || pathDataNodeArr[i].mParams.length != pathDataNodeArr2[i].mParams.length) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void updateNodes(@NonNull PathDataNode[] pathDataNodeArr, @NonNull PathDataNode[] pathDataNodeArr2) {
|
|
for (int i = 0; i < pathDataNodeArr2.length; i++) {
|
|
pathDataNodeArr[i].mType = pathDataNodeArr2[i].mType;
|
|
for (int i2 = 0; i2 < pathDataNodeArr2[i].mParams.length; i2++) {
|
|
pathDataNodeArr[i].mParams[i2] = pathDataNodeArr2[i].mParams[i2];
|
|
}
|
|
}
|
|
}
|
|
|
|
private static int nextStart(String str, int i) {
|
|
while (i < str.length()) {
|
|
char charAt = str.charAt(i);
|
|
if (((charAt - 'A') * (charAt - 'Z') <= 0 || (charAt - 'a') * (charAt - 'z') <= 0) && charAt != 'e' && charAt != 'E') {
|
|
return i;
|
|
}
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
private static void addNode(ArrayList<PathDataNode> arrayList, char c, float[] fArr) {
|
|
arrayList.add(new PathDataNode(c, fArr));
|
|
}
|
|
|
|
private static float[] getFloats(String str) {
|
|
if (str.charAt(0) == 'z' || str.charAt(0) == 'Z') {
|
|
return new float[0];
|
|
}
|
|
try {
|
|
float[] fArr = new float[str.length()];
|
|
ExtractFloatResult extractFloatResult = new ExtractFloatResult();
|
|
int length = str.length();
|
|
int i = 1;
|
|
int i2 = 0;
|
|
while (i < length) {
|
|
extract(str, i, extractFloatResult);
|
|
int i3 = extractFloatResult.mEndPosition;
|
|
if (i < i3) {
|
|
fArr[i2] = Float.parseFloat(str.substring(i, i3));
|
|
i2++;
|
|
}
|
|
i = extractFloatResult.mEndWithNegOrDot ? i3 : i3 + 1;
|
|
}
|
|
return copyOfRange(fArr, 0, i2);
|
|
} catch (NumberFormatException e) {
|
|
throw new RuntimeException("error in parsing \"" + str + "\"", e);
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */
|
|
/* JADX WARN: Removed duplicated region for block: B:14:0x0039 A[LOOP:0: B:2:0x0007->B:14:0x0039, LOOP_END] */
|
|
/* JADX WARN: Removed duplicated region for block: B:15:0x003c A[SYNTHETIC] */
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
private static void extract(java.lang.String r8, int r9, androidx.core.graphics.PathParser.ExtractFloatResult r10) {
|
|
/*
|
|
r0 = 0
|
|
r10.mEndWithNegOrDot = r0
|
|
r1 = r9
|
|
r2 = r0
|
|
r3 = r2
|
|
r4 = r3
|
|
L7:
|
|
int r5 = r8.length()
|
|
if (r1 >= r5) goto L3c
|
|
char r5 = r8.charAt(r1)
|
|
r6 = 32
|
|
r7 = 1
|
|
if (r5 == r6) goto L29
|
|
r6 = 69
|
|
if (r5 == r6) goto L35
|
|
r6 = 101(0x65, float:1.42E-43)
|
|
if (r5 == r6) goto L35
|
|
switch(r5) {
|
|
case 44: goto L29;
|
|
case 45: goto L2c;
|
|
case 46: goto L22;
|
|
default: goto L21;
|
|
}
|
|
L21:
|
|
goto L33
|
|
L22:
|
|
if (r3 != 0) goto L27
|
|
r2 = r0
|
|
r3 = r7
|
|
goto L36
|
|
L27:
|
|
r10.mEndWithNegOrDot = r7
|
|
L29:
|
|
r2 = r0
|
|
r4 = r7
|
|
goto L36
|
|
L2c:
|
|
if (r1 == r9) goto L33
|
|
if (r2 != 0) goto L33
|
|
r10.mEndWithNegOrDot = r7
|
|
goto L29
|
|
L33:
|
|
r2 = r0
|
|
goto L36
|
|
L35:
|
|
r2 = r7
|
|
L36:
|
|
if (r4 == 0) goto L39
|
|
goto L3c
|
|
L39:
|
|
int r1 = r1 + 1
|
|
goto L7
|
|
L3c:
|
|
r10.mEndPosition = r1
|
|
return
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: androidx.core.graphics.PathParser.extract(java.lang.String, int, androidx.core.graphics.PathParser$ExtractFloatResult):void");
|
|
}
|
|
|
|
public static void interpolatePathDataNodes(@NonNull PathDataNode[] pathDataNodeArr, float f, @NonNull PathDataNode[] pathDataNodeArr2, @NonNull PathDataNode[] pathDataNodeArr3) {
|
|
if (!interpolatePathDataNodes(pathDataNodeArr, pathDataNodeArr2, pathDataNodeArr3, f)) {
|
|
throw new IllegalArgumentException("Can't interpolate between two incompatible pathData");
|
|
}
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
@Deprecated
|
|
public static boolean interpolatePathDataNodes(@NonNull PathDataNode[] pathDataNodeArr, @NonNull PathDataNode[] pathDataNodeArr2, @NonNull PathDataNode[] pathDataNodeArr3, float f) {
|
|
if (pathDataNodeArr.length != pathDataNodeArr2.length || pathDataNodeArr2.length != pathDataNodeArr3.length) {
|
|
throw new IllegalArgumentException("The nodes to be interpolated and resulting nodes must have the same length");
|
|
}
|
|
if (!canMorph(pathDataNodeArr2, pathDataNodeArr3)) {
|
|
return false;
|
|
}
|
|
for (int i = 0; i < pathDataNodeArr.length; i++) {
|
|
pathDataNodeArr[i].interpolatePathDataNode(pathDataNodeArr2[i], pathDataNodeArr3[i], f);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void nodesToPath(@NonNull PathDataNode[] pathDataNodeArr, @NonNull Path path) {
|
|
float[] fArr = new float[6];
|
|
char c = 'm';
|
|
for (PathDataNode pathDataNode : pathDataNodeArr) {
|
|
PathDataNode.addCommand(path, fArr, c, pathDataNode.mType, pathDataNode.mParams);
|
|
c = pathDataNode.mType;
|
|
}
|
|
}
|
|
|
|
public static class PathDataNode {
|
|
private final float[] mParams;
|
|
private char mType;
|
|
|
|
@NonNull
|
|
public float[] getParams() {
|
|
return this.mParams;
|
|
}
|
|
|
|
public char getType() {
|
|
return this.mType;
|
|
}
|
|
|
|
public PathDataNode(char c, float[] fArr) {
|
|
this.mType = c;
|
|
this.mParams = fArr;
|
|
}
|
|
|
|
public PathDataNode(PathDataNode pathDataNode) {
|
|
this.mType = pathDataNode.mType;
|
|
float[] fArr = pathDataNode.mParams;
|
|
this.mParams = PathParser.copyOfRange(fArr, 0, fArr.length);
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
@Deprecated
|
|
public static void nodesToPath(@NonNull PathDataNode[] pathDataNodeArr, @NonNull Path path) {
|
|
PathParser.nodesToPath(pathDataNodeArr, path);
|
|
}
|
|
|
|
public void interpolatePathDataNode(@NonNull PathDataNode pathDataNode, @NonNull PathDataNode pathDataNode2, float f) {
|
|
this.mType = pathDataNode.mType;
|
|
int i = 0;
|
|
while (true) {
|
|
float[] fArr = pathDataNode.mParams;
|
|
if (i >= fArr.length) {
|
|
return;
|
|
}
|
|
this.mParams[i] = (fArr[i] * (1.0f - f)) + (pathDataNode2.mParams[i] * f);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */
|
|
public static void addCommand(Path path, float[] fArr, char c, char c2, float[] fArr2) {
|
|
int i;
|
|
int i2;
|
|
int i3;
|
|
float f;
|
|
float f2;
|
|
float f3;
|
|
float f4;
|
|
float f5;
|
|
float f6;
|
|
float f7;
|
|
float f8;
|
|
char c3 = c2;
|
|
boolean z = false;
|
|
float f9 = fArr[0];
|
|
float f10 = fArr[1];
|
|
float f11 = fArr[2];
|
|
float f12 = fArr[3];
|
|
float f13 = fArr[4];
|
|
float f14 = fArr[5];
|
|
switch (c3) {
|
|
case 'A':
|
|
case 'a':
|
|
i = 7;
|
|
i2 = i;
|
|
break;
|
|
case TokenParametersOuterClass$TokenParameters.IGNITEVERSION_FIELD_NUMBER /* 67 */:
|
|
case 'c':
|
|
i = 6;
|
|
i2 = i;
|
|
break;
|
|
case 'H':
|
|
case 'V':
|
|
case 'h':
|
|
case 'v':
|
|
i2 = 1;
|
|
break;
|
|
case 'L':
|
|
case 'M':
|
|
case IronSourceConstants.TROUBLESHOOTING_AD_QUALITY_SDK_NOT_EXIST /* 84 */:
|
|
case 'l':
|
|
case 'm':
|
|
case 't':
|
|
default:
|
|
i2 = 2;
|
|
break;
|
|
case IronSourceConstants.TROUBLESHOOTING_AD_QUALITY_SDK_INITIALIZED_SUCCESSFULLY_EVENT /* 81 */:
|
|
case IronSourceConstants.TROUBLESHOOTING_AD_QUALITY_SDK_FAILED_TO_INITIALIZE_EVENT /* 83 */:
|
|
case 'q':
|
|
case 's':
|
|
i2 = 4;
|
|
break;
|
|
case 'Z':
|
|
case 'z':
|
|
path.close();
|
|
path.moveTo(f13, f14);
|
|
f9 = f13;
|
|
f11 = f9;
|
|
f10 = f14;
|
|
f12 = f10;
|
|
i2 = 2;
|
|
break;
|
|
}
|
|
float f15 = f9;
|
|
float f16 = f10;
|
|
float f17 = f13;
|
|
float f18 = f14;
|
|
int i4 = 0;
|
|
char c4 = c;
|
|
while (i4 < fArr2.length) {
|
|
if (c3 != 'A') {
|
|
if (c3 == 'C') {
|
|
i3 = i4;
|
|
int i5 = i3 + 2;
|
|
int i6 = i3 + 3;
|
|
int i7 = i3 + 4;
|
|
int i8 = i3 + 5;
|
|
path.cubicTo(fArr2[i3], fArr2[i3 + 1], fArr2[i5], fArr2[i6], fArr2[i7], fArr2[i8]);
|
|
f15 = fArr2[i7];
|
|
float f19 = fArr2[i8];
|
|
float f20 = fArr2[i5];
|
|
float f21 = fArr2[i6];
|
|
f16 = f19;
|
|
f12 = f21;
|
|
f11 = f20;
|
|
} else if (c3 == 'H') {
|
|
i3 = i4;
|
|
path.lineTo(fArr2[i3], f16);
|
|
f15 = fArr2[i3];
|
|
} else if (c3 == 'Q') {
|
|
i3 = i4;
|
|
int i9 = i3 + 1;
|
|
int i10 = i3 + 2;
|
|
int i11 = i3 + 3;
|
|
path.quadTo(fArr2[i3], fArr2[i9], fArr2[i10], fArr2[i11]);
|
|
float f22 = fArr2[i3];
|
|
float f23 = fArr2[i9];
|
|
f15 = fArr2[i10];
|
|
f16 = fArr2[i11];
|
|
f11 = f22;
|
|
f12 = f23;
|
|
} else if (c3 == 'V') {
|
|
i3 = i4;
|
|
path.lineTo(f15, fArr2[i3]);
|
|
f16 = fArr2[i3];
|
|
} else if (c3 != 'a') {
|
|
if (c3 != 'c') {
|
|
if (c3 == 'h') {
|
|
path.rLineTo(fArr2[i4], 0.0f);
|
|
f15 += fArr2[i4];
|
|
} else if (c3 != 'q') {
|
|
if (c3 == 'v') {
|
|
path.rLineTo(0.0f, fArr2[i4]);
|
|
f4 = fArr2[i4];
|
|
} else if (c3 == 'L') {
|
|
int i12 = i4 + 1;
|
|
path.lineTo(fArr2[i4], fArr2[i12]);
|
|
f15 = fArr2[i4];
|
|
f16 = fArr2[i12];
|
|
} else if (c3 == 'M') {
|
|
f15 = fArr2[i4];
|
|
f16 = fArr2[i4 + 1];
|
|
if (i4 > 0) {
|
|
path.lineTo(f15, f16);
|
|
} else {
|
|
path.moveTo(f15, f16);
|
|
i3 = i4;
|
|
f18 = f16;
|
|
f17 = f15;
|
|
}
|
|
} else if (c3 == 'S') {
|
|
if (c4 == 'c' || c4 == 's' || c4 == 'C' || c4 == 'S') {
|
|
f15 = (f15 * 2.0f) - f11;
|
|
f16 = (f16 * 2.0f) - f12;
|
|
}
|
|
float f24 = f16;
|
|
float f25 = f15;
|
|
int i13 = i4 + 1;
|
|
int i14 = i4 + 2;
|
|
int i15 = i4 + 3;
|
|
path.cubicTo(f25, f24, fArr2[i4], fArr2[i13], fArr2[i14], fArr2[i15]);
|
|
f = fArr2[i4];
|
|
f2 = fArr2[i13];
|
|
f15 = fArr2[i14];
|
|
f16 = fArr2[i15];
|
|
f11 = f;
|
|
f12 = f2;
|
|
} else if (c3 == 'T') {
|
|
if (c4 == 'q' || c4 == 't' || c4 == 'Q' || c4 == 'T') {
|
|
f15 = (f15 * 2.0f) - f11;
|
|
f16 = (f16 * 2.0f) - f12;
|
|
}
|
|
int i16 = i4 + 1;
|
|
path.quadTo(f15, f16, fArr2[i4], fArr2[i16]);
|
|
i3 = i4;
|
|
f12 = f16;
|
|
f11 = f15;
|
|
f15 = fArr2[i4];
|
|
f16 = fArr2[i16];
|
|
} else if (c3 == 'l') {
|
|
int i17 = i4 + 1;
|
|
path.rLineTo(fArr2[i4], fArr2[i17]);
|
|
f15 += fArr2[i4];
|
|
f4 = fArr2[i17];
|
|
} else if (c3 == 'm') {
|
|
float f26 = fArr2[i4];
|
|
f15 += f26;
|
|
float f27 = fArr2[i4 + 1];
|
|
f16 += f27;
|
|
if (i4 > 0) {
|
|
path.rLineTo(f26, f27);
|
|
} else {
|
|
path.rMoveTo(f26, f27);
|
|
i3 = i4;
|
|
f18 = f16;
|
|
f17 = f15;
|
|
}
|
|
} else if (c3 == 's') {
|
|
if (c4 == 'c' || c4 == 's' || c4 == 'C' || c4 == 'S') {
|
|
float f28 = f15 - f11;
|
|
f5 = f16 - f12;
|
|
f6 = f28;
|
|
} else {
|
|
f6 = 0.0f;
|
|
f5 = 0.0f;
|
|
}
|
|
int i18 = i4 + 1;
|
|
int i19 = i4 + 2;
|
|
int i20 = i4 + 3;
|
|
path.rCubicTo(f6, f5, fArr2[i4], fArr2[i18], fArr2[i19], fArr2[i20]);
|
|
f = fArr2[i4] + f15;
|
|
f2 = fArr2[i18] + f16;
|
|
f15 += fArr2[i19];
|
|
f3 = fArr2[i20];
|
|
} else if (c3 == 't') {
|
|
if (c4 == 'q' || c4 == 't' || c4 == 'Q' || c4 == 'T') {
|
|
f7 = f15 - f11;
|
|
f8 = f16 - f12;
|
|
} else {
|
|
f8 = 0.0f;
|
|
f7 = 0.0f;
|
|
}
|
|
int i21 = i4 + 1;
|
|
path.rQuadTo(f7, f8, fArr2[i4], fArr2[i21]);
|
|
float f29 = f7 + f15;
|
|
float f30 = f8 + f16;
|
|
f15 += fArr2[i4];
|
|
f16 += fArr2[i21];
|
|
f12 = f30;
|
|
f11 = f29;
|
|
}
|
|
f16 += f4;
|
|
} else {
|
|
int i22 = i4 + 1;
|
|
int i23 = i4 + 2;
|
|
int i24 = i4 + 3;
|
|
path.rQuadTo(fArr2[i4], fArr2[i22], fArr2[i23], fArr2[i24]);
|
|
f = fArr2[i4] + f15;
|
|
f2 = fArr2[i22] + f16;
|
|
f15 += fArr2[i23];
|
|
f3 = fArr2[i24];
|
|
}
|
|
i3 = i4;
|
|
} else {
|
|
int i25 = i4 + 2;
|
|
int i26 = i4 + 3;
|
|
int i27 = i4 + 4;
|
|
int i28 = i4 + 5;
|
|
path.rCubicTo(fArr2[i4], fArr2[i4 + 1], fArr2[i25], fArr2[i26], fArr2[i27], fArr2[i28]);
|
|
f = fArr2[i25] + f15;
|
|
f2 = fArr2[i26] + f16;
|
|
f15 += fArr2[i27];
|
|
f3 = fArr2[i28];
|
|
}
|
|
f16 += f3;
|
|
f11 = f;
|
|
f12 = f2;
|
|
i3 = i4;
|
|
} else {
|
|
int i29 = i4 + 5;
|
|
int i30 = i4 + 6;
|
|
i3 = i4;
|
|
drawArc(path, f15, f16, fArr2[i29] + f15, fArr2[i30] + f16, fArr2[i4], fArr2[i4 + 1], fArr2[i4 + 2], fArr2[i4 + 3] != 0.0f, fArr2[i4 + 4] != 0.0f);
|
|
f15 += fArr2[i29];
|
|
f16 += fArr2[i30];
|
|
}
|
|
i4 = i3 + i2;
|
|
c4 = c2;
|
|
c3 = c4;
|
|
z = false;
|
|
} else {
|
|
i3 = i4;
|
|
int i31 = i3 + 5;
|
|
int i32 = i3 + 6;
|
|
drawArc(path, f15, f16, fArr2[i31], fArr2[i32], fArr2[i3], fArr2[i3 + 1], fArr2[i3 + 2], fArr2[i3 + 3] != 0.0f, fArr2[i3 + 4] != 0.0f);
|
|
f15 = fArr2[i31];
|
|
f16 = fArr2[i32];
|
|
}
|
|
f12 = f16;
|
|
f11 = f15;
|
|
i4 = i3 + i2;
|
|
c4 = c2;
|
|
c3 = c4;
|
|
z = false;
|
|
}
|
|
fArr[z ? 1 : 0] = f15;
|
|
fArr[1] = f16;
|
|
fArr[2] = f11;
|
|
fArr[3] = f12;
|
|
fArr[4] = f17;
|
|
fArr[5] = f18;
|
|
}
|
|
|
|
private static void drawArc(Path path, float f, float f2, float f3, float f4, float f5, float f6, float f7, boolean z, boolean z2) {
|
|
double d;
|
|
double d2;
|
|
double radians = Math.toRadians(f7);
|
|
double cos = Math.cos(radians);
|
|
double sin = Math.sin(radians);
|
|
double d3 = f;
|
|
double d4 = d3 * cos;
|
|
double d5 = f2;
|
|
double d6 = f5;
|
|
double d7 = (d4 + (d5 * sin)) / d6;
|
|
double d8 = ((-f) * sin) + (d5 * cos);
|
|
double d9 = f6;
|
|
double d10 = d8 / d9;
|
|
double d11 = f4;
|
|
double d12 = ((f3 * cos) + (d11 * sin)) / d6;
|
|
double d13 = (((-f3) * sin) + (d11 * cos)) / d9;
|
|
double d14 = d7 - d12;
|
|
double d15 = d10 - d13;
|
|
double d16 = (d7 + d12) / 2.0d;
|
|
double d17 = (d10 + d13) / 2.0d;
|
|
double d18 = (d14 * d14) + (d15 * d15);
|
|
if (d18 == 0.0d) {
|
|
Log.w(PathParser.LOGTAG, " Points are coincident");
|
|
return;
|
|
}
|
|
double d19 = (1.0d / d18) - 0.25d;
|
|
if (d19 < 0.0d) {
|
|
Log.w(PathParser.LOGTAG, "Points are too far apart " + d18);
|
|
float sqrt = (float) (Math.sqrt(d18) / 1.99999d);
|
|
drawArc(path, f, f2, f3, f4, f5 * sqrt, f6 * sqrt, f7, z, z2);
|
|
return;
|
|
}
|
|
double sqrt2 = Math.sqrt(d19);
|
|
double d20 = d14 * sqrt2;
|
|
double d21 = sqrt2 * d15;
|
|
if (z == z2) {
|
|
d = d16 - d21;
|
|
d2 = d17 + d20;
|
|
} else {
|
|
d = d16 + d21;
|
|
d2 = d17 - d20;
|
|
}
|
|
double atan2 = Math.atan2(d10 - d2, d7 - d);
|
|
double atan22 = Math.atan2(d13 - d2, d12 - d) - atan2;
|
|
if (z2 != (atan22 >= 0.0d)) {
|
|
atan22 = atan22 > 0.0d ? atan22 - 6.283185307179586d : atan22 + 6.283185307179586d;
|
|
}
|
|
double d22 = d * d6;
|
|
double d23 = d2 * d9;
|
|
arcToBezier(path, (d22 * cos) - (d23 * sin), (d22 * sin) + (d23 * cos), d6, d9, d3, d5, radians, atan2, atan22);
|
|
}
|
|
|
|
private static void arcToBezier(Path path, double d, double d2, double d3, double d4, double d5, double d6, double d7, double d8, double d9) {
|
|
double d10 = d3;
|
|
int ceil = (int) Math.ceil(Math.abs((d9 * 4.0d) / 3.141592653589793d));
|
|
double cos = Math.cos(d7);
|
|
double sin = Math.sin(d7);
|
|
double cos2 = Math.cos(d8);
|
|
double sin2 = Math.sin(d8);
|
|
double d11 = -d10;
|
|
double d12 = d11 * cos;
|
|
double d13 = d4 * sin;
|
|
double d14 = (d12 * sin2) - (d13 * cos2);
|
|
double d15 = d11 * sin;
|
|
double d16 = d4 * cos;
|
|
double d17 = (sin2 * d15) + (cos2 * d16);
|
|
double d18 = d9 / ceil;
|
|
double d19 = d17;
|
|
double d20 = d14;
|
|
int i = 0;
|
|
double d21 = d5;
|
|
double d22 = d6;
|
|
double d23 = d8;
|
|
while (i < ceil) {
|
|
double d24 = d23 + d18;
|
|
double sin3 = Math.sin(d24);
|
|
double cos3 = Math.cos(d24);
|
|
double d25 = (d + ((d10 * cos) * cos3)) - (d13 * sin3);
|
|
double d26 = d2 + (d10 * sin * cos3) + (d16 * sin3);
|
|
double d27 = (d12 * sin3) - (d13 * cos3);
|
|
double d28 = (sin3 * d15) + (cos3 * d16);
|
|
double d29 = d24 - d23;
|
|
double tan = Math.tan(d29 / 2.0d);
|
|
double sin4 = (Math.sin(d29) * (Math.sqrt(((tan * 3.0d) * tan) + 4.0d) - 1.0d)) / 3.0d;
|
|
double d30 = d21 + (d20 * sin4);
|
|
path.rLineTo(0.0f, 0.0f);
|
|
path.cubicTo((float) d30, (float) (d22 + (d19 * sin4)), (float) (d25 - (sin4 * d27)), (float) (d26 - (sin4 * d28)), (float) d25, (float) d26);
|
|
i++;
|
|
d18 = d18;
|
|
sin = sin;
|
|
d21 = d25;
|
|
d15 = d15;
|
|
cos = cos;
|
|
d23 = d24;
|
|
d19 = d28;
|
|
d20 = d27;
|
|
ceil = ceil;
|
|
d22 = d26;
|
|
d10 = d3;
|
|
}
|
|
}
|
|
}
|
|
|
|
private PathParser() {
|
|
}
|
|
}
|