aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkPDFCanvas.cpp
blob: de3dc93528cb8783653bcfc2e5564847d39da94c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "SkNinePatchIter.h"
#include "SkPDFCanvas.h"
#include "SkPDFDevice.h"

SkPDFCanvas::SkPDFCanvas(const sk_sp<SkPDFDevice>& dev)
    : SkCanvas(dev.get()) {}

SkPDFCanvas::~SkPDFCanvas() {}

void SkPDFCanvas::onDrawBitmapNine(const SkBitmap& bitmap,
                                   const SkIRect& center,
                                   const SkRect& dst,
                                   const SkPaint* paint) {
    SkNinePatchIter iter(bitmap.width(), bitmap.height(), center, dst);
    SkRect srcR, dstR;
    while (iter.next(&srcR, &dstR)) {
        this->drawBitmapRect(bitmap, srcR, dstR, paint);
    }
}

void SkPDFCanvas::onDrawImageNine(const SkImage* image,
                                  const SkIRect& center,
                                  const SkRect& dst,
                     const SkPaint* paint) {
    SkNinePatchIter iter(image->width(), image->height(), center, dst);
    SkRect srcR, dstR;
    while (iter.next(&srcR, &dstR)) {
        this->drawImageRect(image, srcR, dstR, paint);
    }
}

void SkPDFCanvas::onDrawImageRect(const SkImage* image,
                                  const SkRect* srcPtr,
                                  const SkRect& dst,
                                  const SkPaint* paint,
                                  SkCanvas::SrcRectConstraint constraint) {
    SkRect bounds = SkRect::Make(image->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->drawImage(image, 0, 0, paint);
}

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