SkLayerRasterizer.h revision 6b919c353727f72342a20a7aa4ded9c022f5d816
17e70829632f82de15db187845666aaca6e04b792Chris Lattner/* 2fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman * Copyright (C) 2006 The Android Open Source Project 3856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell * 4856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell * Licensed under the Apache License, Version 2.0 (the "License"); 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner * you may not use this file except in compliance with the License. 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner * You may obtain a copy of the License at 7fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman * 8856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell * http://www.apache.org/licenses/LICENSE-2.0 97e70829632f82de15db187845666aaca6e04b792Chris Lattner * 107e70829632f82de15db187845666aaca6e04b792Chris Lattner * Unless required by applicable law or agreed to in writing, software 117e70829632f82de15db187845666aaca6e04b792Chris Lattner * distributed under the License is distributed on an "AS IS" BASIS, 127e70829632f82de15db187845666aaca6e04b792Chris Lattner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137e70829632f82de15db187845666aaca6e04b792Chris Lattner * See the License for the specific language governing permissions and 147e70829632f82de15db187845666aaca6e04b792Chris Lattner * limitations under the License. 157e70829632f82de15db187845666aaca6e04b792Chris Lattner */ 167e70829632f82de15db187845666aaca6e04b792Chris Lattner 177e70829632f82de15db187845666aaca6e04b792Chris Lattner#ifndef SkLayerRasterizer_DEFINED 187e70829632f82de15db187845666aaca6e04b792Chris Lattner#define SkLayerRasterizer_DEFINED 190b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth 200b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "SkRasterizer.h" 217e70829632f82de15db187845666aaca6e04b792Chris Lattner#include "SkDeque.h" 22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "SkScalar.h" 23d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 2417fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnerclass SkPaint; 2517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 2617fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnerclass SkLayerRasterizer : public SkRasterizer { 2717fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnerpublic: 2817fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner SkLayerRasterizer(); 2917fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner virtual ~SkLayerRasterizer(); 3017fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 3117fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner void addLayer(const SkPaint& paint) { 32f8dfef74376dd85f37601855f7519d8256700dabChris Lattner this->addLayer(paint, 0, 0); 337e70829632f82de15db187845666aaca6e04b792Chris Lattner } 3417fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 3517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner /** Add a new layer (above any previous layers) to the rasterizer. 3617fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner The layer will extract those fields that affect the mask from 3717fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner the specified paint, but will not retain a reference to the paint 38f8dfef74376dd85f37601855f7519d8256700dabChris Lattner object itself, so it may be reused without danger of side-effects. 3917fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner */ 4017fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner void addLayer(const SkPaint& paint, SkScalar dx, SkScalar dy); 4117fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 4217fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner // overrides from SkFlattenable 4317fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner virtual Factory getFactory(); 44f8dfef74376dd85f37601855f7519d8256700dabChris Lattner virtual void flatten(SkFlattenableWriteBuffer&); 4517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 4617fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnerprotected: 4717fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner SkLayerRasterizer(SkFlattenableReadBuffer&); 4817fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 4917fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner // override from SkRasterizer 5017fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner virtual bool onRasterize(const SkPath& path, const SkMatrix& matrix, 5117fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner const SkIRect* clipBounds, 5217fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner SkMask* mask, SkMask::CreateMode mode); 537e70829632f82de15db187845666aaca6e04b792Chris Lattner 547e70829632f82de15db187845666aaca6e04b792Chris Lattnerprivate: 5517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner SkDeque fLayers; 5617fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 5717fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner static SkFlattenable* CreateProc(SkFlattenableReadBuffer&); 5817fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner 5917fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner typedef SkRasterizer INHERITED; 6017fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner}; 617e70829632f82de15db187845666aaca6e04b792Chris Lattner 6217fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner#endif 637e70829632f82de15db187845666aaca6e04b792Chris Lattner