Index: xfa/fxfa/app/xfa_textlayout.cpp |
diff --git a/xfa/fxfa/app/xfa_textlayout.cpp b/xfa/fxfa/app/xfa_textlayout.cpp |
index 91dd814e8d8126bca52a1a94e4bda64fa1325e30..5dac28940467bb4cced63fea5640c0b76a832c80 100644 |
--- a/xfa/fxfa/app/xfa_textlayout.cpp |
+++ b/xfa/fxfa/app/xfa_textlayout.cpp |
@@ -33,20 +33,20 @@ void CXFA_TextParseContext::SetDecls(const CFDE_CSSDeclaration** ppDeclArray, |
iDeclCount * sizeof(CFDE_CSSDeclaration*)); |
} |
-CXFA_TextParser::CXFA_TextParser() : m_pAllocator(NULL), m_pUASheet(NULL) {} |
+CXFA_TextParser::CXFA_TextParser() : m_pUASheet(nullptr) {} |
CXFA_TextParser::~CXFA_TextParser() { |
if (m_pUASheet) |
m_pUASheet->Release(); |
- delete m_pAllocator; |
FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition(); |
while (ps) { |
CFDE_XMLNode* pXMLNode; |
CXFA_TextParseContext* pParseContext; |
m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext); |
if (pParseContext) |
- FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext); |
+ FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(), |
+ pParseContext); |
} |
m_mapXMLNodeToParseContext.RemoveAll(); |
} |
@@ -57,11 +57,11 @@ void CXFA_TextParser::Reset() { |
CXFA_TextParseContext* pParseContext; |
m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext); |
if (pParseContext) |
- FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext); |
+ FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(), |
+ pParseContext); |
} |
m_mapXMLNodeToParseContext.RemoveAll(); |
- delete m_pAllocator; |
- m_pAllocator = nullptr; |
+ m_pAllocator.reset(); |
} |
void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) { |
if (!pTextProvider) |
@@ -211,8 +211,8 @@ void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer, |
if (pXMLContainer == NULL || pTextProvider == NULL || m_pAllocator) { |
return; |
} |
- m_pAllocator = IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Fixed, 32, |
- sizeof(CXFA_CSSTagProvider)); |
+ m_pAllocator.reset(IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Fixed, 32, |
+ sizeof(CXFA_CSSTagProvider))); |
InitCSSData(pTextProvider); |
IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider); |
ParseRichText(pXMLContainer, pRootStyle); |
@@ -232,7 +232,7 @@ void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode, |
if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) || |
(tagProvider.GetTagName() != FX_WSTRC(L"html"))) { |
CXFA_TextParseContext* pTextContext = |
- FXTARGET_NewWith(m_pAllocator) CXFA_TextParseContext; |
+ FXTARGET_NewWith(m_pAllocator.get()) CXFA_TextParseContext; |
FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_Inline; |
if (!tagProvider.m_bContent) { |
pNewStyle = CreateStyle(pParentStyle); |
@@ -664,23 +664,17 @@ CXFA_TextLayout::CXFA_TextLayout(CXFA_TextProvider* pTextProvider) |
} |
CXFA_TextLayout::~CXFA_TextLayout() { |
m_textParser.Reset(); |
- delete m_pLoader; |
- delete m_pTabstopContext; |
Unload(); |
} |
void CXFA_TextLayout::Unload() { |
int32_t iCount = m_pieceLines.GetSize(); |
for (int32_t i = 0; i < iCount; i++) { |
CXFA_PieceLine* pLine = m_pieceLines.GetAt(i); |
- FXTARGET_DeleteWith(CXFA_PieceLine, m_pAllocator, pLine); |
+ FXTARGET_DeleteWith(CXFA_PieceLine, m_pAllocator.get(), pLine); |
} |
m_pieceLines.RemoveAll(); |
- if (m_pBreak) { |
- m_pBreak->Release(); |
- m_pBreak = NULL; |
- } |
- delete m_pAllocator; |
- m_pAllocator = nullptr; |
+ m_pBreak.reset(); |
+ m_pAllocator.reset(); |
} |
const CXFA_PieceLineArray* CXFA_TextLayout::GetPieceLines() { |
return &m_pieceLines; |
@@ -851,10 +845,9 @@ void CXFA_TextLayout::InitBreak(IFDE_CSSComputedStyle* pStyle, |
} |
m_pBreak->SetLineStartPos(fStart); |
m_pBreak->SetTabWidth(m_textParser.GetTabInterval(pStyle)); |
- if (m_pTabstopContext == NULL) { |
- m_pTabstopContext = new CXFA_TextTabstopsContext; |
- } |
- m_textParser.GetTabstops(pStyle, m_pTabstopContext); |
+ if (!m_pTabstopContext) |
+ m_pTabstopContext.reset(new CXFA_TextTabstopsContext); |
+ m_textParser.GetTabstops(pStyle, m_pTabstopContext.get()); |
for (int32_t i = 0; i < m_pTabstopContext->m_iTabCount; i++) { |
XFA_TABSTOPS* pTab = m_pTabstopContext->m_tabstops.GetDataPtr(i); |
m_pBreak->AddPositionedTab(pTab->fTabstops); |
@@ -902,9 +895,9 @@ FX_FLOAT CXFA_TextLayout::GetLayoutHeight() { |
return fHeight; |
} |
FX_FLOAT CXFA_TextLayout::StartLayout(FX_FLOAT fWidth) { |
- if (m_pLoader == NULL) { |
- m_pLoader = new CXFA_LoaderContext; |
- } |
+ if (!m_pLoader) |
+ m_pLoader.reset(new CXFA_LoaderContext); |
+ |
if (fWidth < 0 || (m_pLoader->m_fWidth > -1 && |
FXSYS_fabs(fWidth - m_pLoader->m_fWidth) > 0)) { |
m_pLoader->m_lineHeights.RemoveAll(); |
@@ -1013,32 +1006,28 @@ FX_BOOL CXFA_TextLayout::CalcSize(const CFX_SizeF& minSize, |
const CFX_SizeF& maxSize, |
CFX_SizeF& defaultSize) { |
defaultSize.x = maxSize.x; |
- if (defaultSize.x < 1) { |
+ if (defaultSize.x < 1) |
defaultSize.x = 0xFFFF; |
- } |
- if (m_pBreak) |
- m_pBreak->Release(); |
- m_pBreak = CreateBreak(FALSE); |
+ m_pBreak.reset(CreateBreak(FALSE)); |
FX_FLOAT fLinePos = 0; |
m_iLines = 0; |
m_fMaxWidth = 0; |
Loader(defaultSize, fLinePos, FALSE); |
- if (fLinePos < 0.1f) { |
+ if (fLinePos < 0.1f) |
fLinePos = m_textParser.GetFontSize(m_pTextProvider, NULL); |
- } |
- delete m_pTabstopContext; |
- m_pTabstopContext = nullptr; |
+ |
+ m_pTabstopContext.reset(); |
defaultSize = CFX_SizeF(m_fMaxWidth, fLinePos); |
return TRUE; |
} |
FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) { |
- if (size.x < 1) { |
+ if (size.x < 1) |
return FALSE; |
- } |
+ |
Unload(); |
- m_pBreak = CreateBreak(TRUE); |
+ m_pBreak.reset(CreateBreak(TRUE)); |
if (m_pLoader) { |
m_pLoader->m_iTotalLines = -1; |
m_pLoader->m_iChar = 0; |
@@ -1047,8 +1036,7 @@ FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) { |
FX_FLOAT fLinePos = 0; |
Loader(size, fLinePos, TRUE); |
UpdateAlign(size.y, fLinePos); |
- delete m_pTabstopContext; |
- m_pTabstopContext = nullptr; |
+ m_pTabstopContext.reset(); |
if (fHeight) |
*fHeight = fLinePos; |
return TRUE; |
@@ -1074,7 +1062,7 @@ FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) { |
} |
if (iBlock == iBlocksHeightCount) { |
Unload(); |
- m_pBreak = CreateBreak(TRUE); |
+ m_pBreak.reset(CreateBreak(TRUE)); |
fLinePos = m_pLoader->m_fStartLineOffset; |
for (int32_t i = 0; i < iBlocksHeightCount; i++) { |
fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1); |
@@ -1145,10 +1133,8 @@ FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) { |
} |
} |
if (iBlock == iCount) { |
- delete m_pTabstopContext; |
- m_pTabstopContext = nullptr; |
- delete m_pLoader; |
- m_pLoader = nullptr; |
+ m_pTabstopContext.reset(); |
+ m_pLoader.reset(); |
} |
return TRUE; |
} |
@@ -1283,13 +1269,14 @@ void CXFA_TextLayout::UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom) { |
FX_BOOL CXFA_TextLayout::Loader(const CFX_SizeF& szText, |
FX_FLOAT& fLinePos, |
FX_BOOL bSavePieces) { |
- if (!m_pAllocator) |
- m_pAllocator = IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Static, 256, 0); |
- |
+ if (!m_pAllocator) { |
+ m_pAllocator.reset( |
+ IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Static, 256, 0)); |
+ } |
GetTextDataNode(); |
- if (m_pTextDataNode == NULL) { |
+ if (!m_pTextDataNode) |
return TRUE; |
- } |
+ |
if (m_bRichText) { |
CFDE_XMLNode* pXMLContainer = GetXMLContainerNode(); |
if (pXMLContainer) { |
@@ -1403,8 +1390,8 @@ FX_BOOL CXFA_TextLayout::LoadRichText(CFDE_XMLNode* pXMLNode, |
ASSERT(pElement); |
pElement->GetString(L"href", wsLinkContent); |
if (!wsLinkContent.IsEmpty()) { |
- pLinkData = FXTARGET_NewWith(m_pAllocator) CXFA_LinkUserData( |
- m_pAllocator, |
+ pLinkData = FXTARGET_NewWith(m_pAllocator.get()) CXFA_LinkUserData( |
+ m_pAllocator.get(), |
wsLinkContent.GetBuffer(wsLinkContent.GetLength())); |
wsLinkContent.ReleaseBuffer(wsLinkContent.GetLength()); |
} |
@@ -1459,8 +1446,8 @@ FX_BOOL CXFA_TextLayout::LoadRichText(CFDE_XMLNode* pXMLNode, |
if (pLinkData) { |
pLinkData->AddRef(); |
} |
- CXFA_TextUserData* pUserData = FXTARGET_NewWith(m_pAllocator) |
- CXFA_TextUserData(m_pAllocator, |
+ CXFA_TextUserData* pUserData = FXTARGET_NewWith(m_pAllocator.get()) |
+ CXFA_TextUserData(m_pAllocator.get(), |
bContentNode ? pParentStyle : pStyle, |
pLinkData); |
m_pBreak->SetUserData(pUserData); |
@@ -1683,7 +1670,8 @@ void CXFA_TextLayout::AppendTextLine(uint32_t dwStatus, |
} |
IFDE_CSSComputedStyle* pStyle = NULL; |
if (bSavePieces) { |
- CXFA_PieceLine* pPieceLine = FXTARGET_NewWith(m_pAllocator) CXFA_PieceLine; |
+ CXFA_PieceLine* pPieceLine = |
+ FXTARGET_NewWith(m_pAllocator.get()) CXFA_PieceLine; |
m_pieceLines.Add(pPieceLine); |
if (m_pTabstopContext) { |
m_pTabstopContext->Reset(); |
@@ -1696,7 +1684,7 @@ void CXFA_TextLayout::AppendTextLine(uint32_t dwStatus, |
if (pUserData) |
pStyle = pUserData->m_pStyle; |
FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f; |
- XFA_TextPiece* pTP = FXTARGET_NewWith(m_pAllocator) XFA_TextPiece(); |
+ XFA_TextPiece* pTP = FXTARGET_NewWith(m_pAllocator.get()) XFA_TextPiece(); |
pTP->pszText = |
(FX_WCHAR*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(FX_WCHAR)); |
pTP->pWidths = |