bool SVGPathParserFactory::getTotalLengthOfSVGPathByteStream(SVGPathByteStream* stream, float& totalLength) { ASSERT(stream); if (stream->isEmpty()) return false; PathTraversalState traversalState(PathTraversalState::TraversalTotalLength); SVGPathTraversalStateBuilder* builder = globalSVGPathTraversalStateBuilder(traversalState, 0); OwnPtr<SVGPathByteStreamSource> source = SVGPathByteStreamSource::create(stream); SVGPathParser* parser = globalSVGPathParser(source.get(), builder); bool ok = parser->parsePathDataFromSource(NormalizedParsing); totalLength = builder->totalLength(); parser->cleanup(); return ok; }
bool getTotalLengthOfSVGPathByteStream(SVGPathByteStream* stream, float& totalLength) { ASSERT(stream); if (stream->isEmpty()) return false; PathTraversalState traversalState(PathTraversalState::Action::TotalLength); SVGPathTraversalStateBuilder* builder = globalSVGPathTraversalStateBuilder(traversalState, 0); auto source = std::make_unique<SVGPathByteStreamSource>(stream); SVGPathParser* parser = globalSVGPathParser(source.get(), builder); bool ok = parser->parsePathDataFromSource(NormalizedParsing); totalLength = builder->totalLength(); parser->cleanup(); return ok; }
bool getTotalLengthOfSVGPathByteStream(const SVGPathByteStream* stream, float& totalLength) { ASSERT(stream); if (stream->isEmpty()) return false; PathTraversalState traversalState(PathTraversalState::TraversalTotalLength); SVGPathTraversalStateBuilder* builder = globalSVGPathTraversalStateBuilder(traversalState, 0); SVGPathByteStreamSource source(stream); SVGPathParser* parser = globalSVGPathParser(&source, builder); bool ok = parser->parsePathDataFromSource(NormalizedParsing); totalLength = builder->totalLength(); parser->cleanup(); return ok; }