1f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick/*
2f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
3f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * Copyright (C) Research In Motion Limited 2010. All rights reserved.
4f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick *
5f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * This library is free software; you can redistribute it and/or
6f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * modify it under the terms of the GNU Library General Public
7f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * License as published by the Free Software Foundation; either
8f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * version 2 of the License, or (at your option) any later version.
9f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick *
10f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * This library is distributed in the hope that it will be useful,
11f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * but WITHOUT ANY WARRANTY; without even the implied warranty of
12f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * Library General Public License for more details.
14f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick *
15f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * You should have received a copy of the GNU Library General Public License
16f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * along with this library; see the file COPYING.LIB.  If not, write to
17f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick * Boston, MA 02110-1301, USA.
19f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick */
20f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
21f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#ifndef SVGPathTraversalStateBuilder_h
22f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#define SVGPathTraversalStateBuilder_h
23f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
24f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#if ENABLE(SVG)
25f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "FloatPoint.h"
26f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "PathTraversalState.h"
27f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "SVGPathConsumer.h"
28f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
29f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merricknamespace WebCore {
30f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
31f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickclass SVGPathTraversalStateBuilder : public SVGPathConsumer {
32f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickpublic:
33f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    SVGPathTraversalStateBuilder();
34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
35f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    unsigned long pathSegmentIndex();
36f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    void setCurrentTraversalState(PathTraversalState* traversalState) { m_traversalState = traversalState; }
37f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    void setDesiredLength(float);
38f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void incrementPathSegmentCount();
39f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual bool continueConsuming();
40f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void cleanup() { m_traversalState = 0; }
41f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
42f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickprivate:
43f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    // Used in UnalteredParisng/NormalizedParsing modes.
44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void moveTo(const FloatPoint&, bool closed, PathCoordinateMode);
45f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void lineTo(const FloatPoint&, PathCoordinateMode);
46f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void curveToCubic(const FloatPoint&, const FloatPoint&, const FloatPoint&, PathCoordinateMode);
47f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void closePath();
48f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
49f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickprivate:
50f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    // Not used for PathTraversalState.
51f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void lineToHorizontal(float, PathCoordinateMode) { ASSERT_NOT_REACHED(); }
52f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void lineToVertical(float, PathCoordinateMode) { ASSERT_NOT_REACHED(); }
53f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void curveToCubicSmooth(const FloatPoint&, const FloatPoint&, PathCoordinateMode) { ASSERT_NOT_REACHED(); }
54f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void curveToQuadratic(const FloatPoint&, const FloatPoint&, PathCoordinateMode) { ASSERT_NOT_REACHED(); }
55f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void curveToQuadraticSmooth(const FloatPoint&, PathCoordinateMode) { ASSERT_NOT_REACHED(); }
56f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void arcTo(float, float, float, bool, bool, const FloatPoint&, PathCoordinateMode) { ASSERT_NOT_REACHED(); }
57f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
58f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    PathTraversalState* m_traversalState;
59f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    float m_desiredLength;
60f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick};
61f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
62f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} // namespace WebCore
63f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
64f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif // ENABLE(SVG)
65f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif // SVGPathTraversalStateBuilder_h
66