mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
78 lines
2.5 KiB
Java
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);
|
|
}
|
|
}
|