1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef __NS_SVGPATHDATAPARSER_H__
- #define __NS_SVGPATHDATAPARSER_H__
- #include "mozilla/Attributes.h"
- #include "mozilla/gfx/Point.h"
- #include "nsSVGDataParser.h"
- namespace mozilla {
- class SVGPathData;
- } // namespace mozilla
- ////////////////////////////////////////////////////////////////////////
- // nsSVGPathDataParser: a simple recursive descent parser that builds
- // DOMSVGPathSegs from path data strings. The grammar for path data
- // can be found in SVG CR 20001102, chapter 8.
- class nsSVGPathDataParser : public nsSVGDataParser
- {
- public:
- nsSVGPathDataParser(const nsAString& aValue,
- mozilla::SVGPathData* aList)
- : nsSVGDataParser(aValue),
- mPathSegList(aList)
- {
- MOZ_ASSERT(aList, "null path data");
- }
- bool Parse();
- private:
- bool ParseCoordPair(float& aX, float& aY);
- bool ParseFlag(bool& aFlag);
- bool ParsePath();
- bool IsStartOfSubPath() const;
- bool ParseSubPath();
-
- bool ParseSubPathElements();
- bool ParseSubPathElement(char16_t aCommandType,
- bool aAbsCoords);
- bool ParseMoveto();
- bool ParseClosePath();
- bool ParseLineto(bool aAbsCoords);
- bool ParseHorizontalLineto(bool aAbsCoords);
- bool ParseVerticalLineto(bool aAbsCoords);
- bool ParseCurveto(bool aAbsCoords);
- bool ParseSmoothCurveto(bool aAbsCoords);
- bool ParseQuadBezierCurveto(bool aAbsCoords);
- bool ParseSmoothQuadBezierCurveto(bool aAbsCoords);
- bool ParseEllipticalArc(bool aAbsCoords);
- mozilla::SVGPathData * const mPathSegList;
- };
- class nsSVGArcConverter
- {
- typedef mozilla::gfx::Point Point;
- public:
- nsSVGArcConverter(const Point& from,
- const Point& to,
- const Point& radii,
- double angle,
- bool largeArcFlag,
- bool sweepFlag);
- bool GetNextSegment(Point* cp1, Point* cp2, Point* to);
- protected:
- int32_t mNumSegs, mSegIndex;
- double mTheta, mDelta, mT;
- double mSinPhi, mCosPhi;
- double mRx, mRy;
- Point mFrom, mC;
- };
- #endif // __NS_SVGPATHDATAPARSER_H__
|