JavaScriptCore:
[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 #ifndef FONTDATA_H
25 #define FONTDATA_H
26
27 #include "FontPlatformData.h"
28 #include "GlyphMap.h"
29 #include "GlyphWidthMap.h"
30 #include <wtf/Noncopyable.h>
31
32 // FIXME: Temporary.  Only needed to support API that's going to move.
33 #include <unicode/umachine.h>
34
35 enum Pitch { UnknownPitch, FixedPitch, VariablePitch };
36
37 namespace WebCore
38 {
39
40 class FontDescription;
41
42 class WidthMap;
43
44 class FontData : Noncopyable
45 {
46 public:
47     FontData(const FontPlatformData& f);
48     ~FontData();
49
50 public:
51     const FontPlatformData& platformData() const { return m_font; }
52     FontData* smallCapsFontData(const FontDescription& fontDescription) const;
53
54     // vertical metrics
55     int ascent() const { return m_ascent; }
56     int descent() const { return m_descent; }
57     int lineSpacing() const { return m_lineSpacing; }
58     int lineGap() const { return m_lineGap; }
59     float xHeight() const { return m_xHeight; }
60
61     float widthForGlyph(Glyph) const;
62     float platformWidthForGlyph(Glyph) const;
63
64     bool containsCharacters(const UChar* characters, int length) const;
65
66     void determinePitch();
67     Pitch pitch() const { return m_treatAsFixedPitch ? FixedPitch : VariablePitch; }
68     
69     // FIXME: Should go away when we pull the glyph map out of the FontData.
70     GlyphData glyphDataForCharacter(UChar32 c) const { return m_characterToGlyphMap.glyphDataForCharacter(c, this); }
71     void setGlyphDataForCharacter(UChar32 c, Glyph glyph, const FontData* fontData) const { m_characterToGlyphMap.setGlyphDataForCharacter(c, glyph, fontData); }
72
73 #if __APPLE__
74     NSFont* getNSFont() const { return m_font.font; }
75 #endif
76
77 #if PLATFORM(WIN)
78     void setIsMLangFont() { m_isMLangFont = true; }
79 #endif
80
81 #if PLATFORM(GDK)
82     void setFont(cairo_t*) const;
83     Glyph getGlyphIndex(UChar c) const { return m_font.index(c); }
84 #endif
85
86 private:
87     void platformInit();
88     void platformDestroy();
89
90 public:
91     int m_ascent;
92     int m_descent;
93     int m_lineSpacing;
94     int m_lineGap;
95     float m_xHeight;
96     
97     FontPlatformData m_font;
98     mutable GlyphMap m_characterToGlyphMap;
99     mutable GlyphWidthMap m_glyphToWidthMap;
100
101     bool m_treatAsFixedPitch;
102     Glyph m_spaceGlyph;
103     float m_spaceWidth;
104     float m_adjustedSpaceWidth;
105
106     mutable FontData* m_smallCapsFontData;
107
108 #if __APPLE__
109     void* m_styleGroup;
110     float m_syntheticBoldOffset;
111     mutable ATSUStyle m_ATSUStyle;
112     mutable bool m_ATSUStyleInitialized;
113     mutable bool m_ATSUMirrors;
114 #endif
115
116 #if PLATFORM(WIN)
117     bool m_isMLangFont;
118 #endif
119 };
120
121 }
122
123 #endif