void SkPDFCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* srcPtr, const SkRect& dst, const SkPaint* paint, SkCanvas::SrcRectConstraint constraint) { SkRect bounds = SkRect::Make(bitmap.bounds()); SkRect src = srcPtr ? *srcPtr : bounds; SkAutoCanvasRestore autoCanvasRestore(this, true); if (src != bounds) { this->clipRect(dst); } this->concat(SkMatrix::MakeRectToRect(src, dst, SkMatrix::kFill_ScaleToFit)); this->drawBitmap(bitmap, 0, 0, paint); }
static void checkerboard( SkCanvas* canvas, int w, int h, int size, SkColor c1, SkColor c2) { SkAutoCanvasRestore autoCanvasRestore(canvas, true); canvas->clipRect(SkRect::MakeWH(SkIntToScalar(w), SkIntToScalar(h))); canvas->drawColor(c1); SkPaint paint; paint.setColor(c2); SkScalar s = SkIntToScalar(size); for (int y = 0; y < h; y += size) { SkScalar ty = SkIntToScalar(y); bool oddRow = (y % (2 * size)) != 0; for (int x = oddRow ? size : 0; x < w; x += (2 * size)) { SkScalar tx = SkIntToScalar(x); canvas->drawRect(SkRect::MakeXYWH(tx, ty, s, s), paint); } } }
static void color_wheel_native(SkCanvas* canvas) { SkAutoCanvasRestore autoCanvasRestore(canvas, true); canvas->translate(0.5f * SCALE, 0.5f * SCALE); SkPaint p; p.setAntiAlias(false); p.setColor(SK_ColorWHITE); canvas->drawCircle(0.0f, 0.0f, SCALE * 0.5f, p); const double sqrt_3_over_2 = 0.8660254037844387; const SkScalar Z = 0.0f; const SkScalar D = 0.3f * SkIntToScalar(SCALE); const SkScalar X = SkDoubleToScalar(D * sqrt_3_over_2); const SkScalar Y = D * SK_ScalarHalf; sk_tool_utils::set_portable_typeface(&p, nullptr, SkTypeface::kBold); p.setTextSize(0.28125f * SCALE); draw_center_letter('K', &p, SK_ColorBLACK, Z, Z, canvas); draw_center_letter('R', &p, SK_ColorRED, Z, D, canvas); draw_center_letter('G', &p, SK_ColorGREEN, -X, -Y, canvas); draw_center_letter('B', &p, SK_ColorBLUE, X, -Y, canvas); draw_center_letter('C', &p, SK_ColorCYAN, Z, -D, canvas); draw_center_letter('M', &p, SK_ColorMAGENTA, X, Y, canvas); draw_center_letter('Y', &p, SK_ColorYELLOW, -X, Y, canvas); }
static void draw_rotated_image(SkCanvas* canvas, const SkImage* image) { sk_tool_utils::draw_checkerboard(canvas, SkColorSetRGB(156, 154, 156), SK_ColorWHITE, 12); if (!image) { return; } SkRect rect = SkRect::MakeLTRB(-68.0f, -68.0f, 68.0f, 68.0f); SkPaint paint; paint.setColor(SkColorSetRGB(49, 48, 49)); SkScalar scale = SkTMin(128.0f / image->width(), 128.0f / image->height()); SkScalar point[2] = {-0.5f * image->width(), -0.5f * image->height()}; for (int j = 0; j < 4; ++j) { for (int i = 0; i < 4; ++i) { SkAutoCanvasRestore autoCanvasRestore(canvas, true); canvas->translate(96.0f + 192.0f * i, 96.0f + 192.0f * j); canvas->rotate(18.0f * (i + 4 * j)); canvas->drawRect(rect, paint); canvas->scale(scale, scale); canvas->drawImage(image, point[0], point[1]); } } }