static void test_patch(SkCanvas* canvas, const SkBitmap& bm, SkScalar scale) { SkCubicBoundary cubic; set_cubic(cubic.fPts + 0, 0, 0, 100, 0, scale); set_cubic(cubic.fPts + 3, 100, 0, 100, 100, scale); set_cubic(cubic.fPts + 6, 100, 100, 0, 100, -scale); set_cubic(cubic.fPts + 9, 0, 100, 0, 0, 0); SkBoundaryPatch patch; patch.setBoundary(&cubic); const int Rows = 16; const int Cols = 16; SkPoint pts[Rows * Cols]; patch.evalPatch(pts, Rows, Cols); SkPaint paint; paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setStrokeWidth(1); paint.setStrokeCap(SkPaint::kRound_Cap); canvas->translate(50, 50); canvas->scale(3, 3); SkMeshUtils::Draw(canvas, bm, Rows, Cols, pts, NULL, paint); }
static void test_drag(SkCanvas* canvas, const SkBitmap& bm, const SkPoint& p0, const SkPoint& p1) { SkCubicBoundary cubic; set_cubic(cubic.fPts + 0, 0, 0, 100, 0, 0); set_cubic(cubic.fPts + 3, 100, 0, 100, 100, 0); set_cubic(cubic.fPts + 6, 100, 100, 0, 100, 0); set_cubic(cubic.fPts + 9, 0, 100, 0, 0, 0); #if 0 cubic.fPts[1] += p1 - p0; cubic.fPts[2] += p1 - p0; #else SkScalar dx = p1.fX - p0.fX; if (dx > 0) dx = 0; SkScalar dy = p1.fY - p0.fY; if (dy > 0) dy = 0; cubic.fPts[1].fY += dy; cubic.fPts[2].fY += dy; cubic.fPts[10].fX += dx; cubic.fPts[11].fX += dx; #endif SkBoundaryPatch patch; patch.setBoundary(&cubic); const int Rows = 16; const int Cols = 16; SkPoint pts[Rows * Cols]; patch.evalPatch(pts, Rows, Cols); SkPaint paint; paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setStrokeWidth(1); paint.setStrokeCap(SkPaint::kRound_Cap); canvas->translate(50, 50); canvas->scale(3, 3); SkAutoCanvasRestore acr(canvas, true); SkRect r = { 0, 0, 100, 100 }; canvas->clipRect(r); SkMeshUtils::Draw(canvas, bm, Rows, Cols, pts, NULL, paint); }
void test_patch(SkCanvas* canvas, const SkBitmap& bm, SkScalar scale) { const float w = bm.width(); const float h = bm.height(); SkCubicBoundary cubic; set_cubic(cubic.fPts + 0, 0, 0, w, 0, scale); set_cubic(cubic.fPts + 3, w, 0, w, h, scale); set_cubic(cubic.fPts + 6, w, h, 0, h, -scale); set_cubic(cubic.fPts + 9, 0, h, 0, 0, scale); SkBoundaryPatch patch; patch.setBoundary(&cubic); const int Rows = 16; const int Cols = 16; SkPoint pts[Rows * Cols]; patch.evalPatch(pts, Rows, Cols); SkPaint paint; paint.setAntiAlias(true); paint.setFilterBitmap(true); SkMeshUtils::Draw(canvas, bm, Rows, Cols, pts, NULL, paint); }