70 lines
3.3 KiB
Java
70 lines
3.3 KiB
Java
package com.squareup.leakcanary.internal;
|
|
|
|
import android.content.res.Resources;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Paint;
|
|
import android.graphics.Path;
|
|
import android.text.SpannableStringBuilder;
|
|
import android.text.style.ReplacementSpan;
|
|
import android.text.style.UnderlineSpan;
|
|
import com.squareup.leakcanary.R;
|
|
|
|
/* loaded from: classes.dex */
|
|
class SquigglySpan extends ReplacementSpan {
|
|
private final float amplitude;
|
|
private final float halfStrokeWidth;
|
|
private final float halfWaveHeight;
|
|
private final Path path;
|
|
private final float periodDegrees;
|
|
private final int referenceColor;
|
|
private final Paint squigglyPaint = new Paint(1);
|
|
private int width;
|
|
|
|
SquigglySpan(Resources resources) {
|
|
this.squigglyPaint.setStyle(Paint.Style.STROKE);
|
|
this.squigglyPaint.setColor(resources.getColor(R.color.leak_canary_leak));
|
|
float dimensionPixelSize = resources.getDimensionPixelSize(R.dimen.leak_canary_squiggly_span_stroke_width);
|
|
this.squigglyPaint.setStrokeWidth(dimensionPixelSize);
|
|
this.halfStrokeWidth = dimensionPixelSize / 2.0f;
|
|
this.amplitude = resources.getDimensionPixelSize(R.dimen.leak_canary_squiggly_span_amplitude);
|
|
this.periodDegrees = resources.getDimensionPixelSize(R.dimen.leak_canary_squiggly_span_period_degrees);
|
|
this.path = new Path();
|
|
this.halfWaveHeight = ((this.amplitude * 2.0f) + dimensionPixelSize) / 2.0f;
|
|
this.referenceColor = resources.getColor(R.color.leak_canary_reference);
|
|
}
|
|
|
|
public static void replaceUnderlineSpans(SpannableStringBuilder spannableStringBuilder, Resources resources) {
|
|
for (UnderlineSpan underlineSpan : (UnderlineSpan[]) spannableStringBuilder.getSpans(0, spannableStringBuilder.length(), UnderlineSpan.class)) {
|
|
int spanStart = spannableStringBuilder.getSpanStart(underlineSpan);
|
|
int spanEnd = spannableStringBuilder.getSpanEnd(underlineSpan);
|
|
spannableStringBuilder.removeSpan(underlineSpan);
|
|
spannableStringBuilder.setSpan(new SquigglySpan(resources), spanStart, spanEnd, 0);
|
|
}
|
|
}
|
|
|
|
private static void squigglyHorizontalPath(Path path, float f, float f2, float f3, float f4, float f5) {
|
|
path.reset();
|
|
path.moveTo(f, f3);
|
|
float f6 = (float) (6.283185307179586d / f5);
|
|
for (float f7 = 0.0f; f7 <= f2 - f; f7 += 1.0f) {
|
|
path.lineTo(f + f7, (float) ((f4 * Math.sin((f6 * f7) + 40.0f)) + f3));
|
|
}
|
|
}
|
|
|
|
@Override // android.text.style.ReplacementSpan
|
|
public void draw(Canvas canvas, CharSequence charSequence, int i, int i2, float f, int i3, int i4, int i5, Paint paint) {
|
|
Path path = this.path;
|
|
float f2 = this.halfStrokeWidth;
|
|
squigglyHorizontalPath(path, f + f2, (this.width + f) - f2, i5 - this.halfWaveHeight, this.amplitude, this.periodDegrees);
|
|
canvas.drawPath(this.path, this.squigglyPaint);
|
|
paint.setColor(this.referenceColor);
|
|
canvas.drawText(charSequence, i, i2, f, i4, paint);
|
|
}
|
|
|
|
@Override // android.text.style.ReplacementSpan
|
|
public int getSize(Paint paint, CharSequence charSequence, int i, int i2, Paint.FontMetricsInt fontMetricsInt) {
|
|
this.width = (int) paint.measureText(charSequence, i, i2);
|
|
return this.width;
|
|
}
|
|
}
|