| 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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0; | 105 m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0; |
| 106 m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0; | 106 m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0; |
| 107 m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; | 107 m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; |
| 108 m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; | 108 m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; |
| 109 ResetArabicContext(); | 109 ResetArabicContext(); |
| 110 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); | 110 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); |
| 111 m_iRotation = m_iLineRotation + m_iCharRotation; | 111 m_iRotation = m_iLineRotation + m_iCharRotation; |
| 112 m_iRotation %= 4; | 112 m_iRotation %= 4; |
| 113 } | 113 } |
| 114 | 114 |
| 115 void CFX_TxtBreak::SetFont(CFGAS_GEFont* pFont) { | 115 void CFX_TxtBreak::SetFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont) { |
| 116 if (!pFont) { | 116 if (!pFont || pFont == m_pFont) |
| 117 return; | 117 return; |
| 118 } | 118 |
| 119 if (m_pFont == pFont) { | |
| 120 return; | |
| 121 } | |
| 122 SetBreakStatus(); | 119 SetBreakStatus(); |
| 123 m_pFont = pFont; | 120 m_pFont = pFont; |
| 124 m_iDefChar = 0; | 121 m_iDefChar = 0; |
| 125 if (m_wDefChar != 0xFEFF && m_pFont) { | 122 if (m_wDefChar != 0xFEFF && m_pFont) { |
| 126 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, false); | 123 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, false); |
| 127 m_iDefChar *= m_iFontSize; | 124 m_iDefChar *= m_iFontSize; |
| 128 } | 125 } |
| 129 } | 126 } |
| 130 | 127 |
| 131 void CFX_TxtBreak::SetFontSize(FX_FLOAT fFontSize) { | 128 void CFX_TxtBreak::SetFontSize(FX_FLOAT fFontSize) { |
| (...skipping 1075 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 CFX_WideString* pWSForms, | 1204 CFX_WideString* pWSForms, |
| 1208 FX_AdjustCharDisplayPos pAdjustPos) const { | 1205 FX_AdjustCharDisplayPos pAdjustPos) const { |
| 1209 if (!pTxtRun || pTxtRun->iLength < 1) { | 1206 if (!pTxtRun || pTxtRun->iLength < 1) { |
| 1210 return 0; | 1207 return 0; |
| 1211 } | 1208 } |
| 1212 IFX_TxtAccess* pAccess = pTxtRun->pAccess; | 1209 IFX_TxtAccess* pAccess = pTxtRun->pAccess; |
| 1213 const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity; | 1210 const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity; |
| 1214 const FX_WCHAR* pStr = pTxtRun->wsStr.c_str(); | 1211 const FX_WCHAR* pStr = pTxtRun->wsStr.c_str(); |
| 1215 int32_t* pWidths = pTxtRun->pWidths; | 1212 int32_t* pWidths = pTxtRun->pWidths; |
| 1216 int32_t iLength = pTxtRun->iLength - 1; | 1213 int32_t iLength = pTxtRun->iLength - 1; |
| 1217 CFGAS_GEFont* pFont = pTxtRun->pFont; | 1214 CFX_RetainPtr<CFGAS_GEFont> pFont = pTxtRun->pFont; |
| 1218 uint32_t dwStyles = pTxtRun->dwStyles; | 1215 uint32_t dwStyles = pTxtRun->dwStyles; |
| 1219 CFX_RectF rtText(*pTxtRun->pRect); | 1216 CFX_RectF rtText(*pTxtRun->pRect); |
| 1220 bool bRTLPiece = (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; | 1217 bool bRTLPiece = (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; |
| 1221 bool bArabicNumber = | 1218 bool bArabicNumber = |
| 1222 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; | 1219 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; |
| 1223 bool bArabicComma = | 1220 bool bArabicComma = |
| 1224 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; | 1221 (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; |
| 1225 FX_FLOAT fFontSize = pTxtRun->fFontSize; | 1222 FX_FLOAT fFontSize = pTxtRun->fFontSize; |
| 1226 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); | 1223 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
| 1227 int32_t iAscent = pFont->GetAscent(); | 1224 int32_t iAscent = pFont->GetAscent(); |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1586 wPrev = (FX_WCHAR)formChars[0].wch; | 1583 wPrev = (FX_WCHAR)formChars[0].wch; |
| 1587 } | 1584 } |
| 1588 wLast = wch; | 1585 wLast = wch; |
| 1589 } | 1586 } |
| 1590 return iCount; | 1587 return iCount; |
| 1591 } | 1588 } |
| 1592 | 1589 |
| 1593 int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun, | 1590 int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun, |
| 1594 CFX_RectFArray& rtArray, | 1591 CFX_RectFArray& rtArray, |
| 1595 bool bCharBBox) const { | 1592 bool bCharBBox) const { |
| 1596 if (!pTxtRun || pTxtRun->iLength < 1) { | 1593 if (!pTxtRun || pTxtRun->iLength < 1) |
| 1597 return 0; | 1594 return 0; |
| 1598 } | 1595 |
| 1599 IFX_TxtAccess* pAccess = pTxtRun->pAccess; | 1596 IFX_TxtAccess* pAccess = pTxtRun->pAccess; |
| 1600 const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity; | 1597 const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity; |
| 1601 const FX_WCHAR* pStr = pTxtRun->wsStr.c_str(); | 1598 const FX_WCHAR* pStr = pTxtRun->wsStr.c_str(); |
| 1602 int32_t* pWidths = pTxtRun->pWidths; | 1599 int32_t* pWidths = pTxtRun->pWidths; |
| 1603 int32_t iLength = pTxtRun->iLength; | 1600 int32_t iLength = pTxtRun->iLength; |
| 1604 CFX_RectF rect(*pTxtRun->pRect); | 1601 CFX_RectF rect(*pTxtRun->pRect); |
| 1605 bool bRTLPiece = (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; | 1602 bool bRTLPiece = (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; |
| 1606 FX_FLOAT fFontSize = pTxtRun->fFontSize; | 1603 FX_FLOAT fFontSize = pTxtRun->fFontSize; |
| 1607 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); | 1604 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
| 1608 FX_FLOAT fScale = fFontSize / 1000.0f; | 1605 FX_FLOAT fScale = fFontSize / 1000.0f; |
| 1609 CFGAS_GEFont* pFont = pTxtRun->pFont; | 1606 CFX_RetainPtr<CFGAS_GEFont> pFont = pTxtRun->pFont; |
| 1610 if (!pFont) { | 1607 if (!pFont) |
| 1611 bCharBBox = false; | 1608 bCharBBox = false; |
| 1612 } | 1609 |
| 1613 CFX_Rect bbox; | 1610 CFX_Rect bbox; |
| 1614 bbox.Set(0, 0, 0, 0); | 1611 bbox.Set(0, 0, 0, 0); |
| 1615 if (bCharBBox) { | 1612 if (bCharBBox) |
| 1616 bCharBBox = pFont->GetBBox(bbox); | 1613 bCharBBox = pFont->GetBBox(bbox); |
| 1617 } | 1614 |
| 1618 FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale); | 1615 FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale); |
| 1619 FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale); | 1616 FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale); |
| 1620 rtArray.RemoveAll(); | 1617 rtArray.RemoveAll(); |
| 1621 rtArray.SetSize(iLength); | 1618 rtArray.SetSize(iLength); |
| 1622 bool bVertical = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_VerticalLayout) != 0; | 1619 bool bVertical = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_VerticalLayout) != 0; |
| 1623 bool bSingleLine = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; | 1620 bool bSingleLine = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; |
| 1624 bool bCombText = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; | 1621 bool bCombText = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; |
| 1625 FX_WCHAR wch, wLineBreakChar = pTxtRun->wLineBreakChar; | 1622 FX_WCHAR wch, wLineBreakChar = pTxtRun->wLineBreakChar; |
| 1626 int32_t iCharSize; | 1623 int32_t iCharSize; |
| 1627 FX_FLOAT fCharSize, fStart; | 1624 FX_FLOAT fCharSize, fStart; |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1737 CFX_TxtLine::CFX_TxtLine(int32_t iBlockSize) | 1734 CFX_TxtLine::CFX_TxtLine(int32_t iBlockSize) |
| 1738 : m_pLineChars(new CFX_TxtCharArray), | 1735 : m_pLineChars(new CFX_TxtCharArray), |
| 1739 m_pLinePieces(new CFX_TxtPieceArray(16)), | 1736 m_pLinePieces(new CFX_TxtPieceArray(16)), |
| 1740 m_iStart(0), | 1737 m_iStart(0), |
| 1741 m_iWidth(0), | 1738 m_iWidth(0), |
| 1742 m_iArabicChars(0) {} | 1739 m_iArabicChars(0) {} |
| 1743 | 1740 |
| 1744 CFX_TxtLine::~CFX_TxtLine() { | 1741 CFX_TxtLine::~CFX_TxtLine() { |
| 1745 RemoveAll(); | 1742 RemoveAll(); |
| 1746 } | 1743 } |
| OLD | NEW |