diff options
Diffstat (limited to 'gfx/thebes/gfxFontconfigFonts.h')
-rw-r--r-- | gfx/thebes/gfxFontconfigFonts.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/gfx/thebes/gfxFontconfigFonts.h b/gfx/thebes/gfxFontconfigFonts.h new file mode 100644 index 000000000..cea9d0dbf --- /dev/null +++ b/gfx/thebes/gfxFontconfigFonts.h @@ -0,0 +1,124 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef GFX_FONTCONFIG_FONTS_H +#define GFX_FONTCONFIG_FONTS_H + +#include "cairo.h" +#include "gfxTypes.h" +#include "gfxTextRun.h" + +#include "nsAutoRef.h" +#include "nsTArray.h" + +#include <pango/pango.h> + +class gfxFcFontSet; +class gfxFcFont; +typedef struct _FcPattern FcPattern; +typedef struct FT_FaceRec_* FT_Face; +typedef struct FT_LibraryRec_ *FT_Library; + +class gfxPangoFontGroup : public gfxFontGroup { +public: + gfxPangoFontGroup(const mozilla::FontFamilyList& aFontFamilyList, + const gfxFontStyle *aStyle, + gfxUserFontSet *aUserFontSet, + gfxFloat aDevToCssSize); + virtual ~gfxPangoFontGroup(); + + virtual gfxFontGroup *Copy(const gfxFontStyle *aStyle); + + virtual gfxFont* GetFirstValidFont(uint32_t aCh = 0x20); + + virtual void UpdateUserFonts(); + + virtual already_AddRefed<gfxFont> + FindFontForChar(uint32_t aCh, uint32_t aPrevCh, uint32_t aNextCh, + Script aRunScript, gfxFont *aPrevMatchedFont, + uint8_t *aMatchType); + + static void Shutdown(); + + // Used for @font-face { src: local(); } + static gfxFontEntry *NewFontEntry(const nsAString& aFontName, + uint16_t aWeight, + int16_t aStretch, + uint8_t aStyle); + // Used for @font-face { src: url(); } + static gfxFontEntry *NewFontEntry(const nsAString& aFontName, + uint16_t aWeight, + int16_t aStretch, + uint8_t aStyle, + const uint8_t* aFontData, + uint32_t aLength); + +private: + + virtual gfxFont *GetFontAt(int32_t i, uint32_t aCh = 0x20); + + // @param aLang [in] language to use for pref fonts and system default font + // selection, or nullptr for the language guessed from the + // gfxFontStyle. + // The FontGroup holds a reference to this set. + gfxFcFontSet *GetFontSet(PangoLanguage *aLang = nullptr); + + class FontSetByLangEntry { + public: + FontSetByLangEntry(PangoLanguage *aLang, gfxFcFontSet *aFontSet); + PangoLanguage *mLang; + RefPtr<gfxFcFontSet> mFontSet; + }; + // There is only one of entry in this array unless characters from scripts + // of other languages are measured. + AutoTArray<FontSetByLangEntry,1> mFontSets; + + gfxFloat mSizeAdjustFactor; + PangoLanguage *mPangoLanguage; + + // @param aLang [in] language to use for pref fonts and system font + // resolution, or nullptr to guess a language from the gfxFontStyle. + // @param aMatchPattern [out] if non-nullptr, will return the pattern used. + already_AddRefed<gfxFcFontSet> + MakeFontSet(PangoLanguage *aLang, gfxFloat aSizeAdjustFactor, + nsAutoRef<FcPattern> *aMatchPattern = nullptr); + + gfxFcFontSet *GetBaseFontSet(); + gfxFcFont *GetBaseFont(); + + gfxFloat GetSizeAdjustFactor() + { + if (mFontSets.Length() == 0) + GetBaseFontSet(); + return mSizeAdjustFactor; + } + + // old helper methods from gfxFontGroup, moved here so that those methods + // can be revamped without affecting the legacy code here + + // iterate over the fontlist, lookup names and expand generics + void EnumerateFontListPFG(nsIAtom *aLanguage, void *aClosure); + + // expand a generic to a list of specific names based on prefs + void FindGenericFontsPFG(mozilla::FontFamilyType aGenericType, + nsIAtom *aLanguage, + void *aClosure); + + // lookup and add a font with a given name (i.e. *not* a generic!) + void FindPlatformFontPFG(const nsAString& aName, + bool aUseFontSet, + void *aClosure); + + static void + ResolveGenericFontNamesPFG(mozilla::FontFamilyType aGenericType, + nsIAtom *aLanguage, + nsTArray<nsString>& aGenericFamilies); + + + friend class gfxSystemFcFontEntry; + static FT_Library GetFTLibrary(); +}; + +#endif /* GFX_FONTCONFIG_FONTS_H */ |