180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkRasterizer.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDraw.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkMaskFilter.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPath.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkRasterizer::rasterize(const SkPath& fillPath, const SkMatrix& matrix, 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkIRect* clipBounds, SkMaskFilter* filter, 17363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkMask* mask, SkMask::CreateMode mode) const { 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkIRect storage; 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (clipBounds && filter && SkMask::kJustRenderImage_CreateMode != mode) { 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkIPoint margin; 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMask srcM, dstM; 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru srcM.fFormat = SkMask::kA8_Format; 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru srcM.fBounds.set(0, 0, 1, 1); 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru srcM.fImage = NULL; 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (!filter->filterMask(&dstM, srcM, matrix, &margin)) { 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru storage = *clipBounds; 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru storage.inset(-margin.fX, -margin.fY); 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru clipBounds = &storage; 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->onRasterize(fillPath, matrix, clipBounds, mask, mode); 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* Our default implementation of the virtual method just scan converts 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru*/ 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkRasterizer::onRasterize(const SkPath& fillPath, const SkMatrix& matrix, 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkIRect* clipBounds, 42363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkMask* mask, SkMask::CreateMode mode) const { 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPath devPath; 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fillPath.transform(matrix, &devPath); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return SkDraw::DrawToMask(devPath, clipBounds, NULL, NULL, mask, mode, 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPaint::kFill_Style); 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 49