Sk2DPathEffect.h revision 6806fe87e0b39e283291c1a1c7d1d864230aa2aa
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
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides
20fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com    virtual bool filterPath(SkPath*, const SkPath&, SkStrokeRec*) 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    */
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void begin(const SkIRect& uvBounds, SkPath* dst);
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void next(const SkPoint& loc, int u, int v, SkPath* dst);
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void end(SkPath* dst);
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    */
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void nextSpan(int u, int v, int ucount, SkPath* dst);
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
64d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    virtual bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec* rec) SK_OVERRIDE;
65d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
66d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLine2DPathEffect)
67d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
68d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.comprotected:
69d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    virtual void nextSpan(int u, int v, int ucount, SkPath* dst) SK_OVERRIDE;
70d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
71d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SkLine2DPathEffect(SkFlattenableReadBuffer&);
72d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
73d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
74d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
75d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.comprivate:
76d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    SkScalar fWidth;
77d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
78d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com    typedef Sk2DPathEffect INHERITED;
79d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com};
80d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com
816806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.orgclass SK_API SkPath2DPathEffect : public Sk2DPathEffect {
8218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.compublic:
8318dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    /**
8418dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com     *  Stamp the specified path to fill the shape, using the matrix to define
8518dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com     *  the latice.
8618dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com     */
8718dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    SkPath2DPathEffect(const SkMatrix&, const SkPath&);
88fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
89ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath2DPathEffect)
9018dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
9118dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.comprotected:
9218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    SkPath2DPathEffect(SkFlattenableReadBuffer& buffer);
9354924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
9418dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
95259210c376700da04d8746df416217d7a78ecff9mike@reedtribe.org    virtual void next(const SkPoint&, int u, int v, SkPath* dst) SK_OVERRIDE;
9618dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
9718dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.comprivate:
9818dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    SkPath  fPath;
9918dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
10018dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com    typedef Sk2DPathEffect INHERITED;
10118dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com};
10218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
104