Sk2DPathEffect.h revision 4bbdeac58cc928dc66296bde3bd06e78070d96b7
18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */
78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef Sk2DPathEffect_DEFINED
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define Sk2DPathEffect_DEFINED
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1118dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com#include "SkPath.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPathEffect.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMatrix.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
156806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.orgclass SK_API Sk2DPathEffect : public SkPathEffect {
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    Sk2DPathEffect(const SkMatrix& mat);
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
19548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual bool filterPath(SkPath*, const SkPath&,
204bbdeac58cc928dc66296bde3bd06e78070d96b7reed@google.com                            SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
22ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Sk2DPathEffect)
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    /** New virtual, to be overridden by subclasses.
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        This is called once from filterPath, and provides the
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        uv parameter bounds for the path. Subsequent calls to
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        next() will receive u and v values within these bounds,
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        and then a call to end() will signal the end of processing.
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    */
31548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual void begin(const SkIRect& uvBounds, SkPath* dst) const;
32548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) const;
33548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual void end(SkPath* dst) const;
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    /** Low-level virtual called per span of locations in the u-direction.
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        The default implementation calls next() repeatedly with each
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        location.
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    */
39548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual void nextSpan(int u, int v, int ucount, SkPath* dst) const;
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    const SkMatrix& getMatrix() const { return fMatrix; }
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // protected so that subclasses can call this during unflattening
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    Sk2DPathEffect(SkFlattenableReadBuffer&);
4554924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkMatrix    fMatrix, fInverse;
4990bf427001fd4f6d9fcee88911deb015aeb4ab7cmike@reedtribe.org    bool        fMatrixIsInvertible;
5090bf427001fd4f6d9fcee88911deb015aeb4ab7cmike@reedtribe.org
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // illegal
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    Sk2DPathEffect(const Sk2DPathEffect&);
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    Sk2DPathEffect& operator=(const Sk2DPathEffect&);
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    friend class Sk2DPathEffectBlitter;
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkPathEffect INHERITED;
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
596806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.orgclass SK_API SkLine2DPathEffect : public Sk2DPathEffect {
60d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.compublic:
61d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SkLine2DPathEffect(SkScalar width, const SkMatrix& matrix)
62d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    : Sk2DPathEffect(matrix), fWidth(width) {}
63d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
64548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual bool filterPath(SkPath* dst, const SkPath& src,
654bbdeac58cc928dc66296bde3bd06e78070d96b7reed@google.com                            SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
66d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
67d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLine2DPathEffect)
68d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
69d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.comprotected:
70548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual void nextSpan(int u, int v, int ucount, SkPath*) const SK_OVERRIDE;
71d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
72d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SkLine2DPathEffect(SkFlattenableReadBuffer&);
73d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
74d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
75d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
76d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.comprivate:
77d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SkScalar fWidth;
78d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
79d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    typedef Sk2DPathEffect INHERITED;
80d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com};
81d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
826806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.orgclass SK_API SkPath2DPathEffect : public Sk2DPathEffect {
8318dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.compublic:
8418dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    /**
8518dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com     *  Stamp the specified path to fill the shape, using the matrix to define
8618dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com     *  the latice.
8718dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com     */
8818dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    SkPath2DPathEffect(const SkMatrix&, const SkPath&);
89fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
90ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath2DPathEffect)
9118dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
9218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.comprotected:
9318dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    SkPath2DPathEffect(SkFlattenableReadBuffer& buffer);
9454924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
9518dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
96548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com    virtual void next(const SkPoint&, int u, int v, SkPath*) const SK_OVERRIDE;
9718dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
9818dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.comprivate:
9918dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    SkPath  fPath;
10018dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
10118dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    typedef Sk2DPathEffect INHERITED;
10218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com};
10318dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
105