SkDashPathEffect.h revision 8b0e8ac5f582de80356019406e2975079bf0829d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2006 The Android Open Source Project
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SkDashPathEffect_DEFINED
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SkDashPathEffect_DEFINED
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "SkPathEffect.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** \class SkDashPathEffect
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SkDashPathEffect is a subclass of SkPathEffect that implements dashing
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)*/
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SK_API SkDashPathEffect : public SkPathEffect {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** intervals: array containing an even number of entries (>=2), with
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         the even indices specifying the length of "on" intervals, and the odd
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         indices specifying the length of "off" intervals.
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        count: number of elements in the intervals array
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        phase: offset into the intervals array (mod the sum of all of the
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)         intervals).
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        For example: if intervals[] = {10, 20}, count = 2, and phase = 25,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)         this will set up a dashed path like so:
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         5 pixels off
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         10 pixels on
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         20 pixels off
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         10 pixels on
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         20 pixels off
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         ...
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        A phase of -5, 25, 55, 85, etc. would all result in the same path,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         because the sum of all the intervals is 30.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Note: only affects stroked paths.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    */
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     bool scaleToFit = false);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~SkDashPathEffect();
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    virtual bool filterPath(SkPath* dst, const SkPath& src,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool asPoints(PointData* results, const SkPath& src,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const SkStrokeRec&, const SkMatrix&,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const SkRect*) const SK_OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual Factory getFactory() const SK_OVERRIDE;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static SkFlattenable* CreateProc(SkReadBuffer&);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected:
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SkDashPathEffect(SkReadBuffer&);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)private:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkScalar*   fIntervals;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int32_t     fCount;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // computed from phase
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkScalar    fInitialDashLength;
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    int32_t     fInitialDashIndex;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkScalar    fIntervalLength;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool        fScaleToFit;
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef SkPathEffect INHERITED;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)