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