1/* libs/graphics/sgl/SkRasterizer.cpp
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9**     http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#include "SkRasterizer.h"
19#include "SkDraw.h"
20#include "SkMaskFilter.h"
21#include "SkPath.h"
22
23// do nothing for now, since we don't store anything at flatten time
24SkRasterizer::SkRasterizer(SkFlattenableReadBuffer&) {}
25
26bool SkRasterizer::rasterize(const SkPath& fillPath, const SkMatrix& matrix,
27                             const SkIRect* clipBounds, SkMaskFilter* filter,
28                             SkMask* mask, SkMask::CreateMode mode)
29{
30    SkIRect storage;
31
32    if (clipBounds && filter && SkMask::kJustRenderImage_CreateMode != mode)
33    {
34        SkIPoint    margin;
35        SkMask      srcM, dstM;
36
37        srcM.fFormat = SkMask::kA8_Format;
38        srcM.fBounds.set(0, 0, 1, 1);
39        srcM.fImage = NULL;
40        if (!filter->filterMask(&dstM, srcM, matrix, &margin))
41            return false;
42
43        storage = *clipBounds;
44        storage.inset(-margin.fX, -margin.fY);
45        clipBounds = &storage;
46    }
47
48    return this->onRasterize(fillPath, matrix, clipBounds, mask, mode);
49}
50
51/*  Our default implementation of the virtual method just scan converts
52*/
53bool SkRasterizer::onRasterize(const SkPath& fillPath, const SkMatrix& matrix,
54                             const SkIRect* clipBounds,
55                             SkMask* mask, SkMask::CreateMode mode)
56{
57    SkPath  devPath;
58
59    fillPath.transform(matrix, &devPath);
60    return SkDraw::DrawToMask(devPath, clipBounds, NULL, NULL, mask, mode);
61}
62
63