#ifndef FONTDATA_H
#define FONTDATA_H
#include "FontPlatformData.h"
#include "GlyphMap.h"
#include "GlyphWidthMap.h"
#include <wtf/Noncopyable.h>
#include <unicode/umachine.h>
namespace WebCore {
class FontDescription;
class FontPlatformData;
class WidthMap;
enum Pitch { UnknownPitch, FixedPitch, VariablePitch };
class FontData : Noncopyable
{
public:
FontData(const FontPlatformData& f);
~FontData();
public:
const FontPlatformData& platformData() const { return m_font; }
FontData* smallCapsFontData(const FontDescription& fontDescription) const;
int ascent() const { return GSFontGetAscent(m_font.font); }
int descent() const { return GSFontGetDescent(m_font.font); }
int lineSpacing() const { return GSFontGetLineSpacing(m_font.font); }
int lineGap() const { return GSFontGetLineGap(m_font.font); }
float xHeight() const { return GSFontGetXHeight(m_font.font); }
float widthForGlyph(Glyph) const;
float platformWidthForGlyph(Glyph) const;
bool containsCharacters(const UChar* characters, int length) const;
void determinePitch();
Pitch pitch() const { return m_treatAsFixedPitch ? FixedPitch : VariablePitch; }
GlyphData glyphDataForCharacter(UChar32 c) const { return m_characterToGlyphMap.glyphDataForCharacter(c, this); }
void setGlyphDataForCharacter(UChar32 c, Glyph glyph, const FontData* fontData) const { m_characterToGlyphMap.setGlyphDataForCharacter(c, glyph, fontData); }
#if __APPLE__
GSFontRef getFont() const { return m_font.font; }
#endif
#if PLATFORM(WIN)
void setIsMLangFont() { m_isMLangFont = true; }
#endif
#if PLATFORM(GDK)
void setFont(cairo_t*) const;
Glyph getGlyphIndex(UChar c) const { return m_font.index(c); }
#endif
private:
void platformInit();
void platformDestroy();
public:
FontPlatformData m_font;
mutable GlyphMap m_characterToGlyphMap;
mutable GlyphWidthMap m_glyphToWidthMap;
bool m_treatAsFixedPitch;
CGGlyph m_spaceGlyph;
float m_spaceWidth;
float m_adjustedSpaceWidth;
mutable FontData* m_smallCapsFontData;
#if __APPLE__
GSFontRef m_smallCapsFont;
float m_syntheticBoldOffset;
#endif
#if PLATFORM(WIN)
bool m_isMLangFont;
#endif
};
}
#endif