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)