Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cfgas_gefont.h
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef XFA_FGAS_FONT_CFGAS_GEFONT_H_
8#define XFA_FGAS_FONT_CFGAS_GEFONT_H_
9
10#include <stdint.h>
11
12#include <map>
13#include <memory>
14#include <optional>
15#include <utility>
16#include <vector>
17
18#include "build/build_config.h"
19#include "core/fxcrt/fx_codepage_forward.h"
20#include "core/fxcrt/fx_coordinates.h"
21#include "core/fxcrt/fx_string.h"
22#include "core/fxcrt/maybe_owned.h"
23#include "core/fxcrt/retain_ptr.h"
24
25class CFX_Font;
26class CFX_UnicodeEncodingEx;
27class CPDF_Document;
28class CPDF_Font;
29
30class CFGAS_GEFont final : public Retainable {
31 public:
33
34 static RetainPtr<CFGAS_GEFont> LoadFont(const wchar_t* pszFontFamily,
35 uint32_t dwFontStyles,
36 FX_CodePage wCodePage);
37 static RetainPtr<CFGAS_GEFont> LoadFont(RetainPtr<CPDF_Font> pFont);
38 static RetainPtr<CFGAS_GEFont> LoadFont(std::unique_ptr<CFX_Font> pFont);
39 static RetainPtr<CFGAS_GEFont> LoadStockFont(CPDF_Document* pDoc,
40 const ByteString& font_family);
41
42 uint32_t GetFontStyles() const;
43 std::optional<uint16_t> GetCharWidth(wchar_t wUnicode);
44 int32_t GetGlyphIndex(wchar_t wUnicode);
45 int32_t GetAscent() const;
46 int32_t GetDescent() const;
47 std::optional<FX_RECT> GetCharBBox(wchar_t wUnicode);
48
49 RetainPtr<CFGAS_GEFont> GetSubstFont(int32_t iGlyphIndex);
50 CFX_Font* GetDevFont() const { return m_pFont.Get(); }
51
52 void SetLogicalFontStyle(uint32_t dwLogFontStyle) {
53 m_dwLogFontStyle = dwLogFontStyle;
54 }
55
56 private:
57 CFGAS_GEFont();
58 ~CFGAS_GEFont() override;
59
60#if BUILDFLAG(IS_WIN)
61 bool LoadFontInternal(const wchar_t* pszFontFamily,
62 uint32_t dwFontStyles,
63 FX_CodePage wCodePage);
64#endif
65 bool LoadFontInternal(std::unique_ptr<CFX_Font> pInternalFont);
66 bool LoadFontInternal(RetainPtr<CPDF_Font> pPDFFont);
67 bool InitFont();
68 std::pair<int32_t, RetainPtr<CFGAS_GEFont>> GetGlyphIndexAndFont(
69 wchar_t wUnicode,
70 bool bRecursive);
71 WideString GetFamilyName() const;
72
73 std::optional<uint32_t> m_dwLogFontStyle;
74 RetainPtr<CPDF_Font> m_pPDFFont; // Must come before |m_pFont|.
75 MaybeOwned<CFX_Font> m_pFont; // Must come before |m_pFontEncoding|.
76 std::unique_ptr<CFX_UnicodeEncodingEx> m_pFontEncoding;
77 std::map<wchar_t, std::optional<uint16_t>> m_CharWidthMap;
78 std::map<wchar_t, FX_RECT> m_BBoxMap;
79 std::vector<RetainPtr<CFGAS_GEFont>> m_SubstFonts;
80 std::map<wchar_t, RetainPtr<CFGAS_GEFont>> m_FontMapper;
81};
82
83#endif // XFA_FGAS_FONT_CFGAS_GEFONT_H_
fxcrt::ByteString ByteString
Definition bytestring.h:180
CFX_TxtLineAlignment
@ CFX_TxtLineAlignment_Justified
@ CFX_TxtLineAlignment_Right
@ CFX_TxtLineAlignment_Center
@ CFX_TxtLineAlignment_Left
#define FX_TXTCHARSTYLE_OddBidiLevel
bool CFX_BreakTypeNoneOrPiece(CFGAS_Char::BreakType type)
#define DCHECK
Definition check.h:33
#define CHECK_NE(x, y)
Definition check_op.h:11
bool HasArabicChar() const
int32_t GetLineEnd() const
std::vector< CFGAS_BreakPiece > m_LinePieces
CFGAS_Char * LastChar()
void IncrementArabicCharCount()
std::vector< CFGAS_Char > m_LineChars
void DecrementArabicCharCount()
int32_t GetHorizontalScale() const
int32_t GetFontSize() const
size_t GetLength() const
int32_t GetStartChar() const
void SetVerticalScale(int32_t scale)
int32_t GetCharCount() const
void SetStatus(CFGAS_Char::BreakType status)
void SetBidiLevel(int32_t level)
int32_t GetStartPos() const
void SetStartPos(int32_t pos)
CFGAS_Char::BreakType GetStatus() const
void SetCharCount(int32_t count)
void SetStartChar(int32_t pos)
const CFGAS_TextUserData * GetUserData() const
CFGAS_BreakPiece(const CFGAS_BreakPiece &other)
int32_t GetBidiPos() const
int32_t GetEndPos() const
std::vector< int32_t > GetWidths() const
void IncrementWidth(int32_t width)
void IncrementStartPos(int32_t count)
void SetBidiPos(int32_t pos)
void SetFontSize(int32_t font_size)
uint32_t GetCharStyles() const
void SetHorizontalScale(int32_t scale)
void SetCharStyles(uint32_t styles)
int32_t GetVerticalScale() const
int32_t GetBidiLevel() const
WideString GetString() const
void SetWidth(int32_t width)
void SetChars(std::vector< CFGAS_Char > *chars)
CFGAS_Char * GetChar(int32_t index) const
void SetUserData(const RetainPtr< CFGAS_TextUserData > &user_data)
int32_t GetWidth() const
bool m_bCombText
Definition cfgas_break.h:78
void SetBreakStatus()
CFGAS_Break(Mask< LayoutStyle > dwLayoutStyles)
void SetCharSpace(float fCharSpace)
virtual ~CFGAS_Break()
int32_t m_iTabWidth
Definition cfgas_break.h:85
int32_t m_iHorizontalScale
Definition cfgas_break.h:86
void SetVerticalScale(int32_t iScale)
void SetFontSize(float fFontSize)
CFGAS_Char * GetLastChar(int32_t index, bool bOmitChar, bool bRichText) const
const CFGAS_BreakLine * GetCurrentLineForTesting() const
Definition cfgas_break.h:56
int32_t m_iVerticalScale
Definition cfgas_break.h:87
int8_t m_iReadyLineIndex
Definition cfgas_break.h:91
uint32_t m_dwIdentity
Definition cfgas_break.h:80
bool m_bSingleLine
Definition cfgas_break.h:77
void ClearBreakPieces()
void SetHorizontalScale(int32_t iScale)
int32_t m_iCharSpace
Definition cfgas_break.h:89
std::array< CFGAS_BreakLine, 2 > m_Lines
Definition cfgas_break.h:92
wchar_t m_wParagraphBreakChar
Definition cfgas_break.h:83
UnownedPtr< CFGAS_BreakLine > m_pCurLine
Definition cfgas_break.h:93
const CFGAS_BreakPiece * GetBreakPieceUnstable(int32_t index) const
bool HasLine() const
Definition cfgas_break.h:72
void SetLineBreakTolerance(float fTolerance)
int32_t m_iFontSize
Definition cfgas_break.h:84
void SetLineBoundary(float fLineStart, float fLineEnd)
void SetFont(RetainPtr< CFGAS_GEFont > pFont)
int32_t CountBreakPieces() const
int32_t m_iLineStart
Definition cfgas_break.h:81
void SetLayoutStyles(Mask< LayoutStyle > dwLayoutStyles)
bool IsGreaterThanLineWidth(int32_t width) const
void SetParagraphBreakChar(wchar_t wch)
int32_t GetTabWidth() const
Definition cfgas_break.h:41
FX_CHARTYPE m_eCharType
Definition cfgas_break.h:76
int32_t m_iTolerance
Definition cfgas_break.h:88
static const float kConversionFactor
Definition cfgas_break.h:67
RetainPtr< CFGAS_GEFont > m_pFont
Definition cfgas_break.h:90
Mask< LayoutStyle > GetLayoutStyles() const
Definition cfgas_break.h:36
Mask< LayoutStyle > m_dwLayoutStyles
Definition cfgas_break.h:79
void SetTabWidth(float fTabWidth)
int32_t m_iLineWidth
Definition cfgas_break.h:82
static const int kMinimumTabWidth
Definition cfgas_break.h:66
FX_CHARTYPE GetUnifiedCharType(FX_CHARTYPE dwType) const
int32_t m_iFontSize
Definition cfgas_char.h:51
uint32_t m_dwIdentity
Definition cfgas_char.h:52
int32_t m_iCharWidth
Definition cfgas_char.h:47
uint16_t m_iBidiOrder
Definition cfgas_char.h:50
CFGAS_Char(const CFGAS_Char &other)
FX_BIDICLASS m_iBidiClass
Definition cfgas_char.h:44
RetainPtr< CFGAS_TextUserData > m_pUserData
Definition cfgas_char.h:53
uint16_t m_iBidiPos
Definition cfgas_char.h:49
uint32_t m_dwCharStyles
Definition cfgas_char.h:46
BreakType m_dwStatus
Definition cfgas_char.h:43
FX_CHARTYPE GetCharType() const
int16_t vertical_scale() const
Definition cfgas_char.h:41
CFGAS_Char(uint16_t wCharCode)
static void BidiLine(std::vector< CFGAS_Char > *chars, size_t iCount)
uint16_t m_iBidiLevel
Definition cfgas_char.h:48
int16_t horizonal_scale() const
Definition cfgas_char.h:40
FX_LINEBREAKTYPE m_eLineBreakType
Definition cfgas_char.h:45
CFGAS_Char(uint16_t wCharCode, int32_t iHorizontalScale, int32_t iVerticalScale)
uint16_t char_code() const
Definition cfgas_char.h:39
CFX_Font * GetDevFont() const
static RetainPtr< CFGAS_GEFont > LoadFont(const wchar_t *pszFontFamily, uint32_t dwFontStyles, FX_CodePage wCodePage)
std::optional< FX_RECT > GetCharBBox(wchar_t wUnicode)
RetainPtr< CFGAS_GEFont > GetSubstFont(int32_t iGlyphIndex)
uint32_t GetFontStyles() const
static RetainPtr< CFGAS_GEFont > LoadFont(std::unique_ptr< CFX_Font > pFont)
int32_t GetDescent() const
void SetLogicalFontStyle(uint32_t dwLogFontStyle)
~CFGAS_GEFont() override
static RetainPtr< CFGAS_GEFont > LoadFont(RetainPtr< CPDF_Font > pFont)
int32_t GetGlyphIndex(wchar_t wUnicode)
int32_t GetAscent() const
static RetainPtr< CFGAS_GEFont > LoadStockFont(CPDF_Document *pDoc, const ByteString &font_family)
std::optional< uint16_t > GetCharWidth(wchar_t wUnicode)
RetainPtr< CFX_CSSComputedStyle > m_pStyle
~CFGAS_TextUserData() override
RetainPtr< CFGAS_LinkUserData > m_pLinkData
virtual wchar_t GetChar(size_t idx) const =0
virtual int32_t GetWidthOfChar(size_t idx)=0
std::vector< CFX_RectF > GetCharRects(const Run &run) const
CFGAS_Char::BreakType EndBreak(CFGAS_Char::BreakType dwStatus)
~CFGAS_TxtBreak() override
void SetLineWidth(float fLineWidth)
size_t GetDisplayPos(const Run &run, pdfium::span< TextCharPos > pCharPos) const
CFGAS_Char::BreakType AppendChar(wchar_t wch)
void SetAlignment(int32_t iAlignment)
void SetCombWidth(float fCombWidth)
CFX_Matrix & operator=(const CFX_Matrix &other)=default
void Offset(float dx, float dy)
constexpr CFX_RectF()=default
CFX_RectF & operator=(const CFX_RectF &other)=default
void Union(const CFX_RectF &rt)
WideString & operator+=(const WideString &str)
WideString & operator=(WideString &&that) noexcept
WideString()=default
virtual void SetScrollOffset(float fScrollOffset)=0
virtual void OnTextWillChange(TextChange *change)=0
virtual bool OnValidate(const WideString &wsText)=0
Iterator(const CFDE_TextEditEngine *engine)
wchar_t GetChar(size_t idx) const override
RetainPtr< CFGAS_GEFont > GetFont() const
size_t GetIndexLeft(size_t pos) const
std::pair< size_t, size_t > GetSelection() const
size_t GetIndexDown(size_t pos) const
size_t GetIndexForPoint(const CFX_PointF &point)
int32_t GetWidthOfChar(size_t idx) override
std::vector< TextCharPos > GetDisplayPos(const FDE_TEXTEDITPIECE &info)
void Insert(size_t idx, const WideString &text, RecordOperation add_operation=RecordOperation::kInsertRecord)
void SetSelection(size_t start_idx, size_t count)
std::pair< int32_t, CFX_RectF > GetCharacterInfo(int32_t start_idx)
void SetAlignment(uint32_t alignment)
std::pair< size_t, size_t > BoundsForWordAt(size_t idx) const
std::vector< CFX_RectF > GetCharacterRectsInRange(int32_t start_idx, int32_t count)
void ReplaceSelectedText(const WideString &str)
size_t GetIndexUp(size_t pos) const
size_t GetIndexAtStartOfLine(size_t pos) const
WideString DeleteSelectedText(RecordOperation add_operation=RecordOperation::kInsertRecord)
void SetFont(RetainPtr< CFGAS_GEFont > font)
void SetDelegate(Delegate *delegate)
size_t GetIndexRight(size_t pos) const
size_t GetIndexAtEndOfLine(size_t pos) const
void SetMaxEditOperationsForTesting(size_t max)
WideString Delete(size_t start_idx, size_t length, RecordOperation add_operation=RecordOperation::kInsertRecord)
const std::vector< FDE_TEXTEDITPIECE > & GetTextPieces()
void DrawLogicText(CFX_RenderDevice *device, const WideString &str, const CFX_RectF &rect)
void SetFont(RetainPtr< CFGAS_GEFont > pFont)
void CalcLogicSize(WideStringView str, CFX_RectF *pRect)
void SetStyles(const FDE_TextStyle &dwStyles)
void SetMatrix(const CFX_Matrix &matrix)
void SetAlignment(FDE_TextAlignment iAlignment)
void SetLineSpace(float fLineSpace)
void CalcLogicSize(WideStringView str, CFX_SizeF *pSize)
int32_t GetTotalLines() const
void SetLineBreakTolerance(float fTolerance)
void SetTextColor(FX_ARGB color)
void SetFontSize(float fFontSize)
static bool DrawString(CFX_RenderDevice *device, FX_ARGB color, const RetainPtr< CFGAS_GEFont > &pFont, span< TextCharPos > pCharPos, float fFontSize, const CFX_Matrix &matrix)
#define UNSAFE_TODO(...)
FX_LINEBREAKTYPE
FX_LINEBREAKTYPE GetLineBreakTypeFromPair(FX_BREAKPROPERTY curr_char, FX_BREAKPROPERTY next_char)
FX_CodePage
Definition fx_codepage.h:19
CFX_PTemplate< float > CFX_PointF
CFX_STemplate< float > CFX_SizeF
uint32_t FX_ARGB
Definition fx_dib.h:36
#define FX_IsOdd(a)
FX_BIDICLASS
Definition fx_unicode.h:13
FDE_TextAlignment
Definition cfde_data.h:14
WordBreakProperty FX_GetWordBreakProperty(wchar_t wcCodePoint)
bool FX_CheckStateChangeForWordBreak(WordBreakProperty from, WordBreakProperty to)
#define CHECK(cvref)
#define CONSTRUCT_VIA_MAKE_RETAIN
Definition retain_ptr.h:222
fxcrt::WideStringView WideStringView
bool operator<(const TPO &that) const
Definition cfgas_break.h:60
UnownedPtr< const CFX_RectF > pRect
pdfium::span< int32_t > pWidths
Run(const Run &other)
RetainPtr< CFGAS_GEFont > pFont
Mask< LayoutStyle > dwStyles
UnownedPtr< CFGAS_TxtBreak::Engine > pEdtEngine
FDE_TEXTEDITPIECE(const FDE_TEXTEDITPIECE &that)
fxcrt::WideString WideString
Definition widestring.h:207