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); } }