/* * Copyright 2008 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkPathMeasure.h" #include "SkContourMeasure.h" SkPathMeasure::SkPathMeasure() {} SkPathMeasure::SkPathMeasure(const SkPath& path, bool forceClosed, SkScalar resScale) : fIter(path, forceClosed, resScale) { fContour = fIter.next(); } SkPathMeasure::~SkPathMeasure() {} void SkPathMeasure::setPath(const SkPath* path, bool forceClosed) { fIter.reset(path ? *path : SkPath(), forceClosed); fContour = fIter.next(); } SkScalar SkPathMeasure::getLength() { return fContour ? fContour->length() : 0; } bool SkPathMeasure::getPosTan(SkScalar distance, SkPoint* position, SkVector* tangent) { return fContour && fContour->getPosTan(distance, position, tangent); } bool SkPathMeasure::getMatrix(SkScalar distance, SkMatrix* matrix, MatrixFlags flags) { return fContour && fContour->getMatrix(distance, matrix, (SkContourMeasure::MatrixFlags)flags); } bool SkPathMeasure::getSegment(SkScalar startD, SkScalar stopD, SkPath* dst, bool startWithMoveTo) { return fContour && fContour->getSegment(startD, stopD, dst, startWithMoveTo); } bool SkPathMeasure::isClosed() { return fContour && fContour->isClosed(); } bool SkPathMeasure::nextContour() { fContour = fIter.next(); return !!fContour; } #ifdef SK_DEBUG void SkPathMeasure::dump() {} #endif