Bug 8880, remove the remaining drawing/hit testing code from
[WebKit-https.git] / WebCore / platform / FontData.h
1 /*
2  * This file is part of the internal font implementation.  It should not be included by anyone other than
3  * FontMac.cpp, FontWin.cpp and Font.cpp.
4  *
5  * Copyright (C) 2006 Apple Computer, Inc.
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., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  *
22  */
23
24 #if __APPLE__
25 // FIXME: This is going to be cross-platform eventually, but for now we just compile on OS X.
26
27 #include "FontPlatformData.h"
28 #include "GlyphBuffer.h"
29
30 // FIXME: Temporary.  Only needed to support API that's going to move.
31 #include <unicode/umachine.h>
32
33 namespace WebCore
34 {
35
36 class FontDescription;
37
38 typedef struct WidthMap WidthMap;
39 typedef struct GlyphMap GlyphMap;
40
41 class FontData
42 {
43 public:
44     FontData(const FontPlatformData& f);
45     ~FontData();
46
47 public:
48     const FontPlatformData& platformData() const { return m_font; }
49     FontData* smallCapsFontData() const;
50
51     // vertical metrics
52     int ascent() const { return m_ascent; }
53     int descent() const { return m_descent; }
54     int lineSpacing() const { return m_lineSpacing; }
55     int lineGap() const { return m_lineGap; }
56
57     float xHeight() const;
58
59     // FIXME: These are temporary API and will eventually move to the fallback list.
60     Glyph glyphForCharacter(const FontData **renderer, unsigned c) const;
61     const FontData* findSubstituteFontData(const UChar* characters, unsigned numCharacters, const FontDescription&) const;
62     void updateGlyphMapEntry(UChar c, Glyph glyph, const FontData *substituteRenderer) const;
63     // End temporary API
64
65     float widthForGlyph(Glyph glyph) const;
66
67 public:
68     int m_ascent;
69     int m_descent;
70     int m_lineSpacing;
71     int m_lineGap;
72     
73     void* m_styleGroup;
74     
75     FontPlatformData m_font;
76     mutable GlyphMap* m_characterToGlyphMap;
77     mutable WidthMap* m_glyphToWidthMap;
78
79     bool m_treatAsFixedPitch;
80     ATSGlyphRef m_spaceGlyph;
81     float m_spaceWidth;
82     float m_adjustedSpaceWidth;
83     float m_syntheticBoldOffset;
84     
85     mutable FontData* m_smallCapsFontData;
86     mutable ATSUStyle m_ATSUStyle;
87     mutable bool m_ATSUStyleInitialized;
88     mutable bool m_ATSUMirrors;
89 };
90
91 }
92
93 #else
94
95 #include "FontPlatformData.h"
96
97 namespace WebCore {
98
99 class FontDescription;
100
101 class FontData
102 {
103 public:
104 #if WIN32
105     FontData(HFONT font, const FontDescription& fontDescription)
106         :m_platformData(font, fontDescription) {}
107 #endif
108
109     const FontPlatformData& platformData() const { return m_platformData; }
110
111     void setMetrics(int ascent, int descent, int xHeight, int lineSpacing)
112     {
113         m_ascent = ascent;
114         m_descent = descent;
115         m_xHeight = xHeight;
116         m_lineSpacing = lineSpacing;
117     }
118
119     int ascent() const { return m_ascent; }
120     int descent() const { return m_descent; }
121     int xHeight() const { return m_xHeight; }
122     int lineSpacing() const { return m_lineSpacing; }
123
124 private:
125     FontPlatformData m_platformData;
126     int m_ascent;
127     int m_descent;
128     int m_xHeight;
129     int m_lineSpacing;
130 };
131
132 }
133 #endif