diff options
Diffstat (limited to 'core/fxge/cfx_font.h')
-rw-r--r-- | core/fxge/cfx_font.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/core/fxge/cfx_font.h b/core/fxge/cfx_font.h new file mode 100644 index 0000000000..d9f6debc5f --- /dev/null +++ b/core/fxge/cfx_font.h @@ -0,0 +1,127 @@ +// Copyright 2017 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef CORE_FXGE_CFX_FONT_H_ +#define CORE_FXGE_CFX_FONT_H_ + +#include <memory> +#include <utility> +#include <vector> + +#include "core/fxcrt/bytestring.h" +#include "core/fxcrt/fx_coordinates.h" +#include "core/fxcrt/unowned_ptr.h" +#include "core/fxge/fx_freetype.h" + +#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_ +#include "core/fxge/fx_font.h" +#endif + +class CFX_FaceCache; +class CFX_GlyphBitmap; +class CFX_PathData; +class CFX_SubstFont; +class IFX_SeekableReadStream; + +class CFX_Font { + public: + CFX_Font(); + ~CFX_Font(); + + void LoadSubst(const ByteString& face_name, + bool bTrueType, + uint32_t flags, + int weight, + int italic_angle, + int CharsetCP, + bool bVertical); + + bool LoadEmbedded(const uint8_t* data, uint32_t size); + FXFT_Face GetFace() const { return m_Face; } + CFX_SubstFont* GetSubstFont() const { return m_pSubstFont.get(); } + +#ifdef PDF_ENABLE_XFA + bool LoadFile(const RetainPtr<IFX_SeekableReadStream>& pFile, int nFaceIndex); + + bool LoadClone(const CFX_Font* pFont); + void SetFace(FXFT_Face face); + void SetSubstFont(std::unique_ptr<CFX_SubstFont> subst) { + m_pSubstFont = std::move(subst); + } +#endif // PDF_ENABLE_XFA + + const CFX_GlyphBitmap* LoadGlyphBitmap(uint32_t glyph_index, + bool bFontStyle, + const CFX_Matrix* pMatrix, + int dest_width, + int anti_alias, + int& text_flags) const; + const CFX_PathData* LoadGlyphPath(uint32_t glyph_index, int dest_width) const; + +#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_ + CFX_TypeFace* GetDeviceCache() const; +#endif + + int GetGlyphWidth(uint32_t glyph_index); + int GetAscent() const; + int GetDescent() const; + bool GetGlyphBBox(uint32_t glyph_index, FX_RECT& bbox); + bool IsItalic() const; + bool IsBold() const; + bool IsFixedWidth() const; + bool IsVertical() const { return m_bVertical; } + ByteString GetPsName() const; + ByteString GetFamilyName() const; + ByteString GetFaceName() const; + bool IsTTFont() const; + bool GetBBox(FX_RECT& bbox); + bool IsEmbedded() const { return m_bEmbedded; } + uint8_t* GetSubData() const { return m_pGsubData; } + void SetSubData(uint8_t* data) { m_pGsubData = data; } +#if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_ + void* GetPlatformFont() const { return m_pPlatformFont; } + void SetPlatformFont(void* font) { m_pPlatformFont = font; } +#endif + uint8_t* GetFontData() const { return m_pFontData; } + uint32_t GetSize() const { return m_dwSize; } + void AdjustMMParams(int glyph_index, int width, int weight) const; + + static const size_t kAngleSkewArraySize = 30; + static const char s_AngleSkew[kAngleSkewArraySize]; + static const size_t kWeightPowArraySize = 100; + static const uint8_t s_WeightPow[kWeightPowArraySize]; + static const uint8_t s_WeightPow_11[kWeightPowArraySize]; + static const uint8_t s_WeightPow_SHIFTJIS[kWeightPowArraySize]; + +#ifdef PDF_ENABLE_XFA + protected: + bool m_bShallowCopy; + FXFT_StreamRec* m_pOwnedStream; +#endif // PDF_ENABLE_XFA + + private: + friend class CFX_FaceCache; + CFX_PathData* LoadGlyphPathImpl(uint32_t glyph_index, int dest_width) const; + CFX_FaceCache* GetFaceCache() const; + void ReleasePlatformResource(); + void DeleteFace(); + void ClearFaceCache(); + + FXFT_Face m_Face; + mutable UnownedPtr<CFX_FaceCache> m_FaceCache; + std::unique_ptr<CFX_SubstFont> m_pSubstFont; + std::vector<uint8_t> m_pFontDataAllocation; + uint8_t* m_pFontData; + uint8_t* m_pGsubData; + uint32_t m_dwSize; +#if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_ + void* m_pPlatformFont; +#endif + bool m_bEmbedded; + bool m_bVertical; +}; + +#endif // CORE_FXGE_CFX_FONT_H_ |