Sk2DPathEffect.h revision d3521f1a8dc07fe84d6a8f2151b0c176ff1ec8ca
1710632d07b13609444626367bebd34c0af3acb6aMikhail Glushenkov 26091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer/* 36091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer * Copyright 2006 The Android Open Source Project 46091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer * 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner * Use of this source code is governed by a BSD-style license that can be 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner * found in the LICENSE file. 76091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer */ 86091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer 927107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling 1027107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#ifndef Sk2DPathEffect_DEFINED 1127107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#define Sk2DPathEffect_DEFINED 1227107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling 1327107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#include "SkPath.h" 146091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer#include "SkPathEffect.h" 156091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer#include "SkMatrix.h" 16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak 17674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszakclass Sk2DPathEffect : public SkPathEffect { 186091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencerpublic: 19d509d0b532ec2358b3f341d4a4cd1411cb8b5db2Chris Lattner Sk2DPathEffect(const SkMatrix& mat); 203467e30edf63b6d8a8d446186674ba9e4b7885a9Bill Wendling 21c835b8c30127d15599de2d614434d39a6cc3ae17Benjamin Kramer // overrides 223f213e7b3a6829a154d4e8ceb7d8689b389bd5dcBenjamin Kramer virtual bool filterPath(SkPath*, const SkPath&, SkScalar* width) SK_OVERRIDE; 2322bd64173981bf1251c4b3bfc684207340534ba3Bill Wendling 24ea59f896a672c2e1ef9f02277bce60257aa60989Bill Wendling SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Sk2DPathEffect) 2558d74910c6b82e622ecbb57d6644d48fec5a5c0fChris Lattner 266091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencerprotected: 276091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer /** New virtual, to be overridden by subclasses. 28d426a642a23a234547cbc7061f5bfec157673249Bill Wendling This is called once from filterPath, and provides the 29702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling uv parameter bounds for the path. Subsequent calls to 30f6670729aabc1fab85238d2b306a1c1767a807bbBill Wendling next() will receive u and v values within these bounds, 31817abdd8b055059e5930a15704b9f52da4236456Bill Wendling and then a call to end() will signal the end of processing. 32817abdd8b055059e5930a15704b9f52da4236456Bill Wendling */ 336dc3781d44e56f0addf28b06232a50f3f9e6b1afBill Wendling virtual void begin(const SkIRect& uvBounds, SkPath* dst); 34c835b8c30127d15599de2d614434d39a6cc3ae17Benjamin Kramer virtual void next(const SkPoint& loc, int u, int v, SkPath* dst); 352c79ecbd704c656178ffa43d5a58ebe3ca188b40Bill Wendling virtual void end(SkPath* dst); 36ad9a9e15595bc9d5ba1ed752caf8572957f77a3dDuncan Sands 37ad9a9e15595bc9d5ba1ed752caf8572957f77a3dDuncan Sands /** Low-level virtual called per span of locations in the u-direction. 381d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling The default implementation calls next() repeatedly with each 3927107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling location. 4027107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling */ 411d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling virtual void nextSpan(int u, int v, int ucount, SkPath* dst); 421d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling 431d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling const SkMatrix& getMatrix() const { return fMatrix; } 44034b94b17006f51722886b0f2283fb6fb19aca1fBill Wendling 456765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling // protected so that subclasses can call this during unflattening 461d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling Sk2DPathEffect(SkFlattenableReadBuffer&); 4773dee180c836270644dfa7d90f9c5ba877567999Bill Wendling virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 48f3d1500ab2c7364d3d0fb73a7e1b8c6339ab48b1Bill Wendling 4973dee180c836270644dfa7d90f9c5ba877567999Bill Wendlingprivate: 5073dee180c836270644dfa7d90f9c5ba877567999Bill Wendling SkMatrix fMatrix, fInverse; 5173dee180c836270644dfa7d90f9c5ba877567999Bill Wendling bool fMatrixIsInvertible; 52f3d1500ab2c7364d3d0fb73a7e1b8c6339ab48b1Bill Wendling 5373dee180c836270644dfa7d90f9c5ba877567999Bill Wendling // illegal 5411d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling Sk2DPathEffect(const Sk2DPathEffect&); 5511d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling Sk2DPathEffect& operator=(const Sk2DPathEffect&); 56f3d1500ab2c7364d3d0fb73a7e1b8c6339ab48b1Bill Wendling 5711d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling friend class Sk2DPathEffectBlitter; 5811d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling typedef SkPathEffect INHERITED; 5911d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling}; 6011d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling 6111d00420e42ba88c3b48cab997965a7be79315e2Bill Wendlingclass SkPath2DPathEffect : public Sk2DPathEffect { 6211d00420e42ba88c3b48cab997965a7be79315e2Bill Wendlingpublic: 63629fb82419d9bfff6ae475363bcce66192dfcc8eBill Wendling /** 645a0eeb5a9d727940b1dbe8dff6e9aa292ada0f6aBill Wendling * Stamp the specified path to fill the shape, using the matrix to define 65480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling * the latice. 66480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling */ 676765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling SkPath2DPathEffect(const SkMatrix&, const SkPath&); 68f6670729aabc1fab85238d2b306a1c1767a807bbBill Wendling 69480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath2DPathEffect) 702253a2f52f3c46ae75cd05f5885acb987bd1d6b6Michael Gottesman 712253a2f52f3c46ae75cd05f5885acb987bd1d6b6Michael Gottesmanprotected: 72480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling SkPath2DPathEffect(SkFlattenableReadBuffer& buffer); 7377226a03dca98e6237c1068f2652fe41bea7b687Diego Novillo virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 74480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling 75480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling virtual void next(const SkPoint&, int u, int v, SkPath* dst) SK_OVERRIDE; 769a419f656e278b96e9dfe739cd63c7bff9a4e1fdQuentin Colombet 77480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendlingprivate: 78480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling SkPath fPath; 79480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling 80143d46476cdcf5b88b9ee18ebd799e5820a2db0eBill Wendling typedef Sk2DPathEffect INHERITED; 81480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling}; 8267ae13575900e8efd056672987249fd0adbf5e73James Molloy 83480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling 84480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling#endif 85480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling