ADD week 5
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
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: classes.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);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 22) {
|
||||
return new ShapeableDelegateV22(view);
|
||||
}
|
||||
return new ShapeableDelegateV14();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user