Index: xfa/fgas/layout/fgas_rtfbreak.cpp |
diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp |
index 8e4fbf79698d18d6e1f16b11559e702afb0ad5fc..cacb77fcf803e8e1755fdaa081afc6b23da5d270 100644 |
--- a/xfa/fgas/layout/fgas_rtfbreak.cpp |
+++ b/xfa/fgas/layout/fgas_rtfbreak.cpp |
@@ -93,13 +93,10 @@ void CFX_RTFBreak::SetLayoutStyles(uint32_t dwLayoutStyles) { |
m_iRotation %= 4; |
} |
-void CFX_RTFBreak::SetFont(CFGAS_GEFont* pFont) { |
- if (!pFont) { |
+void CFX_RTFBreak::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; |
@@ -111,6 +108,7 @@ void CFX_RTFBreak::SetFont(CFGAS_GEFont* pFont) { |
} |
} |
} |
+ |
void CFX_RTFBreak::SetFontSize(FX_FLOAT fFontSize) { |
int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
if (m_iFontSize == iFontSize) { |
@@ -1184,7 +1182,7 @@ int32_t CFX_RTFBreak::GetDisplayPos(const FX_RTFTEXTOBJ* pText, |
const FX_WCHAR* pStr = pText->pStr; |
int32_t* pWidths = pText->pWidths; |
int32_t iLength = pText->iLength - 1; |
- CFGAS_GEFont* pFont = pText->pFont; |
+ CFX_RetainPtr<CFGAS_GEFont> pFont = pText->pFont; |
uint32_t dwStyles = pText->dwLayoutStyles; |
CFX_RectF rtText(*pText->pRect); |
bool bRTLPiece = FX_IsOdd(pText->iBidiLevel); |
@@ -1419,9 +1417,9 @@ int32_t CFX_RTFBreak::GetDisplayPos(const FX_RTFTEXTOBJ* pText, |
int32_t CFX_RTFBreak::GetCharRects(const FX_RTFTEXTOBJ* pText, |
CFX_RectFArray& rtArray, |
bool bCharBBox) const { |
- if (!pText || pText->iLength < 1) { |
+ if (!pText || pText->iLength < 1) |
return 0; |
- } |
+ |
ASSERT(pText->pStr && pText->pWidths && pText->pFont && pText->pRect); |
const FX_WCHAR* pStr = pText->pStr; |
int32_t* pWidths = pText->pWidths; |
@@ -1431,15 +1429,15 @@ int32_t CFX_RTFBreak::GetCharRects(const FX_RTFTEXTOBJ* pText, |
FX_FLOAT fFontSize = pText->fFontSize; |
int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
FX_FLOAT fScale = fFontSize / 1000.0f; |
- CFGAS_GEFont* pFont = pText->pFont; |
- if (!pFont) { |
+ CFX_RetainPtr<CFGAS_GEFont> pFont = pText->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(); |
@@ -1566,3 +1564,5 @@ FX_RTFTEXTOBJ::FX_RTFTEXTOBJ() |
wLineBreakChar(L'\n'), |
iHorizontalScale(100), |
iVerticalScale(100) {} |
+ |
+FX_RTFTEXTOBJ::~FX_RTFTEXTOBJ() {} |