/* * This file is part of the internal font implementation. * * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #ifndef SimpleFontData_h #define SimpleFontData_h #include "FontData.h" #include "FontPlatformData.h" #include "GlyphPageTreeNode.h" #include "GlyphWidthMap.h" #include <wtf/OwnPtr.h> #if USE(ATSUI) typedef struct OpaqueATSUStyle* ATSUStyle; #endif #if PLATFORM(WIN) #include <usp10.h> #endif #if PLATFORM(CAIRO) #include <cairo.h> #endif #if PLATFORM(QT) #include <QFont> #endif namespace WebCore { class FontDescription; class FontPlatformData; class SharedBuffer; class SVGFontData; class WidthMap; enum Pitch { UnknownPitch, FixedPitch, VariablePitch }; class SimpleFontData : public FontData { public: SimpleFontData(const FontPlatformData&, bool customFont = false, bool loading = false, SVGFontData* data = 0); virtual ~SimpleFontData(); public: const FontPlatformData& platformData() const { return m_font; } SimpleFontData* smallCapsFontData(const FontDescription& fontDescription) const; // vertical metrics int ascent() const { return m_ascent; } int descent() const { return m_descent; } int lineSpacing() const { return m_lineSpacing; } int lineGap() const { return m_lineGap; } float xHeight() const { return m_xHeight; } unsigned unitsPerEm() const { return m_unitsPerEm; } float widthForGlyph(Glyph) const; float platformWidthForGlyph(Glyph) const; virtual const SimpleFontData* fontDataForCharacter(UChar32) const; virtual bool containsCharacters(const UChar*, int length) const; void determinePitch(); Pitch pitch() const { return m_treatAsFixedPitch ? FixedPitch : VariablePitch; } #if ENABLE(SVG_FONTS) SVGFontData* svgFontData() const { return m_svgFontData.get(); } bool isSVGFont() const { return m_svgFontData; } #else bool isSVGFont() const { return false; } #endif virtual bool isCustomFont() const { return m_isCustomFont; } virtual bool isLoading() const { return m_isLoading; } virtual bool isSegmented() const; const GlyphData& missingGlyphData() const { return m_missingGlyphData; } #if PLATFORM(MAC) NSFont* getNSFont() const { return m_font.font(); } #endif #if USE(CORE_TEXT) CTFontRef getCTFont() const; CFDictionaryRef getCFStringAttributes() const; #endif #if USE(ATSUI) void checkShapesArabic() const; bool shapesArabic() const { if (!m_checkedShapesArabic) checkShapesArabic(); return m_shapesArabic; } #endif #if PLATFORM(QT) QFont getQtFont() const { return m_font.font(); } #endif #if PLATFORM(WIN) bool isSystemFont() const { return m_isSystemFont; } SCRIPT_FONTPROPERTIES* scriptFontProperties() const; SCRIPT_CACHE* scriptCache() const { return &m_scriptCache; } static void setShouldApplyMacAscentHack(bool); static bool shouldApplyMacAscentHack(); #endif #if PLATFORM(CAIRO) void setFont(cairo_t*) const; #endif #if PLATFORM(WX) wxFont getWxFont() const { return m_font.font(); } #endif private: void platformInit(); void platformGlyphInit(); void platformDestroy(); void commonInit(); #if PLATFORM(WIN) void initGDIFont(); void platformCommonDestroy(); float widthForGDIGlyph(Glyph glyph) const; #endif public: int m_ascent; int m_descent; int m_lineSpacing; int m_lineGap; float m_xHeight; unsigned m_unitsPerEm; FontPlatformData m_font; mutable GlyphWidthMap m_glyphToWidthMap; bool m_treatAsFixedPitch; #if ENABLE(SVG_FONTS) OwnPtr<SVGFontData> m_svgFontData; #endif bool m_isCustomFont; // Whether or not we are custom font loaded via @font-face bool m_isLoading; // Whether or not this custom font is still in the act of loading. Glyph m_spaceGlyph; float m_spaceWidth; float m_adjustedSpaceWidth; GlyphData m_missingGlyphData; mutable SimpleFontData* m_smallCapsFontData; #if PLATFORM(CG) || PLATFORM(WIN) float m_syntheticBoldOffset; #endif #if PLATFORM(MAC) #ifdef BUILDING_ON_TIGER void* m_styleGroup; #endif #endif #if USE(ATSUI) mutable ATSUStyle m_ATSUStyle; mutable bool m_ATSUStyleInitialized; mutable bool m_ATSUMirrors; mutable bool m_checkedShapesArabic; mutable bool m_shapesArabic; #endif #if USE(CORE_TEXT) mutable RetainPtr<CTFontRef> m_CTFont; mutable RetainPtr<CFDictionaryRef> m_CFStringAttributes; #endif #if PLATFORM(WIN) bool m_isSystemFont; mutable SCRIPT_CACHE m_scriptCache; mutable SCRIPT_FONTPROPERTIES* m_scriptFontProperties; #endif }; } // namespace WebCore #endif // SimpleFontData_h