87 lines
2.4 KiB
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);
|
|
}
|
|
}
|