fix tricky regression noticed by Vyacheslav Tokarev on Google Reader.
[kdelibs.git] / khtml / svg / SVGGlyphElement.h
blob802e17d7e9012d43ecff327ba0ce5d27f9fca0f8
1 /*
2 Copyright (C) 2007 Eric Seidel <eric@webkit.org>
3 Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
21 #ifndef SVGGlyphElement_h
22 #define SVGGlyphElement_h
24 #if ENABLE(SVG_FONTS)
25 #include "SVGStyledElement.h"
27 #include <limits>
28 #include "Path.h"
30 namespace khtml
32 class AtomicString;
35 namespace WebCore {
37 using khtml::AtomicString;
38 struct SVGFontData;
40 // Describe a SVG <glyph> element
41 struct SVGGlyphIdentifier {
42 enum Orientation {
43 Vertical,
44 Horizontal,
45 Both
48 // SVG Font depends on exactly this order.
49 enum ArabicForm {
50 None = 0,
51 Isolated,
52 Terminal,
53 Initial,
54 Medial
57 SVGGlyphIdentifier()
58 : isValid(false)
59 , orientation(Both)
60 , arabicForm(None)
61 , priority(0)
62 , nameLength(0)
63 , horizontalAdvanceX(0.0f)
64 , verticalOriginX(0.0f)
65 , verticalOriginY(0.0f)
66 , verticalAdvanceY(0.0f)
70 // Used to mark our float properties as "to be inherited from SVGFontData"
71 static float inheritedValue()
73 static float s_inheritedValue = std::numeric_limits<float>::infinity();
74 return s_inheritedValue;
77 bool operator==(const SVGGlyphIdentifier& other) const
79 return isValid == other.isValid &&
80 orientation == other.orientation &&
81 arabicForm == other.arabicForm &&
82 glyphName == other.glyphName &&
83 horizontalAdvanceX == other.horizontalAdvanceX &&
84 verticalOriginX == other.verticalOriginX &&
85 verticalOriginY == other.verticalOriginY &&
86 verticalAdvanceY == other.verticalAdvanceY &&
87 pathData.debugString() == other.pathData.debugString() &&
88 languages == other.languages;
91 bool isValid : 1;
93 Orientation orientation : 2;
94 ArabicForm arabicForm : 3;
95 int priority;
96 size_t nameLength;
97 String glyphName;
99 float horizontalAdvanceX;
100 float verticalOriginX;
101 float verticalOriginY;
102 float verticalAdvanceY;
104 Path pathData;
105 Vector<String> languages;
108 class SVGGlyphElement : public SVGStyledElement {
109 public:
110 SVGGlyphElement(const QualifiedName&, Document*);
111 virtual ~SVGGlyphElement();
113 virtual void insertedIntoDocument();
114 virtual void removedFromDocument();
116 virtual bool rendererIsNeeded(RenderStyle*) { return false; }
118 SVGGlyphIdentifier buildGlyphIdentifier() const;
120 // Helper function used by SVGFont
121 static void inheritUnspecifiedAttributes(SVGGlyphIdentifier&, const SVGFontData*);
122 static String querySVGFontLanguage(const SVGElement*);
124 // Helper function shared between SVGGlyphElement & SVGMissingGlyphElement
125 static SVGGlyphIdentifier buildGenericGlyphIdentifier(const SVGElement*);
128 } // namespace WebCore
130 #endif // ENABLE(SVG_FONTS)
131 #endif