Signal-Android/app/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/OvalGuideRenderer.java

87 lines
2.4 KiB
Java

package org.thoughtcrime.securesms.imageeditor.renderers;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Parcel;
import androidx.annotation.ColorRes;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.imageeditor.Bounds;
import org.thoughtcrime.securesms.imageeditor.Renderer;
import org.thoughtcrime.securesms.imageeditor.RendererContext;
/**
* Renders an oval inside of the {@link Bounds}.
* <p>
* Hit tests outside of the bounds.
*/
public final class OvalGuideRenderer implements Renderer {
private final @ColorRes int ovalGuideColor;
private final Paint paint;
private final RectF dst = new RectF();
@Override
public void render(@NonNull RendererContext rendererContext) {
rendererContext.save();
Canvas canvas = rendererContext.canvas;
Context context = rendererContext.context;
int stroke = context.getResources().getDimensionPixelSize(R.dimen.oval_guide_stroke_width);
float halfStroke = stroke / 2f;
this.paint.setStrokeWidth(stroke);
paint.setColor(ContextCompat.getColor(context, ovalGuideColor));
rendererContext.mapRect(dst, Bounds.FULL_BOUNDS);
dst.set(dst.left + halfStroke, dst.top + halfStroke, dst.right - halfStroke, dst.bottom - halfStroke);
rendererContext.canvasMatrix.setToIdentity();
canvas.drawOval(dst, paint);
rendererContext.restore();
}
public OvalGuideRenderer(@ColorRes int color) {
this.ovalGuideColor = color;
this.paint = new Paint();
this.paint.setStyle(Paint.Style.STROKE);
this.paint.setAntiAlias(true);
}
@Override
public boolean hitTest(float x, float y) {
return !Bounds.contains(x, y);
}
public static final Creator<OvalGuideRenderer> CREATOR = new Creator<OvalGuideRenderer>() {
@Override
public @NonNull OvalGuideRenderer createFromParcel(@NonNull Parcel in) {
return new OvalGuideRenderer(in.readInt());
}
@Override
public @NonNull OvalGuideRenderer[] newArray(int size) {
return new OvalGuideRenderer[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(ovalGuideColor);
}
}