1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FGAS_LAYOUT_CFGAS_BREAK_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FGAS_LAYOUT_CFGAS_BREAK_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <stdint.h> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/mask.h" 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/retain_ptr.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/layout/cfgas_breakline.h" 16*3ac0a46fSAndroid Build Coastguard Worker 17*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_GEFont; 18*3ac0a46fSAndroid Build Coastguard Worker 19*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_Break { 20*3ac0a46fSAndroid Build Coastguard Worker public: 21*3ac0a46fSAndroid Build Coastguard Worker enum class LayoutStyle : uint8_t { 22*3ac0a46fSAndroid Build Coastguard Worker kNone = 0, 23*3ac0a46fSAndroid Build Coastguard Worker kPagination = 1 << 0, 24*3ac0a46fSAndroid Build Coastguard Worker kExpandTab = 1 << 1, 25*3ac0a46fSAndroid Build Coastguard Worker kSingleLine = 1 << 2, 26*3ac0a46fSAndroid Build Coastguard Worker kCombText = 1 << 3, 27*3ac0a46fSAndroid Build Coastguard Worker }; 28*3ac0a46fSAndroid Build Coastguard Worker 29*3ac0a46fSAndroid Build Coastguard Worker virtual ~CFGAS_Break(); 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker void Reset(); 32*3ac0a46fSAndroid Build Coastguard Worker 33*3ac0a46fSAndroid Build Coastguard Worker void SetLayoutStyles(Mask<LayoutStyle> dwLayoutStyles); GetLayoutStyles()34*3ac0a46fSAndroid Build Coastguard Worker Mask<LayoutStyle> GetLayoutStyles() const { return m_dwLayoutStyles; } 35*3ac0a46fSAndroid Build Coastguard Worker 36*3ac0a46fSAndroid Build Coastguard Worker void SetFont(RetainPtr<CFGAS_GEFont> pFont); 37*3ac0a46fSAndroid Build Coastguard Worker void SetFontSize(float fFontSize); 38*3ac0a46fSAndroid Build Coastguard Worker void SetTabWidth(float fTabWidth); GetTabWidth()39*3ac0a46fSAndroid Build Coastguard Worker int32_t GetTabWidth() const { return m_iTabWidth; } 40*3ac0a46fSAndroid Build Coastguard Worker 41*3ac0a46fSAndroid Build Coastguard Worker void SetHorizontalScale(int32_t iScale); 42*3ac0a46fSAndroid Build Coastguard Worker void SetVerticalScale(int32_t iScale); 43*3ac0a46fSAndroid Build Coastguard Worker void SetLineBreakTolerance(float fTolerance); 44*3ac0a46fSAndroid Build Coastguard Worker void SetLineBoundary(float fLineStart, float fLineEnd); 45*3ac0a46fSAndroid Build Coastguard Worker 46*3ac0a46fSAndroid Build Coastguard Worker void SetCharSpace(float fCharSpace); 47*3ac0a46fSAndroid Build Coastguard Worker void SetParagraphBreakChar(wchar_t wch); 48*3ac0a46fSAndroid Build Coastguard Worker 49*3ac0a46fSAndroid Build Coastguard Worker int32_t CountBreakPieces() const; 50*3ac0a46fSAndroid Build Coastguard Worker const CFGAS_BreakPiece* GetBreakPieceUnstable(int32_t index) const; 51*3ac0a46fSAndroid Build Coastguard Worker void ClearBreakPieces(); 52*3ac0a46fSAndroid Build Coastguard Worker 53*3ac0a46fSAndroid Build Coastguard Worker CFGAS_Char* GetLastChar(int32_t index, bool bOmitChar, bool bRichText) const; GetCurrentLineForTesting()54*3ac0a46fSAndroid Build Coastguard Worker const CFGAS_BreakLine* GetCurrentLineForTesting() const { return m_pCurLine; } 55*3ac0a46fSAndroid Build Coastguard Worker 56*3ac0a46fSAndroid Build Coastguard Worker protected: 57*3ac0a46fSAndroid Build Coastguard Worker struct TPO { 58*3ac0a46fSAndroid Build Coastguard Worker bool operator<(const TPO& that) const { return pos < that.pos; } 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker int32_t index; 61*3ac0a46fSAndroid Build Coastguard Worker int32_t pos; 62*3ac0a46fSAndroid Build Coastguard Worker }; 63*3ac0a46fSAndroid Build Coastguard Worker 64*3ac0a46fSAndroid Build Coastguard Worker static const int kMinimumTabWidth; 65*3ac0a46fSAndroid Build Coastguard Worker static const float kConversionFactor; 66*3ac0a46fSAndroid Build Coastguard Worker 67*3ac0a46fSAndroid Build Coastguard Worker explicit CFGAS_Break(Mask<LayoutStyle> dwLayoutStyles); 68*3ac0a46fSAndroid Build Coastguard Worker 69*3ac0a46fSAndroid Build Coastguard Worker void SetBreakStatus(); HasLine()70*3ac0a46fSAndroid Build Coastguard Worker bool HasLine() const { return m_iReadyLineIndex >= 0; } 71*3ac0a46fSAndroid Build Coastguard Worker bool IsGreaterThanLineWidth(int32_t width) const; 72*3ac0a46fSAndroid Build Coastguard Worker FX_CHARTYPE GetUnifiedCharType(FX_CHARTYPE dwType) const; 73*3ac0a46fSAndroid Build Coastguard Worker 74*3ac0a46fSAndroid Build Coastguard Worker FX_CHARTYPE m_eCharType = FX_CHARTYPE::kUnknown; 75*3ac0a46fSAndroid Build Coastguard Worker bool m_bSingleLine = false; 76*3ac0a46fSAndroid Build Coastguard Worker bool m_bCombText = false; 77*3ac0a46fSAndroid Build Coastguard Worker Mask<LayoutStyle> m_dwLayoutStyles = LayoutStyle::kNone; 78*3ac0a46fSAndroid Build Coastguard Worker uint32_t m_dwIdentity = 0; 79*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iLineStart = 0; 80*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iLineWidth = 2000000; 81*3ac0a46fSAndroid Build Coastguard Worker wchar_t m_wParagraphBreakChar = L'\n'; 82*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iFontSize = 240; 83*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iTabWidth = 720000; 84*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iHorizontalScale = 100; 85*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iVerticalScale = 100; 86*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iTolerance = 0; 87*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iCharSpace = 0; 88*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<CFGAS_GEFont> m_pFont; 89*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CFGAS_BreakLine> m_pCurLine; 90*3ac0a46fSAndroid Build Coastguard Worker int8_t m_iReadyLineIndex = -1; 91*3ac0a46fSAndroid Build Coastguard Worker CFGAS_BreakLine m_Lines[2]; 92*3ac0a46fSAndroid Build Coastguard Worker }; 93*3ac0a46fSAndroid Build Coastguard Worker 94*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FGAS_LAYOUT_CFGAS_BREAK_H_ 95