136 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			136 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: classes.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, 68);
 | |
|         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();
 | |
|     }
 | |
| }
 |