| Index: xfa/fgas/layout/fgas_textbreak.cpp
|
| diff --git a/xfa/fgas/layout/fgas_textbreak.cpp b/xfa/fgas/layout/fgas_textbreak.cpp
|
| index a3f8e9841de4d2e2197d371a70088bda0d6a1e02..a9d35a3cd769dc13185145174499e62a77871010 100644
|
| --- a/xfa/fgas/layout/fgas_textbreak.cpp
|
| +++ b/xfa/fgas/layout/fgas_textbreak.cpp
|
| @@ -112,13 +112,10 @@ void CFX_TxtBreak::SetLayoutStyles(uint32_t dwLayoutStyles) {
|
| m_iRotation %= 4;
|
| }
|
|
|
| -void CFX_TxtBreak::SetFont(CFGAS_GEFont* pFont) {
|
| - if (!pFont) {
|
| +void CFX_TxtBreak::SetFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont) {
|
| + if (!pFont || pFont == m_pFont)
|
| return;
|
| - }
|
| - if (m_pFont == pFont) {
|
| - return;
|
| - }
|
| +
|
| SetBreakStatus();
|
| m_pFont = pFont;
|
| m_iDefChar = 0;
|
| @@ -1214,7 +1211,7 @@ int32_t CFX_TxtBreak::GetDisplayPos(const FX_TXTRUN* pTxtRun,
|
| const FX_WCHAR* pStr = pTxtRun->wsStr.c_str();
|
| int32_t* pWidths = pTxtRun->pWidths;
|
| int32_t iLength = pTxtRun->iLength - 1;
|
| - CFGAS_GEFont* pFont = pTxtRun->pFont;
|
| + CFX_RetainPtr<CFGAS_GEFont> pFont = pTxtRun->pFont;
|
| uint32_t dwStyles = pTxtRun->dwStyles;
|
| CFX_RectF rtText(*pTxtRun->pRect);
|
| bool bRTLPiece = (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0;
|
| @@ -1593,9 +1590,9 @@ int32_t CFX_TxtBreak::GetDisplayPos(const FX_TXTRUN* pTxtRun,
|
| int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun,
|
| CFX_RectFArray& rtArray,
|
| bool bCharBBox) const {
|
| - if (!pTxtRun || pTxtRun->iLength < 1) {
|
| + if (!pTxtRun || pTxtRun->iLength < 1)
|
| return 0;
|
| - }
|
| +
|
| IFX_TxtAccess* pAccess = pTxtRun->pAccess;
|
| const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity;
|
| const FX_WCHAR* pStr = pTxtRun->wsStr.c_str();
|
| @@ -1606,15 +1603,15 @@ int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun,
|
| FX_FLOAT fFontSize = pTxtRun->fFontSize;
|
| int32_t iFontSize = FXSYS_round(fFontSize * 20.0f);
|
| FX_FLOAT fScale = fFontSize / 1000.0f;
|
| - CFGAS_GEFont* pFont = pTxtRun->pFont;
|
| - if (!pFont) {
|
| + CFX_RetainPtr<CFGAS_GEFont> pFont = pTxtRun->pFont;
|
| + if (!pFont)
|
| bCharBBox = false;
|
| - }
|
| +
|
| CFX_Rect bbox;
|
| bbox.Set(0, 0, 0, 0);
|
| - if (bCharBBox) {
|
| + if (bCharBBox)
|
| bCharBBox = pFont->GetBBox(bbox);
|
| - }
|
| +
|
| FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale);
|
| FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale);
|
| rtArray.RemoveAll();
|
|
|