| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/app/xfa_ffwidgetacc.h" | 7 #include "xfa/fxfa/app/xfa_ffwidgetacc.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "fxjs/cfxjse_value.h" | 13 #include "fxjs/cfxjse_value.h" |
| 14 #include "third_party/base/ptr_util.h" |
| 14 #include "third_party/base/stl_util.h" | 15 #include "third_party/base/stl_util.h" |
| 15 #include "xfa/fde/tto/fde_textout.h" | 16 #include "xfa/fde/tto/fde_textout.h" |
| 16 #include "xfa/fde/xml/fde_xml_imp.h" | 17 #include "xfa/fde/xml/fde_xml_imp.h" |
| 17 #include "xfa/fxfa/app/xfa_ffcheckbutton.h" | 18 #include "xfa/fxfa/app/xfa_ffcheckbutton.h" |
| 18 #include "xfa/fxfa/app/xfa_ffchoicelist.h" | 19 #include "xfa/fxfa/app/xfa_ffchoicelist.h" |
| 19 #include "xfa/fxfa/app/xfa_fffield.h" | 20 #include "xfa/fxfa/app/xfa_fffield.h" |
| 20 #include "xfa/fxfa/app/xfa_fwladapter.h" | 21 #include "xfa/fxfa/app/xfa_fwladapter.h" |
| 21 #include "xfa/fxfa/app/xfa_textlayout.h" | 22 #include "xfa/fxfa/app/xfa_textlayout.h" |
| 22 #include "xfa/fxfa/cxfa_eventparam.h" | 23 #include "xfa/fxfa/cxfa_eventparam.h" |
| 23 #include "xfa/fxfa/parser/cxfa_layoutprocessor.h" | 24 #include "xfa/fxfa/parser/cxfa_layoutprocessor.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 53 CXFA_TextLayoutData() {} | 54 CXFA_TextLayoutData() {} |
| 54 ~CXFA_TextLayoutData() override {} | 55 ~CXFA_TextLayoutData() override {} |
| 55 | 56 |
| 56 CXFA_TextLayout* GetTextLayout() const { return m_pTextLayout.get(); } | 57 CXFA_TextLayout* GetTextLayout() const { return m_pTextLayout.get(); } |
| 57 CXFA_TextProvider* GetTextProvider() const { return m_pTextProvider.get(); } | 58 CXFA_TextProvider* GetTextProvider() const { return m_pTextProvider.get(); } |
| 58 | 59 |
| 59 void LoadText(CXFA_WidgetAcc* pAcc) { | 60 void LoadText(CXFA_WidgetAcc* pAcc) { |
| 60 if (m_pTextLayout) | 61 if (m_pTextLayout) |
| 61 return; | 62 return; |
| 62 | 63 |
| 63 m_pTextProvider.reset( | 64 m_pTextProvider = |
| 64 new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Text)); | 65 pdfium::MakeUnique<CXFA_TextProvider>(pAcc, XFA_TEXTPROVIDERTYPE_Text); |
| 65 m_pTextLayout.reset(new CXFA_TextLayout(m_pTextProvider.get())); | 66 m_pTextLayout = pdfium::MakeUnique<CXFA_TextLayout>(m_pTextProvider.get()); |
| 66 } | 67 } |
| 67 | 68 |
| 68 private: | 69 private: |
| 69 std::unique_ptr<CXFA_TextLayout> m_pTextLayout; | 70 std::unique_ptr<CXFA_TextLayout> m_pTextLayout; |
| 70 std::unique_ptr<CXFA_TextProvider> m_pTextProvider; | 71 std::unique_ptr<CXFA_TextProvider> m_pTextProvider; |
| 71 }; | 72 }; |
| 72 | 73 |
| 73 class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData { | 74 class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData { |
| 74 public: | 75 public: |
| 75 CXFA_ImageLayoutData() | 76 CXFA_ImageLayoutData() |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 ~CXFA_FieldLayoutData() override {} | 114 ~CXFA_FieldLayoutData() override {} |
| 114 | 115 |
| 115 bool LoadCaption(CXFA_WidgetAcc* pAcc) { | 116 bool LoadCaption(CXFA_WidgetAcc* pAcc) { |
| 116 if (m_pCapTextLayout) | 117 if (m_pCapTextLayout) |
| 117 return true; | 118 return true; |
| 118 CXFA_Caption caption = pAcc->GetCaption(); | 119 CXFA_Caption caption = pAcc->GetCaption(); |
| 119 if (!caption || caption.GetPresence() == XFA_ATTRIBUTEENUM_Hidden) | 120 if (!caption || caption.GetPresence() == XFA_ATTRIBUTEENUM_Hidden) |
| 120 return false; | 121 return false; |
| 121 m_pCapTextProvider.reset( | 122 m_pCapTextProvider.reset( |
| 122 new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption)); | 123 new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption)); |
| 123 m_pCapTextLayout.reset(new CXFA_TextLayout(m_pCapTextProvider.get())); | 124 m_pCapTextLayout = |
| 125 pdfium::MakeUnique<CXFA_TextLayout>(m_pCapTextProvider.get()); |
| 124 return true; | 126 return true; |
| 125 } | 127 } |
| 126 | 128 |
| 127 std::unique_ptr<CXFA_TextLayout> m_pCapTextLayout; | 129 std::unique_ptr<CXFA_TextLayout> m_pCapTextLayout; |
| 128 std::unique_ptr<CXFA_TextProvider> m_pCapTextProvider; | 130 std::unique_ptr<CXFA_TextProvider> m_pCapTextProvider; |
| 129 std::unique_ptr<CFDE_TextOut> m_pTextOut; | 131 std::unique_ptr<CFDE_TextOut> m_pTextOut; |
| 130 std::vector<FX_FLOAT> m_FieldSplitArray; | 132 std::vector<FX_FLOAT> m_FieldSplitArray; |
| 131 }; | 133 }; |
| 132 | 134 |
| 133 class CXFA_TextEditData : public CXFA_FieldLayoutData { | 135 class CXFA_TextEditData : public CXFA_FieldLayoutData { |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 } | 852 } |
| 851 FX_WCHAR wcEnter = '\n'; | 853 FX_WCHAR wcEnter = '\n'; |
| 852 FX_WCHAR wsLast = wsText.GetAt(wsText.GetLength() - 1); | 854 FX_WCHAR wsLast = wsText.GetAt(wsText.GetLength() - 1); |
| 853 if (wsLast == wcEnter) { | 855 if (wsLast == wcEnter) { |
| 854 wsText = wsText + wcEnter; | 856 wsText = wsText + wcEnter; |
| 855 } | 857 } |
| 856 | 858 |
| 857 CXFA_FieldLayoutData* layoutData = | 859 CXFA_FieldLayoutData* layoutData = |
| 858 static_cast<CXFA_FieldLayoutData*>(m_pLayoutData.get()); | 860 static_cast<CXFA_FieldLayoutData*>(m_pLayoutData.get()); |
| 859 if (!layoutData->m_pTextOut) { | 861 if (!layoutData->m_pTextOut) { |
| 860 layoutData->m_pTextOut.reset(new CFDE_TextOut); | 862 layoutData->m_pTextOut = pdfium::MakeUnique<CFDE_TextOut>(); |
| 861 CFDE_TextOut* pTextOut = layoutData->m_pTextOut.get(); | 863 CFDE_TextOut* pTextOut = layoutData->m_pTextOut.get(); |
| 862 pTextOut->SetFont(GetFDEFont()); | 864 pTextOut->SetFont(GetFDEFont()); |
| 863 pTextOut->SetFontSize(fFontSize); | 865 pTextOut->SetFontSize(fFontSize); |
| 864 pTextOut->SetLineBreakTolerance(fFontSize * 0.2f); | 866 pTextOut->SetLineBreakTolerance(fFontSize * 0.2f); |
| 865 pTextOut->SetLineSpace(GetLineHeight()); | 867 pTextOut->SetLineSpace(GetLineHeight()); |
| 866 uint32_t dwStyles = FDE_TTOSTYLE_LastLineHeight; | 868 uint32_t dwStyles = FDE_TTOSTYLE_LastLineHeight; |
| 867 if (GetUIType() == XFA_Element::TextEdit && IsMultiLine()) { | 869 if (GetUIType() == XFA_Element::TextEdit && IsMultiLine()) { |
| 868 dwStyles |= FDE_TTOSTYLE_LineWrap; | 870 dwStyles |= FDE_TTOSTYLE_LineWrap; |
| 869 } | 871 } |
| 870 pTextOut->SetStyles(dwStyles); | 872 pTextOut->SetStyles(dwStyles); |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1381 } | 1383 } |
| 1382 fCalcHeight = 0; | 1384 fCalcHeight = 0; |
| 1383 return true; | 1385 return true; |
| 1384 } | 1386 } |
| 1385 void CXFA_WidgetAcc::InitLayoutData() { | 1387 void CXFA_WidgetAcc::InitLayoutData() { |
| 1386 if (m_pLayoutData) { | 1388 if (m_pLayoutData) { |
| 1387 return; | 1389 return; |
| 1388 } | 1390 } |
| 1389 switch (GetUIType()) { | 1391 switch (GetUIType()) { |
| 1390 case XFA_Element::Text: | 1392 case XFA_Element::Text: |
| 1391 m_pLayoutData.reset(new CXFA_TextLayoutData); | 1393 m_pLayoutData = pdfium::MakeUnique<CXFA_TextLayoutData>(); |
| 1392 return; | 1394 return; |
| 1393 case XFA_Element::TextEdit: | 1395 case XFA_Element::TextEdit: |
| 1394 m_pLayoutData.reset(new CXFA_TextEditData); | 1396 m_pLayoutData = pdfium::MakeUnique<CXFA_TextEditData>(); |
| 1395 return; | 1397 return; |
| 1396 case XFA_Element::Image: | 1398 case XFA_Element::Image: |
| 1397 m_pLayoutData.reset(new CXFA_ImageLayoutData); | 1399 m_pLayoutData = pdfium::MakeUnique<CXFA_ImageLayoutData>(); |
| 1398 return; | 1400 return; |
| 1399 case XFA_Element::ImageEdit: | 1401 case XFA_Element::ImageEdit: |
| 1400 m_pLayoutData.reset(new CXFA_ImageEditData); | 1402 m_pLayoutData = pdfium::MakeUnique<CXFA_ImageEditData>(); |
| 1401 return; | 1403 return; |
| 1402 default: | 1404 default: |
| 1403 break; | 1405 break; |
| 1404 } | 1406 } |
| 1405 if (GetElementType() == XFA_Element::Field) { | 1407 if (GetElementType() == XFA_Element::Field) { |
| 1406 m_pLayoutData.reset(new CXFA_FieldLayoutData); | 1408 m_pLayoutData = pdfium::MakeUnique<CXFA_FieldLayoutData>(); |
| 1407 return; | 1409 return; |
| 1408 } | 1410 } |
| 1409 m_pLayoutData.reset(new CXFA_WidgetLayoutData); | 1411 m_pLayoutData = pdfium::MakeUnique<CXFA_WidgetLayoutData>(); |
| 1410 } | 1412 } |
| 1411 | 1413 |
| 1412 void CXFA_WidgetAcc::StartTextLayout(FX_FLOAT& fCalcWidth, | 1414 void CXFA_WidgetAcc::StartTextLayout(FX_FLOAT& fCalcWidth, |
| 1413 FX_FLOAT& fCalcHeight) { | 1415 FX_FLOAT& fCalcHeight) { |
| 1414 LoadText(); | 1416 LoadText(); |
| 1415 CXFA_TextLayout* pTextLayout = | 1417 CXFA_TextLayout* pTextLayout = |
| 1416 static_cast<CXFA_TextLayoutData*>(m_pLayoutData.get())->GetTextLayout(); | 1418 static_cast<CXFA_TextLayoutData*>(m_pLayoutData.get())->GetTextLayout(); |
| 1417 FX_FLOAT fTextHeight = 0; | 1419 FX_FLOAT fTextHeight = 0; |
| 1418 if (fCalcWidth > 0 && fCalcHeight > 0) { | 1420 if (fCalcWidth > 0 && fCalcHeight > 0) { |
| 1419 FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth); | 1421 FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth); |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1682 if (pIDNode) { | 1684 if (pIDNode) { |
| 1683 pEmbAcc = static_cast<CXFA_WidgetAcc*>(pIDNode->GetWidgetData()); | 1685 pEmbAcc = static_cast<CXFA_WidgetAcc*>(pIDNode->GetWidgetData()); |
| 1684 } | 1686 } |
| 1685 if (pEmbAcc) { | 1687 if (pEmbAcc) { |
| 1686 pEmbAcc->GetValue(wsValue, XFA_VALUEPICTURE_Display); | 1688 pEmbAcc->GetValue(wsValue, XFA_VALUEPICTURE_Display); |
| 1687 return true; | 1689 return true; |
| 1688 } | 1690 } |
| 1689 } | 1691 } |
| 1690 return false; | 1692 return false; |
| 1691 } | 1693 } |
| OLD | NEW |