18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2008 Rob Buis <buis@kde.org> 5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or 7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public 8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either 9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version. 10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful, 12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details. 15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License 17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef SVGGlyphElement_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGGlyphElement_h 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "Path.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGStyledElement.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <limits> 30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include <wtf/Forward.h> 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGFontData; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch// Describe a SVG <glyph> element 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstruct SVGGlyphIdentifier { 38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch enum Orientation { 39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Vertical, 40f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Horizontal, 41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Both 42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }; 435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // SVG Font depends on exactly this order. 45f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch enum ArabicForm { 46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch None = 0, 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Isolated, 48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Terminal, 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Initial, 50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Medial 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGGlyphIdentifier() 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch : isValid(false) 55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , orientation(Both) 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , arabicForm(None) 57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , priority(0) 58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , nameLength(0) 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , horizontalAdvanceX(0.0f) 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , verticalOriginX(0.0f) 61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , verticalOriginY(0.0f) 62f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch , verticalAdvanceY(0.0f) 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 64f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Used to mark our float properties as "to be inherited from SVGFontData" 67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static float inheritedValue() 68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static float s_inheritedValue = std::numeric_limits<float>::infinity(); 70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return s_inheritedValue; 71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool operator==(const SVGGlyphIdentifier& other) const 74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return isValid == other.isValid 76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && orientation == other.orientation 77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && arabicForm == other.arabicForm 78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && glyphName == other.glyphName 79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && horizontalAdvanceX == other.horizontalAdvanceX 80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && verticalOriginX == other.verticalOriginX 81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && verticalOriginY == other.verticalOriginY 82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && verticalAdvanceY == other.verticalAdvanceY 83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && languages == other.languages; 84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 86f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool isValid : 1; 87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch unsigned orientation : 2; // Orientation 89f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch unsigned arabicForm : 3; // ArabicForm 90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int priority; 91f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch size_t nameLength; 92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch String glyphName; 93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 94f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch float horizontalAdvanceX; 95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch float verticalOriginX; 96f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch float verticalOriginY; 97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch float verticalAdvanceY; 98f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 99f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Path pathData; 100f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Vector<String> languages; 101f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}; 102f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 103f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGGlyphElement : public SVGStyledElement { 104f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochpublic: 105f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static PassRefPtr<SVGGlyphElement> create(const QualifiedName&, Document*); 106f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 107f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGGlyphIdentifier buildGlyphIdentifier() const; 108f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 109f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Helper function used by SVGFont 110f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static void inheritUnspecifiedAttributes(SVGGlyphIdentifier&, const SVGFontData*); 111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static String querySVGFontLanguage(const SVGElement*); 112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 113f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Helper function shared between SVGGlyphElement & SVGMissingGlyphElement 114f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static SVGGlyphIdentifier buildGenericGlyphIdentifier(const SVGElement*); 115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 116f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprivate: 117f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGGlyphElement(const QualifiedName&, Document*); 118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void parseMappedAttribute(Attribute*); 1202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void fillAttributeToPropertyTypeMap(); 1212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap(); 122f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 123f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void insertedIntoDocument(); 124f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void removedFromDocument(); 125f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 126f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool rendererIsNeeded(RenderStyle*) { return false; } 127f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 128f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void invalidateGlyphCache(); 129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}; 130f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG_FONTS) 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 135