11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef Sk2DPathEffect_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define Sk2DPathEffect_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkPath.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPathEffect.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMatrix.h" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass Sk2DPathEffect : public SkPathEffect { 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sk2DPathEffect(const SkMatrix& mat); 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // overrides 221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual bool filterPath(SkPath*, const SkPath&, SkScalar* width) SK_OVERRIDE; 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // overrides from SkFlattenable 251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual Factory getFactory() SK_OVERRIDE; 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** New virtual, to be overridden by subclasses. 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project This is called once from filterPath, and provides the 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uv parameter bounds for the path. Subsequent calls to 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project next() will receive u and v values within these bounds, 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project and then a call to end() will signal the end of processing. 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void begin(const SkIRect& uvBounds, SkPath* dst); 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void next(const SkPoint& loc, int u, int v, SkPath* dst); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void end(SkPath* dst); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Low-level virtual called per span of locations in the u-direction. 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project The default implementation calls next() repeatedly with each 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project location. 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void nextSpan(int u, int v, int ucount, SkPath* dst); 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkMatrix& getMatrix() const { return fMatrix; } 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // protected so that subclasses can call this during unflattening 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sk2DPathEffect(SkFlattenableReadBuffer&); 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SK_DECLARE_FLATTENABLE_REGISTRAR() 511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMatrix fMatrix, fInverse; 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sk2DPathEffect(const Sk2DPathEffect&); 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Sk2DPathEffect& operator=(const Sk2DPathEffect&); 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static SkFlattenable* CreateProc(SkFlattenableReadBuffer&); 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class Sk2DPathEffectBlitter; 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkPathEffect INHERITED; 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkPath2DPathEffect : public Sk2DPathEffect { 651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic: 661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger /** 671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Stamp the specified path to fill the shape, using the matrix to define 681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * the latice. 691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkPath2DPathEffect(const SkMatrix&, const SkPath&); 711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static SkFlattenable* CreateProc(SkFlattenableReadBuffer&); 731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SK_DECLARE_FLATTENABLE_REGISTRAR() 751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprotected: 771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkPath2DPathEffect(SkFlattenableReadBuffer& buffer); 781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual Factory getFactory() SK_OVERRIDE; 811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void next(const SkPoint&, int u, int v, SkPath* dst) SK_OVERRIDE; 821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate: 841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkPath fPath; 851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef Sk2DPathEffect INHERITED; 871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 91