d6b9d93a58ae290e84f32d7d4d67fa839070096b
[WebKit-https.git] / WebCore / svg / SVGTextContentElement.h
1 /*
2     Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3                   2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
6
7     This library is free software; you can redistribute it and/or
8     modify it under the terms of the GNU Library General Public
9     License as published by the Free Software Foundation; either
10     version 2 of the License, or (at your option) any later version.
11
12     This library is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15     Library General Public License for more details.
16
17     You should have received a copy of the GNU Library General Public License
18     along with this library; see the file COPYING.LIB.  If not, write to
19     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20     Boston, MA 02110-1301, USA.
21 */
22
23 #ifndef SVGTextContentElement_h
24 #define SVGTextContentElement_h
25
26 #if ENABLE(SVG)
27 #include "SVGExternalResourcesRequired.h"
28 #include "SVGLangSpace.h"
29 #include "SVGStyledElement.h"
30 #include "SVGTests.h"
31
32 namespace WebCore {
33
34     extern char SVGTextContentElementIdentifier[];
35
36     class SVGLength;
37
38     class SVGTextContentElement : public SVGStyledElement,
39                                   public SVGTests,
40                                   public SVGLangSpace,
41                                   public SVGExternalResourcesRequired {
42     public:
43         enum SVGLengthAdjustType {
44             LENGTHADJUST_UNKNOWN            = 0,
45             LENGTHADJUST_SPACING            = 1,
46             LENGTHADJUST_SPACINGANDGLYPHS   = 2
47         };
48
49         SVGTextContentElement(const QualifiedName&, Document*);
50         virtual ~SVGTextContentElement();
51         
52         virtual bool isValid() const { return SVGTests::isValid(); }
53         virtual bool isTextContent() const { return true; }
54
55         long getNumberOfChars() const;
56         float getComputedTextLength() const;
57         float getSubStringLength(long charnum, long nchars, ExceptionCode&) const;
58         FloatPoint getStartPositionOfChar(long charnum, ExceptionCode&) const;
59         FloatPoint getEndPositionOfChar(long charnum, ExceptionCode&) const;
60         FloatRect getExtentOfChar(long charnum, ExceptionCode&) const;
61         float getRotationOfChar(long charnum, ExceptionCode&) const;
62         long getCharNumAtPosition(const FloatPoint&) const;
63         void selectSubString(long charnum, long nchars, ExceptionCode&) const;
64
65         virtual void parseMappedAttribute(MappedAttribute*);
66
67         bool isKnownAttribute(const QualifiedName&);
68
69     protected:
70         virtual const SVGElement* contextElement() const { return this; }
71
72     private:
73         ANIMATED_PROPERTY_DECLARATIONS(SVGTextContentElement, SVGTextContentElementIdentifier, SVGNames::textLengthAttrString, SVGLength, TextLength, textLength)
74         ANIMATED_PROPERTY_DECLARATIONS(SVGTextContentElement, SVGTextContentElementIdentifier, SVGNames::lengthAdjustAttrString, int, LengthAdjust, lengthAdjust)
75     };
76
77 } // namespace WebCore
78
79 #endif // ENABLE(SVG)
80 #endif