diff options
Diffstat (limited to 'WebCore/platform/graphics/SimpleFontData.h')
-rw-r--r-- | WebCore/platform/graphics/SimpleFontData.h | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/WebCore/platform/graphics/SimpleFontData.h b/WebCore/platform/graphics/SimpleFontData.h new file mode 100644 index 0000000..5f26cbf --- /dev/null +++ b/WebCore/platform/graphics/SimpleFontData.h @@ -0,0 +1,202 @@ +/* + * 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 + +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(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 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 |