Sk1DPathEffect.h revision 8b0e8ac5f582de80356019406e2975079bf0829d
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright 2006 The Android Open Source Project 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * found in the LICENSE file. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef Sk1DPathEffect_DEFINED 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define Sk1DPathEffect_DEFINED 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "SkPathEffect.h" 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "SkPath.h" 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SkPathMeasure; 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This class is not exported to java. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SK_API Sk1DPathEffect : public SkPathEffect { 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool filterPath(SkPath* dst, const SkPath& src, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SkStrokeRec*, const SkRect*) const SK_OVERRIDE; 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** Called at the start of each contour, returns the initial offset 24591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch into that contour. 2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 26591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch virtual SkScalar begin(SkScalar contourLength) const = 0; 27591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** Called with the current distance along the path, with the current matrix 28591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch for the point/tangent at the specified distance. 29591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch Return the distance to travel for the next call. If return <= 0, then that 30591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch contour is done. 31bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) */ 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual SkScalar next(SkPath* dst, SkScalar dist, SkPathMeasure&) const = 0; 339bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef SkPathEffect INHERITED; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 383c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass SK_API SkPath1DPathEffect : public Sk1DPathEffect { 393c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochpublic: 408abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) enum Style { 418abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) kTranslate_Style, // translate the shape to each position 428abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) kRotate_Style, // rotate the shape about its center 438abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) kMorph_Style, // transform each point, and turn lines into curves 443c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 453c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch kStyleCount 46f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }; 47f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 48f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** Dash by replicating the specified path. 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @param path The path to replicate (dash) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @param advance The space between instances of path 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @param phase distance (mod advance) along path for its initial position 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @param style how to transform path at each point (based on the current 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) position and tangent) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool filterPath(SkPath*, const SkPath&, 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SkStrokeRec*, const SkRect*) const SK_OVERRIDE; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath1DPathEffect) 6102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SkPath1DPathEffect(SkReadBuffer& buffer); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // overrides from Sk1DPathEffect 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual SkScalar begin(SkScalar contourLength) const SK_OVERRIDE; 6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual SkScalar next(SkPath*, SkScalar, SkPathMeasure&) const SK_OVERRIDE; 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private: 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SkPath fPath; // copied from constructor 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SkScalar fAdvance; // copied from constructor 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SkScalar fInitialOffset; // computed from phase 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Style fStyle; // copied from constructor 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) typedef Sk1DPathEffect INHERITED; 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}; 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)