Index: xfa/fxfa/app/xfa_ffwidgetacc.cpp |
diff --git a/xfa/fxfa/app/xfa_ffwidgetacc.cpp b/xfa/fxfa/app/xfa_ffwidgetacc.cpp |
index ad8cabad3afea0973de15713eb451c51f448a6f1..fd3757ace508b8c7383741cbbe80f68a6841a5b1 100644 |
--- a/xfa/fxfa/app/xfa_ffwidgetacc.cpp |
+++ b/xfa/fxfa/app/xfa_ffwidgetacc.cpp |
@@ -7,6 +7,7 @@ |
#include "xfa/fxfa/app/xfa_ffwidgetacc.h" |
#include <algorithm> |
+#include <memory> |
#include "xfa/fde/tto/fde_textout.h" |
#include "xfa/fde/xml/fde_xml_imp.h" |
@@ -101,50 +102,30 @@ class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData { |
int32_t m_iImageXDpi; |
int32_t m_iImageYDpi; |
}; |
+ |
class CXFA_FieldLayoutData : public CXFA_WidgetLayoutData { |
public: |
- CXFA_FieldLayoutData() |
- : m_pCapTextLayout(NULL), |
- m_pCapTextProvider(NULL), |
- m_pTextOut(NULL), |
- m_pFieldSplitArray(NULL) {} |
- ~CXFA_FieldLayoutData() { |
- if (m_pCapTextLayout) { |
- delete m_pCapTextLayout; |
- } |
- m_pCapTextLayout = NULL; |
- if (m_pCapTextProvider) { |
- delete m_pCapTextProvider; |
- } |
- m_pCapTextProvider = NULL; |
- if (m_pTextOut) { |
- m_pTextOut->Release(); |
- } |
- m_pTextOut = NULL; |
- if (m_pFieldSplitArray) { |
- m_pFieldSplitArray->RemoveAll(); |
- delete m_pFieldSplitArray; |
- m_pFieldSplitArray = NULL; |
- } |
- } |
+ CXFA_FieldLayoutData() {} |
+ ~CXFA_FieldLayoutData() {} |
+ |
FX_BOOL LoadCaption(CXFA_WidgetAcc* pAcc) { |
- if (m_pCapTextLayout) { |
+ if (m_pCapTextLayout) |
return TRUE; |
- } |
CXFA_Caption caption = pAcc->GetCaption(); |
- if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) { |
- m_pCapTextProvider = |
- new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption); |
- m_pCapTextLayout = new CXFA_TextLayout(m_pCapTextProvider); |
- return TRUE; |
- } |
- return FALSE; |
+ if (!caption || caption.GetPresence() == XFA_ATTRIBUTEENUM_Hidden) |
+ return FALSE; |
+ m_pCapTextProvider.reset( |
+ new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption)); |
+ m_pCapTextLayout.reset(new CXFA_TextLayout(m_pCapTextProvider.get())); |
+ return TRUE; |
} |
- CXFA_TextLayout* m_pCapTextLayout; |
- CXFA_TextProvider* m_pCapTextProvider; |
- CFDE_TextOut* m_pTextOut; |
- CFX_FloatArray* m_pFieldSplitArray; |
+ |
+ std::unique_ptr<CXFA_TextLayout> m_pCapTextLayout; |
+ std::unique_ptr<CXFA_TextProvider> m_pCapTextProvider; |
+ std::unique_ptr<CFDE_TextOut> m_pTextOut; |
+ std::unique_ptr<CFX_FloatArray> m_pFieldSplitArray; |
}; |
+ |
class CXFA_TextEditData : public CXFA_FieldLayoutData { |
public: |
}; |
@@ -763,7 +744,7 @@ void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) { |
iCapPlacement == XFA_ATTRIBUTEENUM_Bottom; |
const bool bReserveExit = fCapReserve > 0.01; |
CXFA_TextLayout* pCapTextLayout = |
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout; |
+ static_cast<CXFA_FieldLayoutData*>(m_pLayoutData)->m_pCapTextLayout.get(); |
if (pCapTextLayout) { |
if (!bVert && eUIType != XFA_ELEMENT_Button) { |
szCap.x = fCapReserve; |
@@ -886,8 +867,8 @@ void CXFA_WidgetAcc::CalculateTextContentSize(CFX_SizeF& size) { |
CXFA_FieldLayoutData* layoutData = |
static_cast<CXFA_FieldLayoutData*>(m_pLayoutData); |
if (!layoutData->m_pTextOut) { |
- layoutData->m_pTextOut = new CFDE_TextOut; |
- CFDE_TextOut* pTextOut = layoutData->m_pTextOut; |
+ layoutData->m_pTextOut.reset(new CFDE_TextOut); |
+ CFDE_TextOut* pTextOut = layoutData->m_pTextOut.get(); |
pTextOut->SetFont(GetFDEFont()); |
pTextOut->SetFontSize(fFontSize); |
pTextOut->SetLineBreakTolerance(fFontSize * 0.2f); |
@@ -1264,12 +1245,13 @@ FX_BOOL CXFA_WidgetAcc::FindSplitPos(int32_t iBlockIndex, |
iLinesCount = |
((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut->GetTotalLines(); |
} |
- if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray) { |
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray = |
- new CFX_FloatArray; |
+ if (!static_cast<CXFA_FieldLayoutData*>(m_pLayoutData)->m_pFieldSplitArray) { |
+ static_cast<CXFA_FieldLayoutData*>(m_pLayoutData) |
+ ->m_pFieldSplitArray.reset(new CFX_FloatArray); |
} |
CFX_FloatArray* pFieldArray = |
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray; |
+ static_cast<CXFA_FieldLayoutData*>(m_pLayoutData) |
+ ->m_pFieldSplitArray.get(); |
int32_t iFieldSplitCount = pFieldArray->GetSize(); |
for (int32_t i = 0; i < iBlockIndex * 3; i += 3) { |
iLinesCount -= (int32_t)pFieldArray->GetAt(i + 1); |
@@ -1486,8 +1468,9 @@ FX_BOOL CXFA_WidgetAcc::LoadCaption() { |
} |
CXFA_TextLayout* CXFA_WidgetAcc::GetCaptionTextLayout() { |
return m_pLayoutData |
- ? ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout |
- : NULL; |
+ ? static_cast<CXFA_FieldLayoutData*>(m_pLayoutData) |
+ ->m_pCapTextLayout.get() |
+ : nullptr; |
} |
CXFA_TextLayout* CXFA_WidgetAcc::GetTextLayout() { |
return m_pLayoutData ? ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout |