|
1 |
|
2 /* |
|
3 * Copyright 2006 The Android Open Source Project |
|
4 * |
|
5 * Use of this source code is governed by a BSD-style license that can be |
|
6 * found in the LICENSE file. |
|
7 */ |
|
8 |
|
9 |
|
10 #include "SkRasterizer.h" |
|
11 #include "SkDraw.h" |
|
12 #include "SkMaskFilter.h" |
|
13 #include "SkPath.h" |
|
14 |
|
15 bool SkRasterizer::rasterize(const SkPath& fillPath, const SkMatrix& matrix, |
|
16 const SkIRect* clipBounds, SkMaskFilter* filter, |
|
17 SkMask* mask, SkMask::CreateMode mode) const { |
|
18 SkIRect storage; |
|
19 |
|
20 if (clipBounds && filter && SkMask::kJustRenderImage_CreateMode != mode) { |
|
21 SkIPoint margin; |
|
22 SkMask srcM, dstM; |
|
23 |
|
24 srcM.fFormat = SkMask::kA8_Format; |
|
25 srcM.fBounds.set(0, 0, 1, 1); |
|
26 srcM.fImage = NULL; |
|
27 if (!filter->filterMask(&dstM, srcM, matrix, &margin)) { |
|
28 return false; |
|
29 } |
|
30 storage = *clipBounds; |
|
31 storage.inset(-margin.fX, -margin.fY); |
|
32 clipBounds = &storage; |
|
33 } |
|
34 |
|
35 return this->onRasterize(fillPath, matrix, clipBounds, mask, mode); |
|
36 } |
|
37 |
|
38 /* Our default implementation of the virtual method just scan converts |
|
39 */ |
|
40 bool SkRasterizer::onRasterize(const SkPath& fillPath, const SkMatrix& matrix, |
|
41 const SkIRect* clipBounds, |
|
42 SkMask* mask, SkMask::CreateMode mode) const { |
|
43 SkPath devPath; |
|
44 |
|
45 fillPath.transform(matrix, &devPath); |
|
46 return SkDraw::DrawToMask(devPath, clipBounds, NULL, NULL, mask, mode, |
|
47 SkPaint::kFill_Style); |
|
48 } |