| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fgas/layout/fgas_textbreak.h" | 7 #include "xfa/fgas/layout/fgas_textbreak.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 } | 55 } |
| 56 CFX_TxtCharArray* m_pLineChars; | 56 CFX_TxtCharArray* m_pLineChars; |
| 57 CFX_TxtPieceArray* m_pLinePieces; | 57 CFX_TxtPieceArray* m_pLinePieces; |
| 58 int32_t m_iStart; | 58 int32_t m_iStart; |
| 59 int32_t m_iWidth; | 59 int32_t m_iWidth; |
| 60 int32_t m_iArabicChars; | 60 int32_t m_iArabicChars; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 class CFX_TxtBreak : public IFX_TxtBreak { | 63 class CFX_TxtBreak : public IFX_TxtBreak { |
| 64 public: | 64 public: |
| 65 CFX_TxtBreak(FX_DWORD dwPolicies); | 65 CFX_TxtBreak(uint32_t dwPolicies); |
| 66 ~CFX_TxtBreak(); | 66 ~CFX_TxtBreak(); |
| 67 virtual void Release() { delete this; } | 67 virtual void Release() { delete this; } |
| 68 virtual void SetLineWidth(FX_FLOAT fLineWidth); | 68 virtual void SetLineWidth(FX_FLOAT fLineWidth); |
| 69 virtual void SetLinePos(FX_FLOAT fLinePos); | 69 virtual void SetLinePos(FX_FLOAT fLinePos); |
| 70 virtual FX_DWORD GetLayoutStyles() const { return m_dwLayoutStyles; } | 70 virtual uint32_t GetLayoutStyles() const { return m_dwLayoutStyles; } |
| 71 virtual void SetLayoutStyles(FX_DWORD dwLayoutStyles); | 71 virtual void SetLayoutStyles(uint32_t dwLayoutStyles); |
| 72 virtual void SetFont(IFX_Font* pFont); | 72 virtual void SetFont(IFX_Font* pFont); |
| 73 virtual void SetFontSize(FX_FLOAT fFontSize); | 73 virtual void SetFontSize(FX_FLOAT fFontSize); |
| 74 virtual void SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant); | 74 virtual void SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant); |
| 75 virtual void SetDefaultChar(FX_WCHAR wch); | 75 virtual void SetDefaultChar(FX_WCHAR wch); |
| 76 virtual void SetParagraphBreakChar(FX_WCHAR wch); | 76 virtual void SetParagraphBreakChar(FX_WCHAR wch); |
| 77 virtual void SetLineBreakTolerance(FX_FLOAT fTolerance); | 77 virtual void SetLineBreakTolerance(FX_FLOAT fTolerance); |
| 78 virtual void SetHorizontalScale(int32_t iScale); | 78 virtual void SetHorizontalScale(int32_t iScale); |
| 79 virtual void SetVerticalScale(int32_t iScale); | 79 virtual void SetVerticalScale(int32_t iScale); |
| 80 virtual void SetCharRotation(int32_t iCharRotation); | 80 virtual void SetCharRotation(int32_t iCharRotation); |
| 81 virtual void SetCharSpace(FX_FLOAT fCharSpace); | 81 virtual void SetCharSpace(FX_FLOAT fCharSpace); |
| 82 virtual void SetAlignment(int32_t iAlignment); | 82 virtual void SetAlignment(int32_t iAlignment); |
| 83 virtual FX_DWORD GetContextCharStyles() const; | 83 virtual uint32_t GetContextCharStyles() const; |
| 84 virtual void SetContextCharStyles(FX_DWORD dwCharStyles); | 84 virtual void SetContextCharStyles(uint32_t dwCharStyles); |
| 85 virtual void SetCombWidth(FX_FLOAT fCombWidth); | 85 virtual void SetCombWidth(FX_FLOAT fCombWidth); |
| 86 virtual void SetUserData(void* pUserData); | 86 virtual void SetUserData(void* pUserData); |
| 87 virtual FX_DWORD AppendChar(FX_WCHAR wch); | 87 virtual uint32_t AppendChar(FX_WCHAR wch); |
| 88 virtual FX_DWORD EndBreak(FX_DWORD dwStatus = FX_TXTBREAK_PieceBreak); | 88 virtual uint32_t EndBreak(uint32_t dwStatus = FX_TXTBREAK_PieceBreak); |
| 89 virtual int32_t CountBreakChars() const; | 89 virtual int32_t CountBreakChars() const; |
| 90 virtual int32_t CountBreakPieces() const; | 90 virtual int32_t CountBreakPieces() const; |
| 91 virtual const CFX_TxtPiece* GetBreakPiece(int32_t index) const; | 91 virtual const CFX_TxtPiece* GetBreakPiece(int32_t index) const; |
| 92 virtual void ClearBreakPieces(); | 92 virtual void ClearBreakPieces(); |
| 93 virtual void Reset(); | 93 virtual void Reset(); |
| 94 virtual int32_t GetDisplayPos( | 94 virtual int32_t GetDisplayPos( |
| 95 const FX_TXTRUN* pTxtRun, | 95 const FX_TXTRUN* pTxtRun, |
| 96 FXTEXT_CHARPOS* pCharPos, | 96 FXTEXT_CHARPOS* pCharPos, |
| 97 FX_BOOL bCharCode = FALSE, | 97 FX_BOOL bCharCode = FALSE, |
| 98 CFX_WideString* pWSForms = NULL, | 98 CFX_WideString* pWSForms = NULL, |
| 99 FX_AdjustCharDisplayPos pAdjustPos = NULL) const; | 99 FX_AdjustCharDisplayPos pAdjustPos = NULL) const; |
| 100 virtual int32_t GetCharRects(const FX_TXTRUN* pTxtRun, | 100 virtual int32_t GetCharRects(const FX_TXTRUN* pTxtRun, |
| 101 CFX_RectFArray& rtArray, | 101 CFX_RectFArray& rtArray, |
| 102 FX_BOOL bCharBBox = FALSE) const; | 102 FX_BOOL bCharBBox = FALSE) const; |
| 103 void AppendChar_PageLoad(CFX_Char* pCurChar, FX_DWORD dwProps); | 103 void AppendChar_PageLoad(CFX_Char* pCurChar, uint32_t dwProps); |
| 104 FX_DWORD AppendChar_Combination(CFX_Char* pCurChar, int32_t iRotation); | 104 uint32_t AppendChar_Combination(CFX_Char* pCurChar, int32_t iRotation); |
| 105 FX_DWORD AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation); | 105 uint32_t AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation); |
| 106 FX_DWORD AppendChar_Control(CFX_Char* pCurChar, int32_t iRotation); | 106 uint32_t AppendChar_Control(CFX_Char* pCurChar, int32_t iRotation); |
| 107 FX_DWORD AppendChar_Arabic(CFX_Char* pCurChar, int32_t iRotation); | 107 uint32_t AppendChar_Arabic(CFX_Char* pCurChar, int32_t iRotation); |
| 108 FX_DWORD AppendChar_Others(CFX_Char* pCurChar, int32_t iRotation); | 108 uint32_t AppendChar_Others(CFX_Char* pCurChar, int32_t iRotation); |
| 109 | 109 |
| 110 protected: | 110 protected: |
| 111 FX_DWORD m_dwPolicies; | 111 uint32_t m_dwPolicies; |
| 112 FX_BOOL m_bPagination; | 112 FX_BOOL m_bPagination; |
| 113 IFX_ArabicChar* m_pArabicChar; | 113 IFX_ArabicChar* m_pArabicChar; |
| 114 int32_t m_iLineWidth; | 114 int32_t m_iLineWidth; |
| 115 FX_DWORD m_dwLayoutStyles; | 115 uint32_t m_dwLayoutStyles; |
| 116 FX_BOOL m_bVertical; | 116 FX_BOOL m_bVertical; |
| 117 FX_BOOL m_bArabicContext; | 117 FX_BOOL m_bArabicContext; |
| 118 FX_BOOL m_bArabicShapes; | 118 FX_BOOL m_bArabicShapes; |
| 119 FX_BOOL m_bRTL; | 119 FX_BOOL m_bRTL; |
| 120 FX_BOOL m_bSingleLine; | 120 FX_BOOL m_bSingleLine; |
| 121 FX_BOOL m_bCombText; | 121 FX_BOOL m_bCombText; |
| 122 int32_t m_iArabicContext; | 122 int32_t m_iArabicContext; |
| 123 int32_t m_iCurArabicContext; | 123 int32_t m_iCurArabicContext; |
| 124 IFX_Font* m_pFont; | 124 IFX_Font* m_pFont; |
| 125 int32_t m_iFontSize; | 125 int32_t m_iFontSize; |
| 126 FX_BOOL m_bEquidistant; | 126 FX_BOOL m_bEquidistant; |
| 127 int32_t m_iTabWidth; | 127 int32_t m_iTabWidth; |
| 128 FX_WCHAR m_wDefChar; | 128 FX_WCHAR m_wDefChar; |
| 129 FX_WCHAR m_wParagBreakChar; | 129 FX_WCHAR m_wParagBreakChar; |
| 130 int32_t m_iDefChar; | 130 int32_t m_iDefChar; |
| 131 int32_t m_iLineRotation; | 131 int32_t m_iLineRotation; |
| 132 int32_t m_iCharRotation; | 132 int32_t m_iCharRotation; |
| 133 int32_t m_iRotation; | 133 int32_t m_iRotation; |
| 134 int32_t m_iAlignment; | 134 int32_t m_iAlignment; |
| 135 FX_DWORD m_dwContextCharStyles; | 135 uint32_t m_dwContextCharStyles; |
| 136 int32_t m_iCombWidth; | 136 int32_t m_iCombWidth; |
| 137 void* m_pUserData; | 137 void* m_pUserData; |
| 138 FX_DWORD m_dwCharType; | 138 uint32_t m_dwCharType; |
| 139 FX_BOOL m_bCurRTL; | 139 FX_BOOL m_bCurRTL; |
| 140 int32_t m_iCurAlignment; | 140 int32_t m_iCurAlignment; |
| 141 FX_BOOL m_bArabicNumber; | 141 FX_BOOL m_bArabicNumber; |
| 142 FX_BOOL m_bArabicComma; | 142 FX_BOOL m_bArabicComma; |
| 143 CFX_TxtLine* m_pTxtLine1; | 143 CFX_TxtLine* m_pTxtLine1; |
| 144 CFX_TxtLine* m_pTxtLine2; | 144 CFX_TxtLine* m_pTxtLine2; |
| 145 CFX_TxtLine* m_pCurLine; | 145 CFX_TxtLine* m_pCurLine; |
| 146 int32_t m_iReady; | 146 int32_t m_iReady; |
| 147 int32_t m_iTolerance; | 147 int32_t m_iTolerance; |
| 148 int32_t m_iHorScale; | 148 int32_t m_iHorScale; |
| 149 int32_t m_iVerScale; | 149 int32_t m_iVerScale; |
| 150 int32_t m_iCharSpace; | 150 int32_t m_iCharSpace; |
| 151 void SetBreakStatus(); | 151 void SetBreakStatus(); |
| 152 int32_t GetLineRotation(FX_DWORD dwStyles) const; | 152 int32_t GetLineRotation(uint32_t dwStyles) const; |
| 153 CFX_TxtChar* GetLastChar(int32_t index, FX_BOOL bOmitChar = TRUE) const; | 153 CFX_TxtChar* GetLastChar(int32_t index, FX_BOOL bOmitChar = TRUE) const; |
| 154 CFX_TxtLine* GetTxtLine(FX_BOOL bReady) const; | 154 CFX_TxtLine* GetTxtLine(FX_BOOL bReady) const; |
| 155 CFX_TxtPieceArray* GetTxtPieces(FX_BOOL bReady) const; | 155 CFX_TxtPieceArray* GetTxtPieces(FX_BOOL bReady) const; |
| 156 FX_DWORD GetUnifiedCharType(FX_DWORD dwType) const; | 156 uint32_t GetUnifiedCharType(uint32_t dwType) const; |
| 157 void ResetArabicContext(); | 157 void ResetArabicContext(); |
| 158 void ResetContextCharStyles(); | 158 void ResetContextCharStyles(); |
| 159 void EndBreak_UpdateArabicShapes(); | 159 void EndBreak_UpdateArabicShapes(); |
| 160 FX_BOOL EndBreak_SplitLine(CFX_TxtLine* pNextLine, | 160 FX_BOOL EndBreak_SplitLine(CFX_TxtLine* pNextLine, |
| 161 FX_BOOL bAllChars, | 161 FX_BOOL bAllChars, |
| 162 FX_DWORD dwStatus); | 162 uint32_t dwStatus); |
| 163 void EndBreak_BidiLine(CFX_TPOArray& tpos, FX_DWORD dwStatus); | 163 void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus); |
| 164 void EndBreak_Alignment(CFX_TPOArray& tpos, | 164 void EndBreak_Alignment(CFX_TPOArray& tpos, |
| 165 FX_BOOL bAllChars, | 165 FX_BOOL bAllChars, |
| 166 FX_DWORD dwStatus); | 166 uint32_t dwStatus); |
| 167 int32_t GetBreakPos(CFX_TxtCharArray& ca, | 167 int32_t GetBreakPos(CFX_TxtCharArray& ca, |
| 168 int32_t& iEndPos, | 168 int32_t& iEndPos, |
| 169 FX_BOOL bAllChars = FALSE, | 169 FX_BOOL bAllChars = FALSE, |
| 170 FX_BOOL bOnlyBrk = FALSE); | 170 FX_BOOL bOnlyBrk = FALSE); |
| 171 void SplitTextLine(CFX_TxtLine* pCurLine, | 171 void SplitTextLine(CFX_TxtLine* pCurLine, |
| 172 CFX_TxtLine* pNextLine, | 172 CFX_TxtLine* pNextLine, |
| 173 FX_BOOL bAllChars = FALSE); | 173 FX_BOOL bAllChars = FALSE); |
| 174 }; | 174 }; |
| 175 | 175 |
| 176 } // namespace | 176 } // namespace |
| 177 | 177 |
| 178 extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32]; | 178 extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32]; |
| 179 IFX_TxtBreak* IFX_TxtBreak::Create(FX_DWORD dwPolicies) { | 179 IFX_TxtBreak* IFX_TxtBreak::Create(uint32_t dwPolicies) { |
| 180 return new CFX_TxtBreak(dwPolicies); | 180 return new CFX_TxtBreak(dwPolicies); |
| 181 } | 181 } |
| 182 CFX_TxtBreak::CFX_TxtBreak(FX_DWORD dwPolicies) | 182 CFX_TxtBreak::CFX_TxtBreak(uint32_t dwPolicies) |
| 183 : m_dwPolicies(dwPolicies), | 183 : m_dwPolicies(dwPolicies), |
| 184 m_pArabicChar(NULL), | 184 m_pArabicChar(NULL), |
| 185 m_iLineWidth(2000000), | 185 m_iLineWidth(2000000), |
| 186 m_dwLayoutStyles(0), | 186 m_dwLayoutStyles(0), |
| 187 m_bVertical(FALSE), | 187 m_bVertical(FALSE), |
| 188 m_bArabicContext(FALSE), | 188 m_bArabicContext(FALSE), |
| 189 m_bArabicShapes(FALSE), | 189 m_bArabicShapes(FALSE), |
| 190 m_bRTL(FALSE), | 190 m_bRTL(FALSE), |
| 191 m_bSingleLine(FALSE), | 191 m_bSingleLine(FALSE), |
| 192 m_bCombText(FALSE), | 192 m_bCombText(FALSE), |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); | 241 int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); |
| 242 if (iLinePos < 0) { | 242 if (iLinePos < 0) { |
| 243 iLinePos = 0; | 243 iLinePos = 0; |
| 244 } | 244 } |
| 245 if (iLinePos > m_iLineWidth) { | 245 if (iLinePos > m_iLineWidth) { |
| 246 iLinePos = m_iLineWidth; | 246 iLinePos = m_iLineWidth; |
| 247 } | 247 } |
| 248 m_pCurLine->m_iStart = iLinePos; | 248 m_pCurLine->m_iStart = iLinePos; |
| 249 m_pCurLine->m_iWidth += iLinePos; | 249 m_pCurLine->m_iWidth += iLinePos; |
| 250 } | 250 } |
| 251 void CFX_TxtBreak::SetLayoutStyles(FX_DWORD dwLayoutStyles) { | 251 void CFX_TxtBreak::SetLayoutStyles(uint32_t dwLayoutStyles) { |
| 252 m_dwLayoutStyles = dwLayoutStyles; | 252 m_dwLayoutStyles = dwLayoutStyles; |
| 253 m_bVertical = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; | 253 m_bVertical = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; |
| 254 m_bArabicContext = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicContext) != 0; | 254 m_bArabicContext = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicContext) != 0; |
| 255 m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0; | 255 m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0; |
| 256 m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0; | 256 m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0; |
| 257 m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; | 257 m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; |
| 258 m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; | 258 m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; |
| 259 ResetArabicContext(); | 259 ResetArabicContext(); |
| 260 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); | 260 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); |
| 261 m_iRotation = m_iLineRotation + m_iCharRotation; | 261 m_iRotation = m_iLineRotation + m_iCharRotation; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicNumber; | 343 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicNumber; |
| 344 } | 344 } |
| 345 if (m_bArabicComma) { | 345 if (m_bArabicComma) { |
| 346 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicComma; | 346 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicComma; |
| 347 } | 347 } |
| 348 if ((m_bArabicContext && m_bCurRTL) || (!m_bArabicContext && m_bRTL)) { | 348 if ((m_bArabicContext && m_bCurRTL) || (!m_bArabicContext && m_bRTL)) { |
| 349 m_dwContextCharStyles |= FX_TXTCHARSTYLE_RTLReadingOrder; | 349 m_dwContextCharStyles |= FX_TXTCHARSTYLE_RTLReadingOrder; |
| 350 } | 350 } |
| 351 m_dwContextCharStyles |= (m_iArabicContext << 8); | 351 m_dwContextCharStyles |= (m_iArabicContext << 8); |
| 352 } | 352 } |
| 353 FX_DWORD CFX_TxtBreak::GetContextCharStyles() const { | 353 uint32_t CFX_TxtBreak::GetContextCharStyles() const { |
| 354 return m_dwContextCharStyles; | 354 return m_dwContextCharStyles; |
| 355 } | 355 } |
| 356 void CFX_TxtBreak::SetContextCharStyles(FX_DWORD dwCharStyles) { | 356 void CFX_TxtBreak::SetContextCharStyles(uint32_t dwCharStyles) { |
| 357 m_iCurAlignment = dwCharStyles & 0x0F; | 357 m_iCurAlignment = dwCharStyles & 0x0F; |
| 358 m_bArabicNumber = (dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; | 358 m_bArabicNumber = (dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; |
| 359 m_bArabicComma = (dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; | 359 m_bArabicComma = (dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; |
| 360 m_bCurRTL = (dwCharStyles & FX_TXTCHARSTYLE_RTLReadingOrder) != 0; | 360 m_bCurRTL = (dwCharStyles & FX_TXTCHARSTYLE_RTLReadingOrder) != 0; |
| 361 m_iCurArabicContext = m_iArabicContext = ((dwCharStyles & 0x0300) >> 8); | 361 m_iCurArabicContext = m_iArabicContext = ((dwCharStyles & 0x0300) >> 8); |
| 362 ResetContextCharStyles(); | 362 ResetContextCharStyles(); |
| 363 } | 363 } |
| 364 void CFX_TxtBreak::SetCombWidth(FX_FLOAT fCombWidth) { | 364 void CFX_TxtBreak::SetCombWidth(FX_FLOAT fCombWidth) { |
| 365 m_iCombWidth = FXSYS_round(fCombWidth * 20000.0f); | 365 m_iCombWidth = FXSYS_round(fCombWidth * 20000.0f); |
| 366 } | 366 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 if (iScale == m_iHorScale) { | 401 if (iScale == m_iHorScale) { |
| 402 return; | 402 return; |
| 403 } | 403 } |
| 404 SetBreakStatus(); | 404 SetBreakStatus(); |
| 405 m_iVerScale = iScale; | 405 m_iVerScale = iScale; |
| 406 } | 406 } |
| 407 void CFX_TxtBreak::SetCharSpace(FX_FLOAT fCharSpace) { | 407 void CFX_TxtBreak::SetCharSpace(FX_FLOAT fCharSpace) { |
| 408 m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); | 408 m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); |
| 409 } | 409 } |
| 410 static const int32_t gs_FX_TxtLineRotations[8] = {0, 3, 1, 0, 2, 1, 3, 2}; | 410 static const int32_t gs_FX_TxtLineRotations[8] = {0, 3, 1, 0, 2, 1, 3, 2}; |
| 411 int32_t CFX_TxtBreak::GetLineRotation(FX_DWORD dwStyles) const { | 411 int32_t CFX_TxtBreak::GetLineRotation(uint32_t dwStyles) const { |
| 412 return gs_FX_TxtLineRotations[(dwStyles & 0x0E) >> 1]; | 412 return gs_FX_TxtLineRotations[(dwStyles & 0x0E) >> 1]; |
| 413 } | 413 } |
| 414 CFX_TxtChar* CFX_TxtBreak::GetLastChar(int32_t index, FX_BOOL bOmitChar) const { | 414 CFX_TxtChar* CFX_TxtBreak::GetLastChar(int32_t index, FX_BOOL bOmitChar) const { |
| 415 CFX_TxtCharArray& ca = *m_pCurLine->m_pLineChars; | 415 CFX_TxtCharArray& ca = *m_pCurLine->m_pLineChars; |
| 416 int32_t iCount = ca.GetSize(); | 416 int32_t iCount = ca.GetSize(); |
| 417 if (index < 0 || index >= iCount) { | 417 if (index < 0 || index >= iCount) { |
| 418 return NULL; | 418 return NULL; |
| 419 } | 419 } |
| 420 CFX_TxtChar* pTC; | 420 CFX_TxtChar* pTC; |
| 421 int32_t iStart = iCount - 1; | 421 int32_t iStart = iCount - 1; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 442 return NULL; | 442 return NULL; |
| 443 } | 443 } |
| 444 } | 444 } |
| 445 CFX_TxtPieceArray* CFX_TxtBreak::GetTxtPieces(FX_BOOL bReady) const { | 445 CFX_TxtPieceArray* CFX_TxtBreak::GetTxtPieces(FX_BOOL bReady) const { |
| 446 CFX_TxtLine* pTxtLine = GetTxtLine(bReady); | 446 CFX_TxtLine* pTxtLine = GetTxtLine(bReady); |
| 447 if (pTxtLine == NULL) { | 447 if (pTxtLine == NULL) { |
| 448 return NULL; | 448 return NULL; |
| 449 } | 449 } |
| 450 return pTxtLine->m_pLinePieces; | 450 return pTxtLine->m_pLinePieces; |
| 451 } | 451 } |
| 452 inline FX_DWORD CFX_TxtBreak::GetUnifiedCharType(FX_DWORD dwType) const { | 452 inline uint32_t CFX_TxtBreak::GetUnifiedCharType(uint32_t dwType) const { |
| 453 return dwType >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : dwType; | 453 return dwType >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : dwType; |
| 454 } | 454 } |
| 455 void CFX_TxtBreak::ResetArabicContext() { | 455 void CFX_TxtBreak::ResetArabicContext() { |
| 456 if (m_bArabicContext) { | 456 if (m_bArabicContext) { |
| 457 m_bCurRTL = m_iCurArabicContext > 1; | 457 m_bCurRTL = m_iCurArabicContext > 1; |
| 458 m_iCurAlignment = m_iCurArabicContext > 1 ? FX_TXTLINEALIGNMENT_Right | 458 m_iCurAlignment = m_iCurArabicContext > 1 ? FX_TXTLINEALIGNMENT_Right |
| 459 : FX_TXTLINEALIGNMENT_Left; | 459 : FX_TXTLINEALIGNMENT_Left; |
| 460 m_iCurAlignment |= (m_iAlignment & FX_TXTLINEALIGNMENT_HigherMask); | 460 m_iCurAlignment |= (m_iAlignment & FX_TXTLINEALIGNMENT_HigherMask); |
| 461 m_bArabicNumber = m_iArabicContext >= 1 && m_bArabicShapes; | 461 m_bArabicNumber = m_iArabicContext >= 1 && m_bArabicShapes; |
| 462 } else { | 462 } else { |
| 463 if (m_bPagination) { | 463 if (m_bPagination) { |
| 464 m_bCurRTL = FALSE; | 464 m_bCurRTL = FALSE; |
| 465 m_iCurAlignment = 0; | 465 m_iCurAlignment = 0; |
| 466 } else { | 466 } else { |
| 467 m_bCurRTL = m_bRTL; | 467 m_bCurRTL = m_bRTL; |
| 468 m_iCurAlignment = m_iAlignment; | 468 m_iCurAlignment = m_iAlignment; |
| 469 } | 469 } |
| 470 if (m_bRTL) { | 470 if (m_bRTL) { |
| 471 m_bArabicNumber = m_iArabicContext >= 1; | 471 m_bArabicNumber = m_iArabicContext >= 1; |
| 472 } else { | 472 } else { |
| 473 m_bArabicNumber = m_iArabicContext > 1; | 473 m_bArabicNumber = m_iArabicContext > 1; |
| 474 } | 474 } |
| 475 m_bArabicNumber = m_bArabicNumber && m_bArabicShapes; | 475 m_bArabicNumber = m_bArabicNumber && m_bArabicShapes; |
| 476 } | 476 } |
| 477 m_bArabicComma = m_bArabicNumber; | 477 m_bArabicComma = m_bArabicNumber; |
| 478 ResetContextCharStyles(); | 478 ResetContextCharStyles(); |
| 479 } | 479 } |
| 480 void CFX_TxtBreak::AppendChar_PageLoad(CFX_Char* pCurChar, FX_DWORD dwProps) { | 480 void CFX_TxtBreak::AppendChar_PageLoad(CFX_Char* pCurChar, uint32_t dwProps) { |
| 481 if (!m_bPagination) { | 481 if (!m_bPagination) { |
| 482 ((CFX_TxtChar*)pCurChar)->m_dwStatus = 0; | 482 ((CFX_TxtChar*)pCurChar)->m_dwStatus = 0; |
| 483 ((CFX_TxtChar*)pCurChar)->m_pUserData = m_pUserData; | 483 ((CFX_TxtChar*)pCurChar)->m_pUserData = m_pUserData; |
| 484 } | 484 } |
| 485 if (m_bArabicContext || m_bArabicShapes) { | 485 if (m_bArabicContext || m_bArabicShapes) { |
| 486 int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS; | 486 int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS; |
| 487 int32_t iArabicContext = | 487 int32_t iArabicContext = |
| 488 (iBidiCls == FX_BIDICLASS_R || iBidiCls == FX_BIDICLASS_AL) | 488 (iBidiCls == FX_BIDICLASS_R || iBidiCls == FX_BIDICLASS_AL) |
| 489 ? 2 | 489 ? 2 |
| 490 : ((iBidiCls == FX_BIDICLASS_L || iBidiCls == FX_BIDICLASS_S) ? 0 | 490 : ((iBidiCls == FX_BIDICLASS_L || iBidiCls == FX_BIDICLASS_S) ? 0 |
| 491 : 1); | 491 : 1); |
| 492 if (iArabicContext != m_iArabicContext && iArabicContext != 1) { | 492 if (iArabicContext != m_iArabicContext && iArabicContext != 1) { |
| 493 m_iArabicContext = iArabicContext; | 493 m_iArabicContext = iArabicContext; |
| 494 if (m_iCurArabicContext == 1) { | 494 if (m_iCurArabicContext == 1) { |
| 495 m_iCurArabicContext = iArabicContext; | 495 m_iCurArabicContext = iArabicContext; |
| 496 } | 496 } |
| 497 ResetArabicContext(); | 497 ResetArabicContext(); |
| 498 if (!m_bPagination) { | 498 if (!m_bPagination) { |
| 499 CFX_TxtChar* pLastChar = (CFX_TxtChar*)GetLastChar(1, FALSE); | 499 CFX_TxtChar* pLastChar = (CFX_TxtChar*)GetLastChar(1, FALSE); |
| 500 if (pLastChar != NULL && pLastChar->m_dwStatus < 1) { | 500 if (pLastChar != NULL && pLastChar->m_dwStatus < 1) { |
| 501 pLastChar->m_dwStatus = FX_TXTBREAK_PieceBreak; | 501 pLastChar->m_dwStatus = FX_TXTBREAK_PieceBreak; |
| 502 } | 502 } |
| 503 } | 503 } |
| 504 } | 504 } |
| 505 } | 505 } |
| 506 pCurChar->m_dwCharStyles = m_dwContextCharStyles; | 506 pCurChar->m_dwCharStyles = m_dwContextCharStyles; |
| 507 } | 507 } |
| 508 FX_DWORD CFX_TxtBreak::AppendChar_Combination(CFX_Char* pCurChar, | 508 uint32_t CFX_TxtBreak::AppendChar_Combination(CFX_Char* pCurChar, |
| 509 int32_t iRotation) { | 509 int32_t iRotation) { |
| 510 FXSYS_assert(pCurChar != NULL); | 510 FXSYS_assert(pCurChar != NULL); |
| 511 FX_WCHAR wch = pCurChar->m_wCharCode; | 511 FX_WCHAR wch = pCurChar->m_wCharCode; |
| 512 FX_WCHAR wForm; | 512 FX_WCHAR wForm; |
| 513 int32_t iCharWidth = 0; | 513 int32_t iCharWidth = 0; |
| 514 CFX_Char* pLastChar; | 514 CFX_Char* pLastChar; |
| 515 pCurChar->m_iCharWidth = -1; | 515 pCurChar->m_iCharWidth = -1; |
| 516 if (m_bCombText) { | 516 if (m_bCombText) { |
| 517 iCharWidth = m_iCombWidth; | 517 iCharWidth = m_iCombWidth; |
| 518 } else { | 518 } else { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) { | 550 if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) { |
| 551 iCharWidth = 0; | 551 iCharWidth = 0; |
| 552 } | 552 } |
| 553 } | 553 } |
| 554 iCharWidth *= m_iFontSize; | 554 iCharWidth *= m_iFontSize; |
| 555 iCharWidth = iCharWidth * m_iHorScale / 100; | 555 iCharWidth = iCharWidth * m_iHorScale / 100; |
| 556 } | 556 } |
| 557 pCurChar->m_iCharWidth = -iCharWidth; | 557 pCurChar->m_iCharWidth = -iCharWidth; |
| 558 return FX_TXTBREAK_None; | 558 return FX_TXTBREAK_None; |
| 559 } | 559 } |
| 560 FX_DWORD CFX_TxtBreak::AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation) { | 560 uint32_t CFX_TxtBreak::AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation) { |
| 561 m_dwCharType = FX_CHARTYPE_Tab; | 561 m_dwCharType = FX_CHARTYPE_Tab; |
| 562 if ((m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ExpandTab) == 0) { | 562 if ((m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ExpandTab) == 0) { |
| 563 return FX_TXTBREAK_None; | 563 return FX_TXTBREAK_None; |
| 564 } | 564 } |
| 565 int32_t& iLineWidth = m_pCurLine->m_iWidth; | 565 int32_t& iLineWidth = m_pCurLine->m_iWidth; |
| 566 int32_t iCharWidth; | 566 int32_t iCharWidth; |
| 567 if (m_bCombText) { | 567 if (m_bCombText) { |
| 568 iCharWidth = m_iCombWidth; | 568 iCharWidth = m_iCombWidth; |
| 569 } else { | 569 } else { |
| 570 if (m_bEquidistant) { | 570 if (m_bEquidistant) { |
| 571 iCharWidth = iLineWidth; | 571 iCharWidth = iLineWidth; |
| 572 iCharWidth = m_iTabWidth * (iCharWidth / m_iTabWidth + 1) - iCharWidth; | 572 iCharWidth = m_iTabWidth * (iCharWidth / m_iTabWidth + 1) - iCharWidth; |
| 573 if (iCharWidth < FX_TXTBREAK_MinimumTabWidth) { | 573 if (iCharWidth < FX_TXTBREAK_MinimumTabWidth) { |
| 574 iCharWidth += m_iTabWidth; | 574 iCharWidth += m_iTabWidth; |
| 575 } | 575 } |
| 576 } else { | 576 } else { |
| 577 iCharWidth = m_iTabWidth; | 577 iCharWidth = m_iTabWidth; |
| 578 } | 578 } |
| 579 } | 579 } |
| 580 pCurChar->m_iCharWidth = iCharWidth; | 580 pCurChar->m_iCharWidth = iCharWidth; |
| 581 iLineWidth += iCharWidth; | 581 iLineWidth += iCharWidth; |
| 582 if (!m_bSingleLine && iLineWidth >= m_iLineWidth + m_iTolerance) { | 582 if (!m_bSingleLine && iLineWidth >= m_iLineWidth + m_iTolerance) { |
| 583 return EndBreak(FX_TXTBREAK_LineBreak); | 583 return EndBreak(FX_TXTBREAK_LineBreak); |
| 584 } | 584 } |
| 585 return FX_TXTBREAK_None; | 585 return FX_TXTBREAK_None; |
| 586 } | 586 } |
| 587 FX_DWORD CFX_TxtBreak::AppendChar_Control(CFX_Char* pCurChar, | 587 uint32_t CFX_TxtBreak::AppendChar_Control(CFX_Char* pCurChar, |
| 588 int32_t iRotation) { | 588 int32_t iRotation) { |
| 589 m_dwCharType = FX_CHARTYPE_Control; | 589 m_dwCharType = FX_CHARTYPE_Control; |
| 590 FX_DWORD dwRet = FX_TXTBREAK_None; | 590 uint32_t dwRet = FX_TXTBREAK_None; |
| 591 if (!m_bSingleLine) { | 591 if (!m_bSingleLine) { |
| 592 FX_WCHAR wch = pCurChar->m_wCharCode; | 592 FX_WCHAR wch = pCurChar->m_wCharCode; |
| 593 switch (wch) { | 593 switch (wch) { |
| 594 case L'\v': | 594 case L'\v': |
| 595 case 0x2028: | 595 case 0x2028: |
| 596 dwRet = FX_TXTBREAK_LineBreak; | 596 dwRet = FX_TXTBREAK_LineBreak; |
| 597 break; | 597 break; |
| 598 case L'\f': | 598 case L'\f': |
| 599 dwRet = FX_TXTBREAK_PageBreak; | 599 dwRet = FX_TXTBREAK_PageBreak; |
| 600 break; | 600 break; |
| 601 case 0x2029: | 601 case 0x2029: |
| 602 dwRet = FX_TXTBREAK_ParagraphBreak; | 602 dwRet = FX_TXTBREAK_ParagraphBreak; |
| 603 break; | 603 break; |
| 604 default: | 604 default: |
| 605 if (wch == m_wParagBreakChar) { | 605 if (wch == m_wParagBreakChar) { |
| 606 dwRet = FX_TXTBREAK_ParagraphBreak; | 606 dwRet = FX_TXTBREAK_ParagraphBreak; |
| 607 } | 607 } |
| 608 break; | 608 break; |
| 609 } | 609 } |
| 610 if (dwRet != FX_TXTBREAK_None) { | 610 if (dwRet != FX_TXTBREAK_None) { |
| 611 dwRet = EndBreak(dwRet); | 611 dwRet = EndBreak(dwRet); |
| 612 } | 612 } |
| 613 } | 613 } |
| 614 return dwRet; | 614 return dwRet; |
| 615 } | 615 } |
| 616 FX_DWORD CFX_TxtBreak::AppendChar_Arabic(CFX_Char* pCurChar, | 616 uint32_t CFX_TxtBreak::AppendChar_Arabic(CFX_Char* pCurChar, |
| 617 int32_t iRotation) { | 617 int32_t iRotation) { |
| 618 FX_DWORD dwType = (pCurChar->m_dwCharProps & FX_CHARTYPEBITSMASK); | 618 uint32_t dwType = (pCurChar->m_dwCharProps & FX_CHARTYPEBITSMASK); |
| 619 int32_t& iLineWidth = m_pCurLine->m_iWidth; | 619 int32_t& iLineWidth = m_pCurLine->m_iWidth; |
| 620 FX_WCHAR wForm; | 620 FX_WCHAR wForm; |
| 621 int32_t iCharWidth = 0; | 621 int32_t iCharWidth = 0; |
| 622 CFX_Char* pLastChar = NULL; | 622 CFX_Char* pLastChar = NULL; |
| 623 FX_BOOL bAlef = FALSE; | 623 FX_BOOL bAlef = FALSE; |
| 624 if (!m_bCombText && m_dwCharType >= FX_CHARTYPE_ArabicAlef && | 624 if (!m_bCombText && m_dwCharType >= FX_CHARTYPE_ArabicAlef && |
| 625 m_dwCharType <= FX_CHARTYPE_ArabicDistortion) { | 625 m_dwCharType <= FX_CHARTYPE_ArabicDistortion) { |
| 626 pLastChar = GetLastChar(1); | 626 pLastChar = GetLastChar(1); |
| 627 if (pLastChar != NULL) { | 627 if (pLastChar != NULL) { |
| 628 iCharWidth = pLastChar->m_iCharWidth; | 628 iCharWidth = pLastChar->m_iCharWidth; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 iCharWidth = iCharWidth * m_iHorScale / 100; | 669 iCharWidth = iCharWidth * m_iHorScale / 100; |
| 670 } | 670 } |
| 671 pCurChar->m_iCharWidth = iCharWidth; | 671 pCurChar->m_iCharWidth = iCharWidth; |
| 672 iLineWidth += iCharWidth; | 672 iLineWidth += iCharWidth; |
| 673 m_pCurLine->m_iArabicChars++; | 673 m_pCurLine->m_iArabicChars++; |
| 674 if (!m_bSingleLine && iLineWidth > m_iLineWidth + m_iTolerance) { | 674 if (!m_bSingleLine && iLineWidth > m_iLineWidth + m_iTolerance) { |
| 675 return EndBreak(FX_TXTBREAK_LineBreak); | 675 return EndBreak(FX_TXTBREAK_LineBreak); |
| 676 } | 676 } |
| 677 return FX_TXTBREAK_None; | 677 return FX_TXTBREAK_None; |
| 678 } | 678 } |
| 679 FX_DWORD CFX_TxtBreak::AppendChar_Others(CFX_Char* pCurChar, | 679 uint32_t CFX_TxtBreak::AppendChar_Others(CFX_Char* pCurChar, |
| 680 int32_t iRotation) { | 680 int32_t iRotation) { |
| 681 FX_DWORD dwProps = pCurChar->m_dwCharProps; | 681 uint32_t dwProps = pCurChar->m_dwCharProps; |
| 682 FX_DWORD dwType = (dwProps & FX_CHARTYPEBITSMASK); | 682 uint32_t dwType = (dwProps & FX_CHARTYPEBITSMASK); |
| 683 int32_t& iLineWidth = m_pCurLine->m_iWidth; | 683 int32_t& iLineWidth = m_pCurLine->m_iWidth; |
| 684 int32_t iCharWidth = 0; | 684 int32_t iCharWidth = 0; |
| 685 m_dwCharType = dwType; | 685 m_dwCharType = dwType; |
| 686 FX_WCHAR wch = pCurChar->m_wCharCode; | 686 FX_WCHAR wch = pCurChar->m_wCharCode; |
| 687 FX_WCHAR wForm = wch; | 687 FX_WCHAR wForm = wch; |
| 688 if (dwType == FX_CHARTYPE_Numeric) { | 688 if (dwType == FX_CHARTYPE_Numeric) { |
| 689 if (m_bArabicNumber) { | 689 if (m_bArabicNumber) { |
| 690 wForm = wch + 0x0630; | 690 wForm = wch + 0x0630; |
| 691 pCurChar->m_dwCharStyles |= FX_TXTCHARSTYLE_ArabicIndic; | 691 pCurChar->m_dwCharStyles |= FX_TXTCHARSTYLE_ArabicIndic; |
| 692 } | 692 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 712 iCharWidth += m_iCharSpace; | 712 iCharWidth += m_iCharSpace; |
| 713 pCurChar->m_iCharWidth = iCharWidth; | 713 pCurChar->m_iCharWidth = iCharWidth; |
| 714 iLineWidth += iCharWidth; | 714 iLineWidth += iCharWidth; |
| 715 FX_BOOL bBreak = (dwType != FX_CHARTYPE_Space || | 715 FX_BOOL bBreak = (dwType != FX_CHARTYPE_Space || |
| 716 (m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0); | 716 (m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0); |
| 717 if (!m_bSingleLine && bBreak && iLineWidth > m_iLineWidth + m_iTolerance) { | 717 if (!m_bSingleLine && bBreak && iLineWidth > m_iLineWidth + m_iTolerance) { |
| 718 return EndBreak(FX_TXTBREAK_LineBreak); | 718 return EndBreak(FX_TXTBREAK_LineBreak); |
| 719 } | 719 } |
| 720 return FX_TXTBREAK_None; | 720 return FX_TXTBREAK_None; |
| 721 } | 721 } |
| 722 typedef FX_DWORD (CFX_TxtBreak::*FX_TxtBreak_LPFAppendChar)(CFX_Char* pCurChar, | 722 typedef uint32_t (CFX_TxtBreak::*FX_TxtBreak_LPFAppendChar)(CFX_Char* pCurChar, |
| 723 int32_t iRotation); | 723 int32_t iRotation); |
| 724 static const FX_TxtBreak_LPFAppendChar g_FX_TxtBreak_lpfAppendChar[16] = { | 724 static const FX_TxtBreak_LPFAppendChar g_FX_TxtBreak_lpfAppendChar[16] = { |
| 725 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Tab, | 725 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Tab, |
| 726 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Control, | 726 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Control, |
| 727 &CFX_TxtBreak::AppendChar_Combination, &CFX_TxtBreak::AppendChar_Others, | 727 &CFX_TxtBreak::AppendChar_Combination, &CFX_TxtBreak::AppendChar_Others, |
| 728 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Arabic, | 728 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Arabic, |
| 729 &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Arabic, | 729 &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Arabic, |
| 730 &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Arabic, | 730 &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Arabic, |
| 731 &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Others, | 731 &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Others, |
| 732 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Others, | 732 &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Others, |
| 733 }; | 733 }; |
| 734 FX_DWORD CFX_TxtBreak::AppendChar(FX_WCHAR wch) { | 734 uint32_t CFX_TxtBreak::AppendChar(FX_WCHAR wch) { |
| 735 FX_DWORD dwProps = kTextLayoutCodeProperties[(uint16_t)wch]; | 735 uint32_t dwProps = kTextLayoutCodeProperties[(uint16_t)wch]; |
| 736 FX_DWORD dwType = (dwProps & FX_CHARTYPEBITSMASK); | 736 uint32_t dwType = (dwProps & FX_CHARTYPEBITSMASK); |
| 737 CFX_TxtChar* pCurChar = m_pCurLine->m_pLineChars->AddSpace(); | 737 CFX_TxtChar* pCurChar = m_pCurLine->m_pLineChars->AddSpace(); |
| 738 pCurChar->m_wCharCode = (uint16_t)wch; | 738 pCurChar->m_wCharCode = (uint16_t)wch; |
| 739 pCurChar->m_nRotation = m_iCharRotation; | 739 pCurChar->m_nRotation = m_iCharRotation; |
| 740 pCurChar->m_dwCharProps = dwProps; | 740 pCurChar->m_dwCharProps = dwProps; |
| 741 pCurChar->m_dwCharStyles = 0; | 741 pCurChar->m_dwCharStyles = 0; |
| 742 pCurChar->m_iCharWidth = 0; | 742 pCurChar->m_iCharWidth = 0; |
| 743 pCurChar->m_iHorizontalScale = m_iHorScale; | 743 pCurChar->m_iHorizontalScale = m_iHorScale; |
| 744 pCurChar->m_iVertialScale = m_iVerScale; | 744 pCurChar->m_iVertialScale = m_iVerScale; |
| 745 pCurChar->m_dwStatus = 0; | 745 pCurChar->m_dwStatus = 0; |
| 746 pCurChar->m_iBidiClass = 0; | 746 pCurChar->m_iBidiClass = 0; |
| 747 pCurChar->m_iBidiLevel = 0; | 747 pCurChar->m_iBidiLevel = 0; |
| 748 pCurChar->m_iBidiPos = 0; | 748 pCurChar->m_iBidiPos = 0; |
| 749 pCurChar->m_iBidiOrder = 0; | 749 pCurChar->m_iBidiOrder = 0; |
| 750 pCurChar->m_pUserData = NULL; | 750 pCurChar->m_pUserData = NULL; |
| 751 AppendChar_PageLoad(pCurChar, dwProps); | 751 AppendChar_PageLoad(pCurChar, dwProps); |
| 752 FX_DWORD dwRet1 = FX_TXTBREAK_None; | 752 uint32_t dwRet1 = FX_TXTBREAK_None; |
| 753 if (dwType != FX_CHARTYPE_Combination && | 753 if (dwType != FX_CHARTYPE_Combination && |
| 754 GetUnifiedCharType(m_dwCharType) != GetUnifiedCharType(dwType)) { | 754 GetUnifiedCharType(m_dwCharType) != GetUnifiedCharType(dwType)) { |
| 755 if (m_dwCharType > 0 && | 755 if (m_dwCharType > 0 && |
| 756 m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance && !m_bSingleLine) { | 756 m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance && !m_bSingleLine) { |
| 757 if (m_dwCharType != FX_CHARTYPE_Space || dwType != FX_CHARTYPE_Control) { | 757 if (m_dwCharType != FX_CHARTYPE_Space || dwType != FX_CHARTYPE_Control) { |
| 758 dwRet1 = EndBreak(FX_TXTBREAK_LineBreak); | 758 dwRet1 = EndBreak(FX_TXTBREAK_LineBreak); |
| 759 int32_t iCount = m_pCurLine->CountChars(); | 759 int32_t iCount = m_pCurLine->CountChars(); |
| 760 if (iCount > 0) { | 760 if (iCount > 0) { |
| 761 pCurChar = m_pCurLine->m_pLineChars->GetDataPtr(iCount - 1); | 761 pCurChar = m_pCurLine->m_pLineChars->GetDataPtr(iCount - 1); |
| 762 } | 762 } |
| 763 } | 763 } |
| 764 } | 764 } |
| 765 } | 765 } |
| 766 int32_t iRotation = m_iRotation; | 766 int32_t iRotation = m_iRotation; |
| 767 if (m_bVertical && (dwProps & 0x8000) != 0) { | 767 if (m_bVertical && (dwProps & 0x8000) != 0) { |
| 768 iRotation = (iRotation + 1) % 4; | 768 iRotation = (iRotation + 1) % 4; |
| 769 } | 769 } |
| 770 FX_DWORD dwRet2 = | 770 uint32_t dwRet2 = |
| 771 (this->*g_FX_TxtBreak_lpfAppendChar[dwType >> FX_CHARTYPEBITS])( | 771 (this->*g_FX_TxtBreak_lpfAppendChar[dwType >> FX_CHARTYPEBITS])( |
| 772 pCurChar, iRotation); | 772 pCurChar, iRotation); |
| 773 return std::max(dwRet1, dwRet2); | 773 return std::max(dwRet1, dwRet2); |
| 774 } | 774 } |
| 775 void CFX_TxtBreak::EndBreak_UpdateArabicShapes() { | 775 void CFX_TxtBreak::EndBreak_UpdateArabicShapes() { |
| 776 FXSYS_assert(m_bArabicShapes); | 776 FXSYS_assert(m_bArabicShapes); |
| 777 int32_t iCount = m_pCurLine->CountChars(); | 777 int32_t iCount = m_pCurLine->CountChars(); |
| 778 if (iCount < 2) { | 778 if (iCount < 2) { |
| 779 return; | 779 return; |
| 780 } | 780 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 pCur->m_iCharWidth = iCharWidth; | 818 pCur->m_iCharWidth = iCharWidth; |
| 819 iLineWidth += iCharWidth; | 819 iLineWidth += iCharWidth; |
| 820 } | 820 } |
| 821 } | 821 } |
| 822 bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; | 822 bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; |
| 823 pCur = pNext; | 823 pCur = pNext; |
| 824 } while (i < iCount); | 824 } while (i < iCount); |
| 825 } | 825 } |
| 826 FX_BOOL CFX_TxtBreak::EndBreak_SplitLine(CFX_TxtLine* pNextLine, | 826 FX_BOOL CFX_TxtBreak::EndBreak_SplitLine(CFX_TxtLine* pNextLine, |
| 827 FX_BOOL bAllChars, | 827 FX_BOOL bAllChars, |
| 828 FX_DWORD dwStatus) { | 828 uint32_t dwStatus) { |
| 829 int32_t iCount = m_pCurLine->CountChars(); | 829 int32_t iCount = m_pCurLine->CountChars(); |
| 830 FX_BOOL bDone = FALSE; | 830 FX_BOOL bDone = FALSE; |
| 831 CFX_Char* pTC; | 831 CFX_Char* pTC; |
| 832 if (!m_bSingleLine && m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance) { | 832 if (!m_bSingleLine && m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance) { |
| 833 pTC = m_pCurLine->GetCharPtr(iCount - 1); | 833 pTC = m_pCurLine->GetCharPtr(iCount - 1); |
| 834 switch (pTC->GetCharType()) { | 834 switch (pTC->GetCharType()) { |
| 835 case FX_CHARTYPE_Tab: | 835 case FX_CHARTYPE_Tab: |
| 836 case FX_CHARTYPE_Control: | 836 case FX_CHARTYPE_Control: |
| 837 break; | 837 break; |
| 838 case FX_CHARTYPE_Space: | 838 case FX_CHARTYPE_Space: |
| (...skipping 27 matching lines...) Expand all Loading... |
| 866 m_pCurLine = pNextLine; | 866 m_pCurLine = pNextLine; |
| 867 m_dwCharType = 0; | 867 m_dwCharType = 0; |
| 868 return TRUE; | 868 return TRUE; |
| 869 } | 869 } |
| 870 if (bAllChars && !bDone) { | 870 if (bAllChars && !bDone) { |
| 871 int32_t iEndPos = m_pCurLine->m_iWidth; | 871 int32_t iEndPos = m_pCurLine->m_iWidth; |
| 872 GetBreakPos(*m_pCurLine->m_pLineChars, iEndPos, bAllChars, TRUE); | 872 GetBreakPos(*m_pCurLine->m_pLineChars, iEndPos, bAllChars, TRUE); |
| 873 } | 873 } |
| 874 return FALSE; | 874 return FALSE; |
| 875 } | 875 } |
| 876 void CFX_TxtBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, FX_DWORD dwStatus) { | 876 void CFX_TxtBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) { |
| 877 CFX_TxtPiece tp; | 877 CFX_TxtPiece tp; |
| 878 FX_TPO tpo; | 878 FX_TPO tpo; |
| 879 CFX_TxtChar* pTC; | 879 CFX_TxtChar* pTC; |
| 880 int32_t i, j; | 880 int32_t i, j; |
| 881 CFX_TxtCharArray& chars = *m_pCurLine->m_pLineChars; | 881 CFX_TxtCharArray& chars = *m_pCurLine->m_pLineChars; |
| 882 int32_t iCount = m_pCurLine->CountChars(); | 882 int32_t iCount = m_pCurLine->CountChars(); |
| 883 FX_BOOL bDone = (m_pCurLine->m_iArabicChars > 0 || m_bCurRTL); | 883 FX_BOOL bDone = (m_pCurLine->m_iArabicChars > 0 || m_bCurRTL); |
| 884 if (!m_bPagination && bDone) { | 884 if (!m_bPagination && bDone) { |
| 885 int32_t iBidiNum = 0; | 885 int32_t iBidiNum = 0; |
| 886 for (i = 0; i < iCount; i++) { | 886 for (i = 0; i < iCount; i++) { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 tp.m_iHorizontalScale = pTC->m_iHorizontalScale; | 976 tp.m_iHorizontalScale = pTC->m_iHorizontalScale; |
| 977 tp.m_iVerticalScale = pTC->m_iVertialScale; | 977 tp.m_iVerticalScale = pTC->m_iVertialScale; |
| 978 pCurPieces->Add(tp); | 978 pCurPieces->Add(tp); |
| 979 tpo.index = 0; | 979 tpo.index = 0; |
| 980 tpo.pos = 0; | 980 tpo.pos = 0; |
| 981 tpos.Add(tpo); | 981 tpos.Add(tpo); |
| 982 } | 982 } |
| 983 } | 983 } |
| 984 void CFX_TxtBreak::EndBreak_Alignment(CFX_TPOArray& tpos, | 984 void CFX_TxtBreak::EndBreak_Alignment(CFX_TPOArray& tpos, |
| 985 FX_BOOL bAllChars, | 985 FX_BOOL bAllChars, |
| 986 FX_DWORD dwStatus) { | 986 uint32_t dwStatus) { |
| 987 int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; | 987 int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; |
| 988 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; | 988 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; |
| 989 int32_t i, j, iCount = pCurPieces->GetSize(); | 989 int32_t i, j, iCount = pCurPieces->GetSize(); |
| 990 FX_BOOL bFind = FALSE; | 990 FX_BOOL bFind = FALSE; |
| 991 FX_TPO tpo; | 991 FX_TPO tpo; |
| 992 CFX_TxtChar* pTC; | 992 CFX_TxtChar* pTC; |
| 993 FX_DWORD dwCharType; | 993 uint32_t dwCharType; |
| 994 for (i = iCount - 1; i > -1; i--) { | 994 for (i = iCount - 1; i > -1; i--) { |
| 995 tpo = tpos.GetAt(i); | 995 tpo = tpos.GetAt(i); |
| 996 CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index); | 996 CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index); |
| 997 if (!bFind) { | 997 if (!bFind) { |
| 998 iNetWidth = ttp.GetEndPos(); | 998 iNetWidth = ttp.GetEndPos(); |
| 999 } | 999 } |
| 1000 FX_BOOL bArabic = FX_IsOdd(ttp.m_iBidiLevel); | 1000 FX_BOOL bArabic = FX_IsOdd(ttp.m_iBidiLevel); |
| 1001 j = bArabic ? 0 : ttp.m_iChars - 1; | 1001 j = bArabic ? 0 : ttp.m_iChars - 1; |
| 1002 while (j > -1 && j < ttp.m_iChars) { | 1002 while (j > -1 && j < ttp.m_iChars) { |
| 1003 pTC = ttp.GetCharPtr(j); | 1003 pTC = ttp.GetCharPtr(j); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1064 iOffset /= 2; | 1064 iOffset /= 2; |
| 1065 } | 1065 } |
| 1066 if (iOffset > 0) { | 1066 if (iOffset > 0) { |
| 1067 for (i = 0; i < iCount; i++) { | 1067 for (i = 0; i < iCount; i++) { |
| 1068 CFX_TxtPiece& ttp = pCurPieces->GetAt(i); | 1068 CFX_TxtPiece& ttp = pCurPieces->GetAt(i); |
| 1069 ttp.m_iStartPos += iOffset; | 1069 ttp.m_iStartPos += iOffset; |
| 1070 } | 1070 } |
| 1071 } | 1071 } |
| 1072 } | 1072 } |
| 1073 } | 1073 } |
| 1074 FX_DWORD CFX_TxtBreak::EndBreak(FX_DWORD dwStatus) { | 1074 uint32_t CFX_TxtBreak::EndBreak(uint32_t dwStatus) { |
| 1075 FXSYS_assert(dwStatus >= FX_TXTBREAK_PieceBreak && | 1075 FXSYS_assert(dwStatus >= FX_TXTBREAK_PieceBreak && |
| 1076 dwStatus <= FX_TXTBREAK_PageBreak); | 1076 dwStatus <= FX_TXTBREAK_PageBreak); |
| 1077 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; | 1077 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; |
| 1078 int32_t iCount = pCurPieces->GetSize(); | 1078 int32_t iCount = pCurPieces->GetSize(); |
| 1079 if (iCount > 0) { | 1079 if (iCount > 0) { |
| 1080 CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); | 1080 CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); |
| 1081 if (dwStatus > FX_TXTBREAK_PieceBreak) { | 1081 if (dwStatus > FX_TXTBREAK_PieceBreak) { |
| 1082 pLastPiece->m_dwStatus = dwStatus; | 1082 pLastPiece->m_dwStatus = dwStatus; |
| 1083 } else { | 1083 } else { |
| 1084 dwStatus = pLastPiece->m_dwStatus; | 1084 dwStatus = pLastPiece->m_dwStatus; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1151 if (m_bSingleLine || iEndPos <= m_iLineWidth) { | 1151 if (m_bSingleLine || iEndPos <= m_iLineWidth) { |
| 1152 if (!bAllChars) { | 1152 if (!bAllChars) { |
| 1153 return iLength; | 1153 return iLength; |
| 1154 } | 1154 } |
| 1155 iBreak = iLength; | 1155 iBreak = iLength; |
| 1156 iBreakPos = iEndPos; | 1156 iBreakPos = iEndPos; |
| 1157 } | 1157 } |
| 1158 FX_BOOL bSpaceBreak = (m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0; | 1158 FX_BOOL bSpaceBreak = (m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0; |
| 1159 FX_BOOL bNumberBreak = (m_dwPolicies & FX_TXTBREAKPOLICY_NumberBreak) != 0; | 1159 FX_BOOL bNumberBreak = (m_dwPolicies & FX_TXTBREAKPOLICY_NumberBreak) != 0; |
| 1160 FX_LINEBREAKTYPE eType; | 1160 FX_LINEBREAKTYPE eType; |
| 1161 FX_DWORD nCodeProp, nCur, nNext; | 1161 uint32_t nCodeProp, nCur, nNext; |
| 1162 CFX_Char* pCur = ca.GetDataPtr(iLength--); | 1162 CFX_Char* pCur = ca.GetDataPtr(iLength--); |
| 1163 if (bAllChars) { | 1163 if (bAllChars) { |
| 1164 pCur->m_nBreakType = FX_LBT_UNKNOWN; | 1164 pCur->m_nBreakType = FX_LBT_UNKNOWN; |
| 1165 } | 1165 } |
| 1166 nCodeProp = pCur->m_dwCharProps; | 1166 nCodeProp = pCur->m_dwCharProps; |
| 1167 nNext = nCodeProp & 0x003F; | 1167 nNext = nCodeProp & 0x003F; |
| 1168 int32_t iCharWidth = pCur->m_iCharWidth; | 1168 int32_t iCharWidth = pCur->m_iCharWidth; |
| 1169 if (iCharWidth > 0) { | 1169 if (iCharWidth > 0) { |
| 1170 iEndPos -= iCharWidth; | 1170 iEndPos -= iCharWidth; |
| 1171 } | 1171 } |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1336 FX_AdjustCharDisplayPos pAdjustPos) const { | 1336 FX_AdjustCharDisplayPos pAdjustPos) const { |
| 1337 if (pTxtRun == NULL || pTxtRun->iLength < 1) { | 1337 if (pTxtRun == NULL || pTxtRun->iLength < 1) { |
| 1338 return 0; | 1338 return 0; |
| 1339 } | 1339 } |
| 1340 IFX_TxtAccess* pAccess = pTxtRun->pAccess; | 1340 IFX_TxtAccess* pAccess = pTxtRun->pAccess; |
| 1341 void* pIdentity = pTxtRun->pIdentity; | 1341 void* pIdentity = pTxtRun->pIdentity; |
| 1342 const FX_WCHAR* pStr = pTxtRun->pStr; | 1342 const FX_WCHAR* pStr = pTxtRun->pStr; |
| 1343 int32_t* pWidths = pTxtRun->pWidths; | 1343 int32_t* pWidths = pTxtRun->pWidths; |
| 1344 int32_t iLength = pTxtRun->iLength - 1; | 1344 int32_t iLength = pTxtRun->iLength - 1; |
| 1345 IFX_Font* pFont = pTxtRun->pFont; | 1345 IFX_Font* pFont = pTxtRun->pFont; |
| 1346 FX_DWORD dwStyles = pTxtRun->dwStyles; | 1346 uint32_t dwStyles = pTxtRun->dwStyles; |
| 1347 CFX_RectF rtText(*pTxtRun->pRect); | 1347 CFX_RectF rtText(*pTxtRun->pRect); |
| 1348 FX_BOOL bRTLPiece = | 1348 FX_BOOL bRTLPiece = |
| 1349 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; | 1349 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; |
| 1350 FX_BOOL bArabicNumber = | 1350 FX_BOOL bArabicNumber = |
| 1351 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; | 1351 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; |
| 1352 FX_BOOL bArabicComma = | 1352 FX_BOOL bArabicComma = |
| 1353 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; | 1353 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; |
| 1354 FX_FLOAT fFontSize = pTxtRun->fFontSize; | 1354 FX_FLOAT fFontSize = pTxtRun->fFontSize; |
| 1355 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); | 1355 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
| 1356 int32_t iAscent = pFont->GetAscent(); | 1356 int32_t iAscent = pFont->GetAscent(); |
| 1357 int32_t iDescent = pFont->GetDescent(); | 1357 int32_t iDescent = pFont->GetDescent(); |
| 1358 int32_t iMaxHeight = iAscent - iDescent; | 1358 int32_t iMaxHeight = iAscent - iDescent; |
| 1359 FX_FLOAT fFontHeight = fFontSize; | 1359 FX_FLOAT fFontHeight = fFontSize; |
| 1360 FX_FLOAT fAscent = fFontHeight * (FX_FLOAT)iAscent / (FX_FLOAT)iMaxHeight; | 1360 FX_FLOAT fAscent = fFontHeight * (FX_FLOAT)iAscent / (FX_FLOAT)iMaxHeight; |
| 1361 FX_FLOAT fDescent = fFontHeight * (FX_FLOAT)iDescent / (FX_FLOAT)iMaxHeight; | 1361 FX_FLOAT fDescent = fFontHeight * (FX_FLOAT)iDescent / (FX_FLOAT)iMaxHeight; |
| 1362 FX_BOOL bVerticalDoc = (dwStyles & FX_TXTLAYOUTSTYLE_VerticalLayout) != 0; | 1362 FX_BOOL bVerticalDoc = (dwStyles & FX_TXTLAYOUTSTYLE_VerticalLayout) != 0; |
| 1363 FX_BOOL bVerticalChar = (dwStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; | 1363 FX_BOOL bVerticalChar = (dwStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; |
| 1364 int32_t iRotation = GetLineRotation(dwStyles) + pTxtRun->iCharRotation; | 1364 int32_t iRotation = GetLineRotation(dwStyles) + pTxtRun->iCharRotation; |
| 1365 int32_t iCharRotation; | 1365 int32_t iCharRotation; |
| 1366 FX_WCHAR wch, wPrev = 0xFEFF, wNext, wForm, wLast = 0xFEFF; | 1366 FX_WCHAR wch, wPrev = 0xFEFF, wNext, wForm, wLast = 0xFEFF; |
| 1367 int32_t iWidth, iCharWidth, iCharHeight; | 1367 int32_t iWidth, iCharWidth, iCharHeight; |
| 1368 FX_FLOAT fX, fY, fCharWidth, fCharHeight; | 1368 FX_FLOAT fX, fY, fCharWidth, fCharHeight; |
| 1369 int32_t iHorScale = pTxtRun->iHorizontalScale; | 1369 int32_t iHorScale = pTxtRun->iHorizontalScale; |
| 1370 int32_t iVerScale = pTxtRun->iVerticalScale; | 1370 int32_t iVerScale = pTxtRun->iVerticalScale; |
| 1371 FX_BOOL bSkipSpace = pTxtRun->bSkipSpace; | 1371 FX_BOOL bSkipSpace = pTxtRun->bSkipSpace; |
| 1372 FX_BOOL bEmptyChar, bShadda = FALSE, bLam = FALSE; | 1372 FX_BOOL bEmptyChar, bShadda = FALSE, bLam = FALSE; |
| 1373 FX_DWORD dwProps, dwCharType; | 1373 uint32_t dwProps, dwCharType; |
| 1374 FX_FORMCHAR formChars[3]; | 1374 FX_FORMCHAR formChars[3]; |
| 1375 FX_FLOAT fYBase; | 1375 FX_FLOAT fYBase; |
| 1376 fX = rtText.left; | 1376 fX = rtText.left; |
| 1377 if (bVerticalDoc) { | 1377 if (bVerticalDoc) { |
| 1378 fX += (rtText.width - fFontSize) / 2.0f; | 1378 fX += (rtText.width - fFontSize) / 2.0f; |
| 1379 fYBase = bRTLPiece ? rtText.bottom() : rtText.top; | 1379 fYBase = bRTLPiece ? rtText.bottom() : rtText.top; |
| 1380 fY = fYBase; | 1380 fY = fYBase; |
| 1381 } else { | 1381 } else { |
| 1382 if (bRTLPiece) { | 1382 if (bRTLPiece) { |
| 1383 fX = rtText.right(); | 1383 fX = rtText.right(); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1592 } | 1592 } |
| 1593 if (dwCharType == FX_CHARTYPE_Combination) { | 1593 if (dwCharType == FX_CHARTYPE_Combination) { |
| 1594 CFX_Rect rtBBox; | 1594 CFX_Rect rtBBox; |
| 1595 rtBBox.Reset(); | 1595 rtBBox.Reset(); |
| 1596 if (pFont->GetCharBBox(wForm, rtBBox, FALSE)) { | 1596 if (pFont->GetCharBBox(wForm, rtBBox, FALSE)) { |
| 1597 pCharPos->m_OriginY = | 1597 pCharPos->m_OriginY = |
| 1598 fYBase + fFontSize - | 1598 fYBase + fFontSize - |
| 1599 fFontSize * (FX_FLOAT)rtBBox.height / (FX_FLOAT)iMaxHeight; | 1599 fFontSize * (FX_FLOAT)rtBBox.height / (FX_FLOAT)iMaxHeight; |
| 1600 } | 1600 } |
| 1601 if (wForm == wch && wLast != 0xFEFF) { | 1601 if (wForm == wch && wLast != 0xFEFF) { |
| 1602 FX_DWORD dwLastProps = FX_GetUnicodeProperties(wLast); | 1602 uint32_t dwLastProps = FX_GetUnicodeProperties(wLast); |
| 1603 if ((dwLastProps & FX_CHARTYPEBITSMASK) == | 1603 if ((dwLastProps & FX_CHARTYPEBITSMASK) == |
| 1604 FX_CHARTYPE_Combination) { | 1604 FX_CHARTYPE_Combination) { |
| 1605 CFX_Rect rtBBox; | 1605 CFX_Rect rtBBox; |
| 1606 rtBBox.Reset(); | 1606 rtBBox.Reset(); |
| 1607 if (pFont->GetCharBBox(wLast, rtBBox, FALSE)) { | 1607 if (pFont->GetCharBBox(wLast, rtBBox, FALSE)) { |
| 1608 pCharPos->m_OriginY -= fFontSize * rtBBox.height / iMaxHeight; | 1608 pCharPos->m_OriginY -= fFontSize * rtBBox.height / iMaxHeight; |
| 1609 } | 1609 } |
| 1610 } | 1610 } |
| 1611 } | 1611 } |
| 1612 } | 1612 } |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1815 rtBBoxF.height = fHeight; | 1815 rtBBoxF.height = fHeight; |
| 1816 rtBBoxF.top = std::max(rtBBoxF.top, 0.0f); | 1816 rtBBoxF.top = std::max(rtBBoxF.top, 0.0f); |
| 1817 } | 1817 } |
| 1818 rtArray.SetAt(i, rtBBoxF); | 1818 rtArray.SetAt(i, rtBBoxF); |
| 1819 continue; | 1819 continue; |
| 1820 } | 1820 } |
| 1821 rtArray.SetAt(i, rect); | 1821 rtArray.SetAt(i, rect); |
| 1822 } | 1822 } |
| 1823 return iLength; | 1823 return iLength; |
| 1824 } | 1824 } |
| OLD | NEW |