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_textlayout.h" | 7 #include "xfa/fxfa/app/xfa_textlayout.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 #include "core/fxcrt/fx_ext.h" | 11 #include "core/fxcrt/fx_ext.h" |
| 12 #include "third_party/base/ptr_util.h" |
12 #include "third_party/base/stl_util.h" | 13 #include "third_party/base/stl_util.h" |
13 #include "xfa/fde/cfde_path.h" | 14 #include "xfa/fde/cfde_path.h" |
14 #include "xfa/fde/css/fde_csscache.h" | 15 #include "xfa/fde/css/fde_csscache.h" |
15 #include "xfa/fde/css/fde_cssstyleselector.h" | 16 #include "xfa/fde/css/fde_cssstyleselector.h" |
16 #include "xfa/fde/fde_gedevice.h" | 17 #include "xfa/fde/fde_gedevice.h" |
17 #include "xfa/fde/fde_object.h" | 18 #include "xfa/fde/fde_object.h" |
18 #include "xfa/fde/xml/fde_xml_imp.h" | 19 #include "xfa/fde/xml/fde_xml_imp.h" |
19 #include "xfa/fgas/crt/fgas_codepage.h" | 20 #include "xfa/fgas/crt/fgas_codepage.h" |
20 #include "xfa/fxfa/app/xfa_ffwidgetacc.h" | 21 #include "xfa/fxfa/app/xfa_ffwidgetacc.h" |
21 #include "xfa/fxfa/parser/cxfa_measurement.h" | 22 #include "xfa/fxfa/parser/cxfa_measurement.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 m_pAllocator.reset(); | 91 m_pAllocator.reset(); |
91 } | 92 } |
92 void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) { | 93 void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) { |
93 if (!pTextProvider) | 94 if (!pTextProvider) |
94 return; | 95 return; |
95 | 96 |
96 if (!m_pSelector) { | 97 if (!m_pSelector) { |
97 CXFA_FFDoc* pDoc = pTextProvider->GetDocNode(); | 98 CXFA_FFDoc* pDoc = pTextProvider->GetDocNode(); |
98 CFGAS_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr(); | 99 CFGAS_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr(); |
99 ASSERT(pFontMgr); | 100 ASSERT(pFontMgr); |
100 m_pSelector.reset(new CFDE_CSSStyleSelector(pFontMgr)); | 101 m_pSelector = pdfium::MakeUnique<CFDE_CSSStyleSelector>(pFontMgr); |
101 FX_FLOAT fFontSize = 10; | 102 FX_FLOAT fFontSize = 10; |
102 CXFA_Font font = pTextProvider->GetFontNode(); | 103 CXFA_Font font = pTextProvider->GetFontNode(); |
103 if (font) { | 104 if (font) { |
104 fFontSize = font.GetFontSize(); | 105 fFontSize = font.GetFontSize(); |
105 } | 106 } |
106 m_pSelector->SetDefFontSize(fFontSize); | 107 m_pSelector->SetDefFontSize(fFontSize); |
107 } | 108 } |
108 if (!m_pUASheet) { | 109 if (!m_pUASheet) { |
109 m_pUASheet = LoadDefaultSheetStyle(); | 110 m_pUASheet = LoadDefaultSheetStyle(); |
110 m_pSelector->SetStyleSheet(FDE_CSSSTYLESHEETGROUP_UserAgent, m_pUASheet); | 111 m_pSelector->SetStyleSheet(FDE_CSSSTYLESHEETGROUP_UserAgent, m_pUASheet); |
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
889 } | 890 } |
890 } | 891 } |
891 m_pBreak->SetLineBoundary(fStart, fLineWidth); | 892 m_pBreak->SetLineBoundary(fStart, fLineWidth); |
892 FX_FLOAT fIndent = pParaStyle->GetTextIndent().GetValue(); | 893 FX_FLOAT fIndent = pParaStyle->GetTextIndent().GetValue(); |
893 if (fIndent > 0) { | 894 if (fIndent > 0) { |
894 fStart += fIndent; | 895 fStart += fIndent; |
895 } | 896 } |
896 m_pBreak->SetLineStartPos(fStart); | 897 m_pBreak->SetLineStartPos(fStart); |
897 m_pBreak->SetTabWidth(m_textParser.GetTabInterval(pStyle)); | 898 m_pBreak->SetTabWidth(m_textParser.GetTabInterval(pStyle)); |
898 if (!m_pTabstopContext) | 899 if (!m_pTabstopContext) |
899 m_pTabstopContext.reset(new CXFA_TextTabstopsContext); | 900 m_pTabstopContext = pdfium::MakeUnique<CXFA_TextTabstopsContext>(); |
900 m_textParser.GetTabstops(pStyle, m_pTabstopContext.get()); | 901 m_textParser.GetTabstops(pStyle, m_pTabstopContext.get()); |
901 for (int32_t i = 0; i < m_pTabstopContext->m_iTabCount; i++) { | 902 for (int32_t i = 0; i < m_pTabstopContext->m_iTabCount; i++) { |
902 XFA_TABSTOPS* pTab = m_pTabstopContext->m_tabstops.GetDataPtr(i); | 903 XFA_TABSTOPS* pTab = m_pTabstopContext->m_tabstops.GetDataPtr(i); |
903 m_pBreak->AddPositionedTab(pTab->fTabstops); | 904 m_pBreak->AddPositionedTab(pTab->fTabstops); |
904 } | 905 } |
905 } | 906 } |
906 FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle); | 907 FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle); |
907 m_pBreak->SetFontSize(fFontSize); | 908 m_pBreak->SetFontSize(fFontSize); |
908 m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f); | 909 m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f); |
909 m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, pStyle)); | 910 m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, pStyle)); |
(...skipping 29 matching lines...) Expand all Loading... |
939 if (fHeight < 0.1f) { | 940 if (fHeight < 0.1f) { |
940 fHeight = 0; | 941 fHeight = 0; |
941 for (int32_t i = 0; i < iCount; i++) { | 942 for (int32_t i = 0; i < iCount; i++) { |
942 fHeight += m_pLoader->m_lineHeights.ElementAt(i); | 943 fHeight += m_pLoader->m_lineHeights.ElementAt(i); |
943 } | 944 } |
944 } | 945 } |
945 return fHeight; | 946 return fHeight; |
946 } | 947 } |
947 FX_FLOAT CXFA_TextLayout::StartLayout(FX_FLOAT fWidth) { | 948 FX_FLOAT CXFA_TextLayout::StartLayout(FX_FLOAT fWidth) { |
948 if (!m_pLoader) | 949 if (!m_pLoader) |
949 m_pLoader.reset(new CXFA_LoaderContext); | 950 m_pLoader = pdfium::MakeUnique<CXFA_LoaderContext>(); |
950 | 951 |
951 if (fWidth < 0 || (m_pLoader->m_fWidth > -1 && | 952 if (fWidth < 0 || (m_pLoader->m_fWidth > -1 && |
952 FXSYS_fabs(fWidth - m_pLoader->m_fWidth) > 0)) { | 953 FXSYS_fabs(fWidth - m_pLoader->m_fWidth) > 0)) { |
953 m_pLoader->m_lineHeights.RemoveAll(); | 954 m_pLoader->m_lineHeights.RemoveAll(); |
954 m_Blocks.RemoveAll(); | 955 m_Blocks.RemoveAll(); |
955 Unload(); | 956 Unload(); |
956 m_pLoader->m_fStartLineOffset = 0; | 957 m_pLoader->m_fStartLineOffset = 0; |
957 } | 958 } |
958 m_pLoader->m_fWidth = fWidth; | 959 m_pLoader->m_fWidth = fWidth; |
959 if (fWidth < 0) { | 960 if (fWidth < 0) { |
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2095 m_tabstops.RemoveAll(); | 2096 m_tabstops.RemoveAll(); |
2096 m_iTabCount = 0; | 2097 m_iTabCount = 0; |
2097 } | 2098 } |
2098 | 2099 |
2099 void CXFA_TextTabstopsContext::Reset() { | 2100 void CXFA_TextTabstopsContext::Reset() { |
2100 m_iTabIndex = -1; | 2101 m_iTabIndex = -1; |
2101 m_bTabstops = false; | 2102 m_bTabstops = false; |
2102 m_fTabWidth = 0; | 2103 m_fTabWidth = 0; |
2103 m_fLeft = 0; | 2104 m_fLeft = 0; |
2104 } | 2105 } |
OLD | NEW |