Rabbit-R1/android (non root)/java/sources/com/google/android/material/shape/ShapeableDelegate.java
2024-05-21 17:08:36 -04:00

78 lines
2.5 KiB
Java

package com.google.android.material.shape;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Build;
import android.view.View;
import com.google.android.material.canvas.CanvasCompat;
/* loaded from: classes2.dex */
public abstract class ShapeableDelegate {
ShapeAppearanceModel shapeAppearanceModel;
boolean forceCompatClippingEnabled = false;
boolean offsetZeroCornerEdgeBoundsEnabled = false;
RectF maskBounds = new RectF();
final Path shapePath = new Path();
abstract void invalidateClippingMethod(View view);
public boolean isForceCompatClippingEnabled() {
return this.forceCompatClippingEnabled;
}
abstract boolean shouldUseCompatClipping();
public static ShapeableDelegate create(View view) {
if (Build.VERSION.SDK_INT >= 33) {
return new ShapeableDelegateV33(view);
}
return new ShapeableDelegateV22(view);
}
public void setForceCompatClippingEnabled(View view, boolean z) {
if (z != this.forceCompatClippingEnabled) {
this.forceCompatClippingEnabled = z;
invalidateClippingMethod(view);
}
}
public void setOffsetZeroCornerEdgeBoundsEnabled(View view, boolean z) {
this.offsetZeroCornerEdgeBoundsEnabled = z;
invalidateClippingMethod(view);
}
public void onShapeAppearanceChanged(View view, ShapeAppearanceModel shapeAppearanceModel) {
this.shapeAppearanceModel = shapeAppearanceModel;
updateShapePath();
invalidateClippingMethod(view);
}
public void onMaskChanged(View view, RectF rectF) {
this.maskBounds = rectF;
updateShapePath();
invalidateClippingMethod(view);
}
private void updateShapePath() {
if (!isMaskBoundsValid() || this.shapeAppearanceModel == null) {
return;
}
ShapeAppearancePathProvider.getInstance().calculatePath(this.shapeAppearanceModel, 1.0f, this.maskBounds, this.shapePath);
}
private boolean isMaskBoundsValid() {
return this.maskBounds.left <= this.maskBounds.right && this.maskBounds.top <= this.maskBounds.bottom;
}
public void maybeClip(Canvas canvas, CanvasCompat.CanvasOperation canvasOperation) {
if (shouldUseCompatClipping() && !this.shapePath.isEmpty()) {
canvas.save();
canvas.clipPath(this.shapePath);
canvasOperation.run(canvas);
canvas.restore();
return;
}
canvasOperation.run(canvas);
}
}