Sk1DPathEffect.h revision e28b917669fc4677b2f1c0a08c4711b651cbf1a1
1381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 2381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org/* 3381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org * Copyright 2006 The Android Open Source Project 4381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org * 5381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org * Use of this source code is governed by a BSD-style license that can be 6381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org * found in the LICENSE file. 7381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org */ 8381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 9381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 10381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org#ifndef Sk1DPathEffect_DEFINED 11381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org#define Sk1DPathEffect_DEFINED 12381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 13381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org#include "SkPathEffect.h" 14381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org#include "SkPath.h" 15381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 16381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgclass SkPathMeasure; 17381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 18381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org// This class is not exported to java. 19381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgclass Sk1DPathEffect : public SkPathEffect { 20381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgpublic: 21381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // override from SkPathEffect 22381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width); 23381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 24381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgprotected: 25381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org /** Called at the start of each contour, returns the initial offset 26381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org into that contour. 27381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org */ 28381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org virtual SkScalar begin(SkScalar contourLength) = 0; 29381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org /** Called with the current distance along the path, with the current matrix 30381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org for the point/tangent at the specified distance. 31381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org Return the distance to travel for the next call. If return <= 0, then that 32381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org contour is done. 33381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org */ 34381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) = 0; 35381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 36381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgprivate: 37381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org typedef SkPathEffect INHERITED; 38381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org}; 39381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 40381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgclass SkPath1DPathEffect : public Sk1DPathEffect { 41381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgpublic: 42381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org enum Style { 43381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org kTranslate_Style, // translate the shape to each position 44381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org kRotate_Style, // rotate the shape about its center 45381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org kMorph_Style, // transform each point, and turn lines into curves 46381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 47381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org kStyleCount 48381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org }; 49381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 50381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org /** Dash by replicating the specified path. 51381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org @param path The path to replicate (dash) 52381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org @param advance The space between instances of path 53381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org @param phase distance (mod advance) along path for its initial position 54381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org @param style how to transform path at each point (based on the current 55381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org position and tangent) 56381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org */ 57381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style); 58381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 59381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // override from SkPathEffect 60381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width); 61381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 62 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 63 return SkNEW_ARGS(SkPath1DPathEffect, (buffer)); 64 } 65 66protected: 67 SkPath1DPathEffect(SkFlattenableReadBuffer& buffer); 68 69 // overrides from Sk1DPathEffect 70 virtual SkScalar begin(SkScalar contourLength); 71 virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&); 72 // overrides from SkFlattenable 73 virtual void flatten(SkFlattenableWriteBuffer& ); 74 virtual Factory getFactory() { return CreateProc; } 75 76private: 77 SkPath fPath; // copied from constructor 78 SkScalar fAdvance; // copied from constructor 79 SkScalar fInitialOffset; // computed from phase 80 Style fStyle; // copied from constructor 81 82 typedef Sk1DPathEffect INHERITED; 83}; 84 85 86#endif 87