Chromium Code Reviews| 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(); |
|
Wei Li
2016/05/06 22:01:21
Is the cast needed? Ditto for all below.
Tom Sepez
2016/05/11 17:05:39
Yes, otherwise error: no member named 'm_pCapTextL
|
| 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 |