mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
135 lines
4.8 KiB
Java
135 lines
4.8 KiB
Java
package com.google.android.material.shadow;
|
|
|
|
import android.graphics.Canvas;
|
|
import android.graphics.LinearGradient;
|
|
import android.graphics.Matrix;
|
|
import android.graphics.Paint;
|
|
import android.graphics.Path;
|
|
import android.graphics.RadialGradient;
|
|
import android.graphics.RectF;
|
|
import android.graphics.Region;
|
|
import android.graphics.Shader;
|
|
import androidx.core.graphics.ColorUtils;
|
|
import androidx.core.view.ViewCompat;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public class ShadowRenderer {
|
|
private static final int COLOR_ALPHA_END = 0;
|
|
private static final int COLOR_ALPHA_MIDDLE = 20;
|
|
private static final int COLOR_ALPHA_START = 68;
|
|
private final Paint cornerShadowPaint;
|
|
private final Paint edgeShadowPaint;
|
|
private final Path scratch;
|
|
private int shadowEndColor;
|
|
private int shadowMiddleColor;
|
|
private final Paint shadowPaint;
|
|
private int shadowStartColor;
|
|
private final Paint transparentPaint;
|
|
private static final int[] edgeColors = new int[3];
|
|
private static final float[] edgePositions = {0.0f, 0.5f, 1.0f};
|
|
private static final int[] cornerColors = new int[4];
|
|
private static final float[] cornerPositions = {0.0f, 0.0f, 0.5f, 1.0f};
|
|
|
|
public Paint getShadowPaint() {
|
|
return this.shadowPaint;
|
|
}
|
|
|
|
public ShadowRenderer() {
|
|
this(ViewCompat.MEASURED_STATE_MASK);
|
|
}
|
|
|
|
public ShadowRenderer(int i) {
|
|
this.scratch = new Path();
|
|
Paint paint = new Paint();
|
|
this.transparentPaint = paint;
|
|
this.shadowPaint = new Paint();
|
|
setShadowColor(i);
|
|
paint.setColor(0);
|
|
Paint paint2 = new Paint(4);
|
|
this.cornerShadowPaint = paint2;
|
|
paint2.setStyle(Paint.Style.FILL);
|
|
this.edgeShadowPaint = new Paint(paint2);
|
|
}
|
|
|
|
public void setShadowColor(int i) {
|
|
this.shadowStartColor = ColorUtils.setAlphaComponent(i, COLOR_ALPHA_START);
|
|
this.shadowMiddleColor = ColorUtils.setAlphaComponent(i, 20);
|
|
this.shadowEndColor = ColorUtils.setAlphaComponent(i, 0);
|
|
this.shadowPaint.setColor(this.shadowStartColor);
|
|
}
|
|
|
|
public void drawEdgeShadow(Canvas canvas, Matrix matrix, RectF rectF, int i) {
|
|
rectF.bottom += i;
|
|
rectF.offset(0.0f, -i);
|
|
int[] iArr = edgeColors;
|
|
iArr[0] = this.shadowEndColor;
|
|
iArr[1] = this.shadowMiddleColor;
|
|
iArr[2] = this.shadowStartColor;
|
|
this.edgeShadowPaint.setShader(new LinearGradient(rectF.left, rectF.top, rectF.left, rectF.bottom, iArr, edgePositions, Shader.TileMode.CLAMP));
|
|
canvas.save();
|
|
canvas.concat(matrix);
|
|
canvas.drawRect(rectF, this.edgeShadowPaint);
|
|
canvas.restore();
|
|
}
|
|
|
|
public void drawCornerShadow(Canvas canvas, Matrix matrix, RectF rectF, int i, float f, float f2) {
|
|
boolean z = f2 < 0.0f;
|
|
Path path = this.scratch;
|
|
if (z) {
|
|
int[] iArr = cornerColors;
|
|
iArr[0] = 0;
|
|
iArr[1] = this.shadowEndColor;
|
|
iArr[2] = this.shadowMiddleColor;
|
|
iArr[3] = this.shadowStartColor;
|
|
} else {
|
|
path.rewind();
|
|
path.moveTo(rectF.centerX(), rectF.centerY());
|
|
path.arcTo(rectF, f, f2);
|
|
path.close();
|
|
float f3 = -i;
|
|
rectF.inset(f3, f3);
|
|
int[] iArr2 = cornerColors;
|
|
iArr2[0] = 0;
|
|
iArr2[1] = this.shadowStartColor;
|
|
iArr2[2] = this.shadowMiddleColor;
|
|
iArr2[3] = this.shadowEndColor;
|
|
}
|
|
float width = rectF.width() / 2.0f;
|
|
if (width <= 0.0f) {
|
|
return;
|
|
}
|
|
float f4 = 1.0f - (i / width);
|
|
float[] fArr = cornerPositions;
|
|
fArr[1] = f4;
|
|
fArr[2] = ((1.0f - f4) / 2.0f) + f4;
|
|
this.cornerShadowPaint.setShader(new RadialGradient(rectF.centerX(), rectF.centerY(), width, cornerColors, fArr, Shader.TileMode.CLAMP));
|
|
canvas.save();
|
|
canvas.concat(matrix);
|
|
canvas.scale(1.0f, rectF.height() / rectF.width());
|
|
if (!z) {
|
|
canvas.clipPath(path, Region.Op.DIFFERENCE);
|
|
canvas.drawPath(path, this.transparentPaint);
|
|
}
|
|
canvas.drawArc(rectF, f, f2, true, this.cornerShadowPaint);
|
|
canvas.restore();
|
|
}
|
|
|
|
public void drawInnerCornerShadow(Canvas canvas, Matrix matrix, RectF rectF, int i, float f, float f2, float[] fArr) {
|
|
if (f2 > 0.0f) {
|
|
f += f2;
|
|
f2 = -f2;
|
|
}
|
|
drawCornerShadow(canvas, matrix, rectF, i, f, f2);
|
|
Path path = this.scratch;
|
|
path.rewind();
|
|
path.moveTo(fArr[0], fArr[1]);
|
|
path.arcTo(rectF, f, f2);
|
|
path.close();
|
|
canvas.save();
|
|
canvas.concat(matrix);
|
|
canvas.scale(1.0f, rectF.height() / rectF.width());
|
|
canvas.drawPath(path, this.transparentPaint);
|
|
canvas.drawPath(path, this.shadowPaint);
|
|
canvas.restore();
|
|
}
|
|
}
|