package com.codigoparallevar.minicards; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import androidx.annotation.NonNull; import com.codigoparallevar.minicards.types.functional.Tuple2; public class ScrolledCanvas { private final Canvas canvas; private final int xOrig; private final int yOrig; public ScrolledCanvas(Canvas canvas, Tuple2 viewOrigin) { this.canvas = canvas; this.xOrig = viewOrigin.item1; this.yOrig = viewOrigin.item2; } public void drawLine(float startX, float startY, float stopX, float stopY, @NonNull Paint paint) { canvas.drawLine(startX - xOrig, startY - yOrig, stopX - xOrig, stopY - yOrig, paint); } public void drawRect(@NonNull Rect r, @NonNull Paint paint) { canvas.drawRect(r.left - xOrig, r.top - yOrig, r.right - xOrig, r.bottom - yOrig, paint); } public void drawCircle(float cx, float cy, float radius, @NonNull Paint paint) { canvas.drawCircle(cx - xOrig, cy - yOrig, radius, paint); } public void drawPath(@NonNull Path path, @NonNull Paint paint) { Path offsetPath = new Path(path); offsetPath.offset(-xOrig, -yOrig); canvas.drawPath(offsetPath, paint); } public void drawCenteredText(String text, int x, int y, Paint paint) { paint.setTextAlign(Paint.Align.LEFT); Rect r = new Rect(); paint.getTextBounds(text, 0, text.length(), r); x = x + (int) (r.width() / 2f - r.left); y = y + (int) (r.height() / 2f - r.bottom); drawText(text, x, y, paint); } public void drawText(String text, int x, int y, Paint paint) { canvas.drawText(text, x - xOrig, y - yOrig, paint); } }