Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: xfa/fxfa/app/xfa_textlayout.cpp

Issue 2031873003: Get rid of NULLs in xfa/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@nullptr_fpdfsdk
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/app/xfa_textlayout.h ('k') | xfa/fxfa/fm2js/xfa_fmparse.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 L"style:italic}" 95 L"style:italic}"
96 L"sup{vertical-align:+15em;font-size:.66em}sub{vertical-align:-15em;font-" 96 L"sup{vertical-align:+15em;font-size:.66em}sub{vertical-align:-15em;font-"
97 L"size:.66em}"; 97 L"size:.66em}";
98 return IFDE_CSSStyleSheet::LoadFromBuffer( 98 return IFDE_CSSStyleSheet::LoadFromBuffer(
99 CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8); 99 CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8);
100 } 100 }
101 IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle( 101 IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
102 CXFA_TextProvider* pTextProvider) { 102 CXFA_TextProvider* pTextProvider) {
103 CXFA_Font font = pTextProvider->GetFontNode(); 103 CXFA_Font font = pTextProvider->GetFontNode();
104 CXFA_Para para = pTextProvider->GetParaNode(); 104 CXFA_Para para = pTextProvider->GetParaNode();
105 IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(NULL); 105 IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(nullptr);
106 IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles(); 106 IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
107 IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles(); 107 IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
108 FX_FLOAT fLineHeight = 0, fFontSize = 10; 108 FX_FLOAT fLineHeight = 0, fFontSize = 10;
109 if (para) { 109 if (para) {
110 fLineHeight = para.GetLineHeight(); 110 fLineHeight = para.GetLineHeight();
111 FDE_CSSLENGTH indent; 111 FDE_CSSLENGTH indent;
112 indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent()); 112 indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent());
113 pParaStyle->SetTextIndent(indent); 113 pParaStyle->SetTextIndent(indent);
114 FDE_CSSTEXTALIGN hAlign = FDE_CSSTEXTALIGN_Left; 114 FDE_CSSTEXTALIGN hAlign = FDE_CSSTEXTALIGN_Left;
115 switch (para.GetHorizontalAlign()) { 115 switch (para.GetHorizontalAlign()) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle); 200 IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
201 CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator(); 201 CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
202 pCSSAccel->OnEnterTag(&tagProvider); 202 pCSSAccel->OnEnterTag(&tagProvider);
203 m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(), 203 m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(),
204 pContext->CountDecls(), pStyle); 204 pContext->CountDecls(), pStyle);
205 pCSSAccel->OnLeaveTag(&tagProvider); 205 pCSSAccel->OnLeaveTag(&tagProvider);
206 return pStyle; 206 return pStyle;
207 } 207 }
208 void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer, 208 void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer,
209 CXFA_TextProvider* pTextProvider) { 209 CXFA_TextProvider* pTextProvider) {
210 if (pXMLContainer == NULL || pTextProvider == NULL || m_pAllocator) { 210 if (!pXMLContainer || !pTextProvider || m_pAllocator)
211 return; 211 return;
212 } 212
213 m_pAllocator.reset(IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Fixed, 32, 213 m_pAllocator.reset(IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Fixed, 32,
214 sizeof(CXFA_CSSTagProvider))); 214 sizeof(CXFA_CSSTagProvider)));
215 InitCSSData(pTextProvider); 215 InitCSSData(pTextProvider);
216 IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider); 216 IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider);
217 ParseRichText(pXMLContainer, pRootStyle); 217 ParseRichText(pXMLContainer, pRootStyle);
218 pRootStyle->Release(); 218 pRootStyle->Release();
219 } 219 }
220 void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode, 220 void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode,
221 IFDE_CSSComputedStyle* pParentStyle) { 221 IFDE_CSSComputedStyle* pParentStyle) {
222 if (!pXMLNode) 222 if (!pXMLNode)
223 return; 223 return;
224 224
225 CXFA_CSSTagProvider tagProvider; 225 CXFA_CSSTagProvider tagProvider;
226 ParseTagInfo(pXMLNode, tagProvider); 226 ParseTagInfo(pXMLNode, tagProvider);
227 if (!tagProvider.m_bTagAvailable) 227 if (!tagProvider.m_bTagAvailable)
228 return; 228 return;
229 229
230 IFDE_CSSComputedStyle* pNewStyle = NULL; 230 IFDE_CSSComputedStyle* pNewStyle = nullptr;
231 if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) || 231 if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) ||
232 (tagProvider.GetTagName() != FX_WSTRC(L"html"))) { 232 (tagProvider.GetTagName() != FX_WSTRC(L"html"))) {
233 CXFA_TextParseContext* pTextContext = 233 CXFA_TextParseContext* pTextContext =
234 FXTARGET_NewWith(m_pAllocator.get()) CXFA_TextParseContext; 234 FXTARGET_NewWith(m_pAllocator.get()) CXFA_TextParseContext;
235 FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_Inline; 235 FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_Inline;
236 if (!tagProvider.m_bContent) { 236 if (!tagProvider.m_bContent) {
237 pNewStyle = CreateStyle(pParentStyle); 237 pNewStyle = CreateStyle(pParentStyle);
238 CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator(); 238 CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
239 pCSSAccel->OnEnterTag(&tagProvider); 239 pCSSAccel->OnEnterTag(&tagProvider);
240 CFDE_CSSDeclarationArray DeclArray; 240 CFDE_CSSDeclarationArray DeclArray;
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 } else if (fLineHeight < 0.1f) { 497 } else if (fLineHeight < 0.1f) {
498 fLineHeight = GetFontSize(pTextProvider, pStyle) * 1.2f; 498 fLineHeight = GetFontSize(pTextProvider, pStyle) * 1.2f;
499 } 499 }
500 fLineHeight *= fVerScale; 500 fLineHeight *= fVerScale;
501 return fLineHeight; 501 return fLineHeight;
502 } 502 }
503 FX_BOOL CXFA_TextParser::GetEmbbedObj(CXFA_TextProvider* pTextProvider, 503 FX_BOOL CXFA_TextParser::GetEmbbedObj(CXFA_TextProvider* pTextProvider,
504 CFDE_XMLNode* pXMLNode, 504 CFDE_XMLNode* pXMLNode,
505 CFX_WideString& wsValue) { 505 CFX_WideString& wsValue) {
506 wsValue.clear(); 506 wsValue.clear();
507 if (pXMLNode == NULL) { 507 if (!pXMLNode)
508 return FALSE; 508 return FALSE;
509 } 509
510 FX_BOOL bRet = FALSE; 510 FX_BOOL bRet = FALSE;
511 if (pXMLNode->GetType() == FDE_XMLNODE_Element) { 511 if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
512 CFDE_XMLElement* pElement = static_cast<CFDE_XMLElement*>(pXMLNode); 512 CFDE_XMLElement* pElement = static_cast<CFDE_XMLElement*>(pXMLNode);
513 CFX_WideString wsAttr; 513 CFX_WideString wsAttr;
514 pElement->GetString(L"xfa:embed", wsAttr); 514 pElement->GetString(L"xfa:embed", wsAttr);
515 if (wsAttr.IsEmpty()) { 515 if (wsAttr.IsEmpty()) {
516 return FALSE; 516 return FALSE;
517 } 517 }
518 if (wsAttr.GetAt(0) == L'#') { 518 if (wsAttr.GetAt(0) == L'#') {
519 wsAttr.Delete(0); 519 wsAttr.Delete(0);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 XFA_TABSTOPSSTATUS_EOS, 554 XFA_TABSTOPSSTATUS_EOS,
555 XFA_TABSTOPSSTATUS_None, 555 XFA_TABSTOPSSTATUS_None,
556 XFA_TABSTOPSSTATUS_Alignment, 556 XFA_TABSTOPSSTATUS_Alignment,
557 XFA_TABSTOPSSTATUS_StartLeader, 557 XFA_TABSTOPSSTATUS_StartLeader,
558 XFA_TABSTOPSSTATUS_Leader, 558 XFA_TABSTOPSSTATUS_Leader,
559 XFA_TABSTOPSSTATUS_Location, 559 XFA_TABSTOPSSTATUS_Location,
560 }; 560 };
561 FX_BOOL CXFA_TextParser::GetTabstops( 561 FX_BOOL CXFA_TextParser::GetTabstops(
562 IFDE_CSSComputedStyle* pStyle, 562 IFDE_CSSComputedStyle* pStyle,
563 CXFA_TextTabstopsContext* pTabstopContext) { 563 CXFA_TextTabstopsContext* pTabstopContext) {
564 if (pStyle == NULL || pTabstopContext == NULL) { 564 if (!pStyle || !pTabstopContext)
565 return FALSE; 565 return FALSE;
566 } 566
567 CFX_WideString wsValue; 567 CFX_WideString wsValue;
568 if (!pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-stops"), wsValue) && 568 if (!pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-stops"), wsValue) &&
569 !pStyle->GetCustomStyle(FX_WSTRC(L"tab-stops"), wsValue)) { 569 !pStyle->GetCustomStyle(FX_WSTRC(L"tab-stops"), wsValue)) {
570 return FALSE; 570 return FALSE;
571 } 571 }
572 int32_t iLength = wsValue.GetLength(); 572 int32_t iLength = wsValue.GetLength();
573 const FX_WCHAR* pTabStops = wsValue.c_str(); 573 const FX_WCHAR* pTabStops = wsValue.c_str();
574 int32_t iCur = 0; 574 int32_t iCur = 0;
575 int32_t iLast = 0; 575 int32_t iLast = 0;
576 CFX_WideString wsAlign; 576 CFX_WideString wsAlign;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 FXTARGET_DeleteWith(CXFA_PieceLine, m_pAllocator.get(), pLine); 668 FXTARGET_DeleteWith(CXFA_PieceLine, m_pAllocator.get(), pLine);
669 } 669 }
670 m_pieceLines.RemoveAll(); 670 m_pieceLines.RemoveAll();
671 m_pBreak.reset(); 671 m_pBreak.reset();
672 m_pAllocator.reset(); 672 m_pAllocator.reset();
673 } 673 }
674 const CXFA_PieceLineArray* CXFA_TextLayout::GetPieceLines() { 674 const CXFA_PieceLineArray* CXFA_TextLayout::GetPieceLines() {
675 return &m_pieceLines; 675 return &m_pieceLines;
676 } 676 }
677 void CXFA_TextLayout::GetTextDataNode() { 677 void CXFA_TextLayout::GetTextDataNode() {
678 if (m_pTextProvider == NULL) { 678 if (!m_pTextProvider)
679 return; 679 return;
680 } 680
681 CXFA_Node* pNode = m_pTextProvider->GetTextNode(m_bRichText); 681 CXFA_Node* pNode = m_pTextProvider->GetTextNode(m_bRichText);
682 if (pNode && m_bRichText) { 682 if (pNode && m_bRichText) {
683 m_textParser.Reset(); 683 m_textParser.Reset();
684 } 684 }
685 m_pTextDataNode = pNode; 685 m_pTextDataNode = pNode;
686 } 686 }
687 CFDE_XMLNode* CXFA_TextLayout::GetXMLContainerNode() { 687 CFDE_XMLNode* CXFA_TextLayout::GetXMLContainerNode() {
688 CFDE_XMLNode* pXMLContainer = NULL; 688 CFDE_XMLNode* pXMLContainer = nullptr;
689 if (m_bRichText) { 689 if (m_bRichText) {
690 CFDE_XMLNode* pXMLRoot = m_pTextDataNode->GetXMLMappingNode(); 690 CFDE_XMLNode* pXMLRoot = m_pTextDataNode->GetXMLMappingNode();
691 if (!pXMLRoot) { 691 if (!pXMLRoot) {
692 return pXMLContainer; 692 return pXMLContainer;
693 } 693 }
694 for (CFDE_XMLNode* pXMLChild = 694 for (CFDE_XMLNode* pXMLChild =
695 pXMLRoot->GetNodeItem(CFDE_XMLNode::FirstChild); 695 pXMLRoot->GetNodeItem(CFDE_XMLNode::FirstChild);
696 pXMLChild; 696 pXMLChild;
697 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) { 697 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) {
698 if (pXMLChild->GetType() == FDE_XMLNODE_Element) { 698 if (pXMLChild->GetType() == FDE_XMLNODE_Element) {
(...skipping 11 matching lines...) Expand all
710 } 710 }
711 CFX_RTFBreak* CXFA_TextLayout::CreateBreak(FX_BOOL bDefault) { 711 CFX_RTFBreak* CXFA_TextLayout::CreateBreak(FX_BOOL bDefault) {
712 uint32_t dwStyle = FX_RTFLAYOUTSTYLE_ExpandTab; 712 uint32_t dwStyle = FX_RTFLAYOUTSTYLE_ExpandTab;
713 if (!bDefault) { 713 if (!bDefault) {
714 dwStyle |= FX_RTFLAYOUTSTYLE_Pagination; 714 dwStyle |= FX_RTFLAYOUTSTYLE_Pagination;
715 } 715 }
716 CFX_RTFBreak* pBreak = new CFX_RTFBreak(0); 716 CFX_RTFBreak* pBreak = new CFX_RTFBreak(0);
717 pBreak->SetLayoutStyles(dwStyle); 717 pBreak->SetLayoutStyles(dwStyle);
718 pBreak->SetLineBreakChar(L'\n'); 718 pBreak->SetLineBreakChar(L'\n');
719 pBreak->SetLineBreakTolerance(1); 719 pBreak->SetLineBreakTolerance(1);
720 pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL)); 720 pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, nullptr));
721 pBreak->SetFontSize(m_textParser.GetFontSize(m_pTextProvider, NULL)); 721 pBreak->SetFontSize(m_textParser.GetFontSize(m_pTextProvider, nullptr));
722 return pBreak; 722 return pBreak;
723 } 723 }
724 void CXFA_TextLayout::InitBreak(FX_FLOAT fLineWidth) { 724 void CXFA_TextLayout::InitBreak(FX_FLOAT fLineWidth) {
725 CXFA_Font font = m_pTextProvider->GetFontNode(); 725 CXFA_Font font = m_pTextProvider->GetFontNode();
726 CXFA_Para para = m_pTextProvider->GetParaNode(); 726 CXFA_Para para = m_pTextProvider->GetParaNode();
727 FX_FLOAT fStart = 0; 727 FX_FLOAT fStart = 0;
728 FX_FLOAT fStartPos = 0; 728 FX_FLOAT fStartPos = 0;
729 if (para) { 729 if (para) {
730 int32_t iAlign = FX_RTFLINEALIGNMENT_Left; 730 int32_t iAlign = FX_RTFLINEALIGNMENT_Left;
731 switch (para.GetHorizontalAlign()) { 731 switch (para.GetHorizontalAlign()) {
(...skipping 28 matching lines...) Expand all
760 fStartPos += fIndent; 760 fStartPos += fIndent;
761 } 761 }
762 } 762 }
763 m_pBreak->SetLineBoundary(fStart, fLineWidth); 763 m_pBreak->SetLineBoundary(fStart, fLineWidth);
764 m_pBreak->SetLineStartPos(fStartPos); 764 m_pBreak->SetLineStartPos(fStartPos);
765 if (font) { 765 if (font) {
766 m_pBreak->SetHorizontalScale((int32_t)font.GetHorizontalScale()); 766 m_pBreak->SetHorizontalScale((int32_t)font.GetHorizontalScale());
767 m_pBreak->SetVerticalScale((int32_t)font.GetVerticalScale()); 767 m_pBreak->SetVerticalScale((int32_t)font.GetVerticalScale());
768 m_pBreak->SetCharSpace(font.GetLetterSpacing()); 768 m_pBreak->SetCharSpace(font.GetLetterSpacing());
769 } 769 }
770 FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, NULL); 770 FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, nullptr);
771 m_pBreak->SetFontSize(fFontSize); 771 m_pBreak->SetFontSize(fFontSize);
772 m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL)); 772 m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, nullptr));
773 m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f); 773 m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f);
774 } 774 }
775 void CXFA_TextLayout::InitBreak(IFDE_CSSComputedStyle* pStyle, 775 void CXFA_TextLayout::InitBreak(IFDE_CSSComputedStyle* pStyle,
776 FDE_CSSDISPLAY eDisplay, 776 FDE_CSSDISPLAY eDisplay,
777 FX_FLOAT fLineWidth, 777 FX_FLOAT fLineWidth,
778 CFDE_XMLNode* pXMLNode, 778 CFDE_XMLNode* pXMLNode,
779 IFDE_CSSComputedStyle* pParentStyle) { 779 IFDE_CSSComputedStyle* pParentStyle) {
780 if (pStyle == NULL) { 780 if (!pStyle) {
781 InitBreak(fLineWidth); 781 InitBreak(fLineWidth);
782 return; 782 return;
783 } 783 }
784 IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles(); 784 IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
785 if (eDisplay == FDE_CSSDISPLAY_Block || eDisplay == FDE_CSSDISPLAY_ListItem) { 785 if (eDisplay == FDE_CSSDISPLAY_Block || eDisplay == FDE_CSSDISPLAY_ListItem) {
786 int32_t iAlign = FX_RTFLINEALIGNMENT_Left; 786 int32_t iAlign = FX_RTFLINEALIGNMENT_Left;
787 switch (pParaStyle->GetTextAlign()) { 787 switch (pParaStyle->GetTextAlign()) {
788 case FDE_CSSTEXTALIGN_Right: 788 case FDE_CSSTEXTALIGN_Right:
789 iAlign = FX_RTFLINEALIGNMENT_Right; 789 iAlign = FX_RTFLINEALIGNMENT_Right;
790 break; 790 break;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 int32_t CXFA_TextLayout::GetText(CFX_WideString& wsText) { 860 int32_t CXFA_TextLayout::GetText(CFX_WideString& wsText) {
861 GetTextDataNode(); 861 GetTextDataNode();
862 wsText.clear(); 862 wsText.clear();
863 if (m_bRichText) { 863 if (m_bRichText) {
864 } else { 864 } else {
865 wsText = m_pTextDataNode->GetContent(); 865 wsText = m_pTextDataNode->GetContent();
866 } 866 }
867 return wsText.GetLength(); 867 return wsText.GetLength();
868 } 868 }
869 FX_FLOAT CXFA_TextLayout::GetLayoutHeight() { 869 FX_FLOAT CXFA_TextLayout::GetLayoutHeight() {
870 if (m_pLoader == NULL) { 870 if (!m_pLoader)
871 return 0; 871 return 0;
872 } 872
873 int32_t iCount = m_pLoader->m_lineHeights.GetSize(); 873 int32_t iCount = m_pLoader->m_lineHeights.GetSize();
874 if (iCount == 0 && m_pLoader->m_fWidth > 0) { 874 if (iCount == 0 && m_pLoader->m_fWidth > 0) {
875 CFX_SizeF szMax(m_pLoader->m_fWidth, m_pLoader->m_fHeight); 875 CFX_SizeF szMax(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
876 CFX_SizeF szDef; 876 CFX_SizeF szDef;
877 m_pLoader->m_bSaveLineHeight = TRUE; 877 m_pLoader->m_bSaveLineHeight = TRUE;
878 m_pLoader->m_fLastPos = 0; 878 m_pLoader->m_fLastPos = 0;
879 CalcSize(szMax, szMax, szDef); 879 CalcSize(szMax, szMax, szDef);
880 m_pLoader->m_bSaveLineHeight = FALSE; 880 m_pLoader->m_bSaveLineHeight = FALSE;
881 return szDef.y; 881 return szDef.y;
882 } 882 }
(...skipping 26 matching lines...) Expand all
909 CalcSize(szMax, szMax, szDef); 909 CalcSize(szMax, szMax, szDef);
910 m_pLoader->m_bSaveLineHeight = FALSE; 910 m_pLoader->m_bSaveLineHeight = FALSE;
911 fWidth = szDef.x; 911 fWidth = szDef.x;
912 } 912 }
913 return fWidth; 913 return fWidth;
914 } 914 }
915 FX_BOOL CXFA_TextLayout::DoLayout(int32_t iBlockIndex, 915 FX_BOOL CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
916 FX_FLOAT& fCalcHeight, 916 FX_FLOAT& fCalcHeight,
917 FX_FLOAT fContentAreaHeight, 917 FX_FLOAT fContentAreaHeight,
918 FX_FLOAT fTextHeight) { 918 FX_FLOAT fTextHeight) {
919 if (m_pLoader == NULL) { 919 if (!m_pLoader)
920 return FALSE; 920 return FALSE;
921 } 921
922 int32_t iBlockCount = m_Blocks.GetSize(); 922 int32_t iBlockCount = m_Blocks.GetSize();
923 FX_FLOAT fHeight = fTextHeight; 923 FX_FLOAT fHeight = fTextHeight;
924 if (fHeight < 0) { 924 if (fHeight < 0) {
925 fHeight = GetLayoutHeight(); 925 fHeight = GetLayoutHeight();
926 } 926 }
927 m_pLoader->m_fHeight = fHeight; 927 m_pLoader->m_fHeight = fHeight;
928 if (fContentAreaHeight < 0) { 928 if (fContentAreaHeight < 0) {
929 return FALSE; 929 return FALSE;
930 } 930 }
931 m_bHasBlock = TRUE; 931 m_bHasBlock = TRUE;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 defaultSize.x = maxSize.x; 1003 defaultSize.x = maxSize.x;
1004 if (defaultSize.x < 1) 1004 if (defaultSize.x < 1)
1005 defaultSize.x = 0xFFFF; 1005 defaultSize.x = 0xFFFF;
1006 1006
1007 m_pBreak.reset(CreateBreak(FALSE)); 1007 m_pBreak.reset(CreateBreak(FALSE));
1008 FX_FLOAT fLinePos = 0; 1008 FX_FLOAT fLinePos = 0;
1009 m_iLines = 0; 1009 m_iLines = 0;
1010 m_fMaxWidth = 0; 1010 m_fMaxWidth = 0;
1011 Loader(defaultSize, fLinePos, FALSE); 1011 Loader(defaultSize, fLinePos, FALSE);
1012 if (fLinePos < 0.1f) 1012 if (fLinePos < 0.1f)
1013 fLinePos = m_textParser.GetFontSize(m_pTextProvider, NULL); 1013 fLinePos = m_textParser.GetFontSize(m_pTextProvider, nullptr);
1014 1014
1015 m_pTabstopContext.reset(); 1015 m_pTabstopContext.reset();
1016 defaultSize = CFX_SizeF(m_fMaxWidth, fLinePos); 1016 defaultSize = CFX_SizeF(m_fMaxWidth, fLinePos);
1017 return TRUE; 1017 return TRUE;
1018 } 1018 }
1019 1019
1020 FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) { 1020 FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) {
1021 if (size.x < 1) 1021 if (size.x < 1)
1022 return FALSE; 1022 return FALSE;
1023 1023
1024 Unload(); 1024 Unload();
1025 m_pBreak.reset(CreateBreak(TRUE)); 1025 m_pBreak.reset(CreateBreak(TRUE));
1026 if (m_pLoader) { 1026 if (m_pLoader) {
1027 m_pLoader->m_iTotalLines = -1; 1027 m_pLoader->m_iTotalLines = -1;
1028 m_pLoader->m_iChar = 0; 1028 m_pLoader->m_iChar = 0;
1029 } 1029 }
1030 m_iLines = 0; 1030 m_iLines = 0;
1031 FX_FLOAT fLinePos = 0; 1031 FX_FLOAT fLinePos = 0;
1032 Loader(size, fLinePos, TRUE); 1032 Loader(size, fLinePos, TRUE);
1033 UpdateAlign(size.y, fLinePos); 1033 UpdateAlign(size.y, fLinePos);
1034 m_pTabstopContext.reset(); 1034 m_pTabstopContext.reset();
1035 if (fHeight) 1035 if (fHeight)
1036 *fHeight = fLinePos; 1036 *fHeight = fLinePos;
1037 return TRUE; 1037 return TRUE;
1038 } 1038 }
1039 1039
1040 FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) { 1040 FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) {
1041 if (m_pLoader == NULL || iBlock < 0 || iBlock >= CountBlocks()) 1041 if (!m_pLoader || iBlock < 0 || iBlock >= CountBlocks())
1042 return FALSE; 1042 return FALSE;
1043 if (m_pLoader->m_fWidth < 1) 1043 if (m_pLoader->m_fWidth < 1)
1044 return FALSE; 1044 return FALSE;
1045 1045
1046 m_pLoader->m_iTotalLines = -1; 1046 m_pLoader->m_iTotalLines = -1;
1047 m_iLines = 0; 1047 m_iLines = 0;
1048 FX_FLOAT fLinePos = 0; 1048 FX_FLOAT fLinePos = 0;
1049 CXFA_Node* pNode = NULL; 1049 CXFA_Node* pNode = nullptr;
1050 CFX_SizeF szText(m_pLoader->m_fWidth, m_pLoader->m_fHeight); 1050 CFX_SizeF szText(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
1051 int32_t iCount = m_Blocks.GetSize(); 1051 int32_t iCount = m_Blocks.GetSize();
1052 int32_t iBlocksHeightCount = m_pLoader->m_BlocksHeight.GetSize(); 1052 int32_t iBlocksHeightCount = m_pLoader->m_BlocksHeight.GetSize();
1053 iBlocksHeightCount /= 2; 1053 iBlocksHeightCount /= 2;
1054 if (iBlock < iBlocksHeightCount) 1054 if (iBlock < iBlocksHeightCount)
1055 return TRUE; 1055 return TRUE;
1056 if (iBlock == iBlocksHeightCount) { 1056 if (iBlock == iBlocksHeightCount) {
1057 Unload(); 1057 Unload();
1058 m_pBreak.reset(CreateBreak(TRUE)); 1058 m_pBreak.reset(CreateBreak(TRUE));
1059 fLinePos = m_pLoader->m_fStartLineOffset; 1059 fLinePos = m_pLoader->m_fStartLineOffset;
(...skipping 25 matching lines...) Expand all
1085 if (!LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle, 1085 if (!LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle,
1086 TRUE)) { 1086 TRUE)) {
1087 break; 1087 break;
1088 } 1088 }
1089 } 1089 }
1090 while (!pXMLNode) { 1090 while (!pXMLNode) {
1091 pXMLNode = pSaveXMLNode->GetNodeItem(CFDE_XMLNode::Parent); 1091 pXMLNode = pSaveXMLNode->GetNodeItem(CFDE_XMLNode::Parent);
1092 if (pXMLNode == pContainerNode) 1092 if (pXMLNode == pContainerNode)
1093 break; 1093 break;
1094 if (!LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle, 1094 if (!LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle,
1095 TRUE, NULL, FALSE)) { 1095 TRUE, nullptr, FALSE)) {
1096 break; 1096 break;
1097 } 1097 }
1098 pSaveXMLNode = pXMLNode; 1098 pSaveXMLNode = pXMLNode;
1099 pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling); 1099 pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling);
1100 if (!pXMLNode) 1100 if (!pXMLNode)
1101 continue; 1101 continue;
1102 for (; pXMLNode; 1102 for (; pXMLNode;
1103 pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling)) { 1103 pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::NextSibling)) {
1104 if (!LoadRichText(pXMLNode, szText, fLinePos, 1104 if (!LoadRichText(pXMLNode, szText, fLinePos,
1105 m_pLoader->m_pParentStyle, TRUE)) { 1105 m_pLoader->m_pParentStyle, TRUE)) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 pDevice->SetClipRect(rtClip); 1174 pDevice->SetClipRect(rtClip);
1175 1175
1176 std::unique_ptr<CFDE_Brush> pSolidBrush(new CFDE_Brush); 1176 std::unique_ptr<CFDE_Brush> pSolidBrush(new CFDE_Brush);
1177 std::unique_ptr<CFDE_Pen> pPen(new CFDE_Pen); 1177 std::unique_ptr<CFDE_Pen> pPen(new CFDE_Pen);
1178 if (m_pieceLines.GetSize() == 0) { 1178 if (m_pieceLines.GetSize() == 0) {
1179 int32_t iBlockCount = CountBlocks(); 1179 int32_t iBlockCount = CountBlocks();
1180 for (int32_t i = 0; i < iBlockCount; i++) { 1180 for (int32_t i = 0; i < iBlockCount; i++) {
1181 Layout(i); 1181 Layout(i);
1182 } 1182 }
1183 } 1183 }
1184 FXTEXT_CHARPOS* pCharPos = NULL; 1184 FXTEXT_CHARPOS* pCharPos = nullptr;
1185 int32_t iCharCount = 0; 1185 int32_t iCharCount = 0;
1186 int32_t iLineStart = 0; 1186 int32_t iLineStart = 0;
1187 int32_t iPieceLines = m_pieceLines.GetSize(); 1187 int32_t iPieceLines = m_pieceLines.GetSize();
1188 int32_t iCount = m_Blocks.GetSize(); 1188 int32_t iCount = m_Blocks.GetSize();
1189 if (iCount > 0) { 1189 if (iCount > 0) {
1190 iBlock *= 2; 1190 iBlock *= 2;
1191 if (iBlock < iCount) { 1191 if (iBlock < iCount) {
1192 iLineStart = m_Blocks.ElementAt(iBlock); 1192 iLineStart = m_Blocks.ElementAt(iBlock);
1193 iPieceLines = m_Blocks.ElementAt(iBlock + 1); 1193 iPieceLines = m_Blocks.ElementAt(iBlock + 1);
1194 } else { 1194 } else {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 } 1308 }
1309 FX_BOOL CXFA_TextLayout::LoadRichText(CFDE_XMLNode* pXMLNode, 1309 FX_BOOL CXFA_TextLayout::LoadRichText(CFDE_XMLNode* pXMLNode,
1310 const CFX_SizeF& szText, 1310 const CFX_SizeF& szText,
1311 FX_FLOAT& fLinePos, 1311 FX_FLOAT& fLinePos,
1312 IFDE_CSSComputedStyle* pParentStyle, 1312 IFDE_CSSComputedStyle* pParentStyle,
1313 FX_BOOL bSavePieces, 1313 FX_BOOL bSavePieces,
1314 CXFA_LinkUserData* pLinkData, 1314 CXFA_LinkUserData* pLinkData,
1315 FX_BOOL bEndBreak, 1315 FX_BOOL bEndBreak,
1316 FX_BOOL bIsOl, 1316 FX_BOOL bIsOl,
1317 int32_t iLiCount) { 1317 int32_t iLiCount) {
1318 if (pXMLNode == NULL) { 1318 if (!pXMLNode)
1319 return FALSE; 1319 return FALSE;
1320 } 1320
1321 CXFA_TextParseContext* pContext = 1321 CXFA_TextParseContext* pContext =
1322 m_textParser.GetParseContextFromMap(pXMLNode); 1322 m_textParser.GetParseContextFromMap(pXMLNode);
1323 FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_None; 1323 FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_None;
1324 FX_BOOL bContentNode = FALSE; 1324 FX_BOOL bContentNode = FALSE;
1325 FX_FLOAT fSpaceBelow = 0; 1325 FX_FLOAT fSpaceBelow = 0;
1326 IFDE_CSSComputedStyle* pStyle = NULL; 1326 IFDE_CSSComputedStyle* pStyle = nullptr;
1327 CFX_WideString wsName; 1327 CFX_WideString wsName;
1328 if (bEndBreak) { 1328 if (bEndBreak) {
1329 FX_BOOL bCurOl = FALSE; 1329 FX_BOOL bCurOl = FALSE;
1330 FX_BOOL bCurLi = FALSE; 1330 FX_BOOL bCurLi = FALSE;
1331 CFDE_XMLElement* pElement = NULL; 1331 CFDE_XMLElement* pElement = nullptr;
1332 if (pContext) { 1332 if (pContext) {
1333 if (m_bBlockContinue || 1333 if (m_bBlockContinue ||
1334 (m_pLoader && pXMLNode == m_pLoader->m_pXMLNode)) { 1334 (m_pLoader && pXMLNode == m_pLoader->m_pXMLNode)) {
1335 m_bBlockContinue = TRUE; 1335 m_bBlockContinue = TRUE;
1336 } 1336 }
1337 if (pXMLNode->GetType() == FDE_XMLNODE_Text) { 1337 if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
1338 bContentNode = TRUE; 1338 bContentNode = TRUE;
1339 } else if (pXMLNode->GetType() == FDE_XMLNODE_Element) { 1339 } else if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
1340 pElement = static_cast<CFDE_XMLElement*>(pXMLNode); 1340 pElement = static_cast<CFDE_XMLElement*>(pXMLNode);
1341 pElement->GetLocalTagName(wsName); 1341 pElement->GetLocalTagName(wsName);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1417 (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) { 1417 (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) {
1418 m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE; 1418 m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
1419 } else if (wsText.GetLength() > 0 && 1419 } else if (wsText.GetLength() > 0 &&
1420 (0x20 == wsText.GetAt(wsText.GetLength() - 1))) { 1420 (0x20 == wsText.GetAt(wsText.GetLength() - 1))) {
1421 m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE; 1421 m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
1422 } else if (wsText.GetLength() != 0) { 1422 } else if (wsText.GetLength() != 0) {
1423 m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE; 1423 m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
1424 } 1424 }
1425 } 1425 }
1426 if (wsText.GetLength() > 0) { 1426 if (wsText.GetLength() > 0) {
1427 if (m_pLoader == NULL || m_pLoader->m_iChar == 0) { 1427 if (!m_pLoader || m_pLoader->m_iChar == 0) {
1428 if (pLinkData) { 1428 if (pLinkData) {
1429 pLinkData->Retain(); 1429 pLinkData->Retain();
1430 } 1430 }
1431 CXFA_TextUserData* pUserData = FXTARGET_NewWith(m_pAllocator.get()) 1431 CXFA_TextUserData* pUserData = FXTARGET_NewWith(m_pAllocator.get())
1432 CXFA_TextUserData(m_pAllocator.get(), 1432 CXFA_TextUserData(m_pAllocator.get(),
1433 bContentNode ? pParentStyle : pStyle, 1433 bContentNode ? pParentStyle : pStyle,
1434 pLinkData); 1434 pLinkData);
1435 m_pBreak->SetUserData(pUserData); 1435 m_pBreak->SetUserData(pUserData);
1436 } 1436 }
1437 if (AppendChar(wsText, fLinePos, 0, bSavePieces)) { 1437 if (AppendChar(wsText, fLinePos, 0, bSavePieces)) {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1581 void CXFA_TextLayout::EndBreak(uint32_t dwStatus, 1581 void CXFA_TextLayout::EndBreak(uint32_t dwStatus,
1582 FX_FLOAT& fLinePos, 1582 FX_FLOAT& fLinePos,
1583 FX_BOOL bSavePieces) { 1583 FX_BOOL bSavePieces) {
1584 dwStatus = m_pBreak->EndBreak(dwStatus); 1584 dwStatus = m_pBreak->EndBreak(dwStatus);
1585 if (dwStatus > FX_RTFBREAK_PieceBreak) { 1585 if (dwStatus > FX_RTFBREAK_PieceBreak) {
1586 AppendTextLine(dwStatus, fLinePos, bSavePieces, TRUE); 1586 AppendTextLine(dwStatus, fLinePos, bSavePieces, TRUE);
1587 } 1587 }
1588 } 1588 }
1589 void CXFA_TextLayout::DoTabstops(IFDE_CSSComputedStyle* pStyle, 1589 void CXFA_TextLayout::DoTabstops(IFDE_CSSComputedStyle* pStyle,
1590 CXFA_PieceLine* pPieceLine) { 1590 CXFA_PieceLine* pPieceLine) {
1591 if (m_pTabstopContext == NULL || m_pTabstopContext->m_iTabCount == 0) { 1591 if (!m_pTabstopContext || m_pTabstopContext->m_iTabCount == 0)
1592 return; 1592 return;
1593 } 1593
1594 if (pStyle == NULL || pPieceLine == NULL) { 1594 if (!pStyle || !pPieceLine)
1595 return; 1595 return;
1596 } 1596
1597 int32_t iPieces = pPieceLine->m_textPieces.GetSize(); 1597 int32_t iPieces = pPieceLine->m_textPieces.GetSize();
1598 if (iPieces == 0) { 1598 if (iPieces == 0) {
1599 return; 1599 return;
1600 } 1600 }
1601 XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(iPieces - 1); 1601 XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(iPieces - 1);
1602 int32_t& iTabstopsIndex = m_pTabstopContext->m_iTabIndex; 1602 int32_t& iTabstopsIndex = m_pTabstopContext->m_iTabIndex;
1603 int32_t iCount = m_textParser.CountTabs(pStyle); 1603 int32_t iCount = m_textParser.CountTabs(pStyle);
1604 if (iTabstopsIndex > m_pTabstopContext->m_iTabCount - 1) { 1604 if (iTabstopsIndex > m_pTabstopContext->m_iTabCount - 1) {
1605 return; 1605 return;
1606 } 1606 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 } 1643 }
1644 } 1644 }
1645 void CXFA_TextLayout::AppendTextLine(uint32_t dwStatus, 1645 void CXFA_TextLayout::AppendTextLine(uint32_t dwStatus,
1646 FX_FLOAT& fLinePos, 1646 FX_FLOAT& fLinePos,
1647 FX_BOOL bSavePieces, 1647 FX_BOOL bSavePieces,
1648 FX_BOOL bEndBreak) { 1648 FX_BOOL bEndBreak) {
1649 int32_t iPieces = m_pBreak->CountBreakPieces(); 1649 int32_t iPieces = m_pBreak->CountBreakPieces();
1650 if (iPieces < 1) { 1650 if (iPieces < 1) {
1651 return; 1651 return;
1652 } 1652 }
1653 IFDE_CSSComputedStyle* pStyle = NULL; 1653 IFDE_CSSComputedStyle* pStyle = nullptr;
1654 if (bSavePieces) { 1654 if (bSavePieces) {
1655 CXFA_PieceLine* pPieceLine = 1655 CXFA_PieceLine* pPieceLine =
1656 FXTARGET_NewWith(m_pAllocator.get()) CXFA_PieceLine; 1656 FXTARGET_NewWith(m_pAllocator.get()) CXFA_PieceLine;
1657 m_pieceLines.Add(pPieceLine); 1657 m_pieceLines.Add(pPieceLine);
1658 if (m_pTabstopContext) { 1658 if (m_pTabstopContext) {
1659 m_pTabstopContext->Reset(); 1659 m_pTabstopContext->Reset();
1660 } 1660 }
1661 FX_FLOAT fLineStep = 0, fBaseLine = 0; 1661 FX_FLOAT fLineStep = 0, fBaseLine = 0;
1662 int32_t i = 0; 1662 int32_t i = 0;
1663 for (i = 0; i < iPieces; i++) { 1663 for (i = 0; i < iPieces; i++) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1700 fBaseLineTemp = 0; 1700 fBaseLineTemp = 0;
1701 } 1701 }
1702 } else if (fBaseLine < -fBaseLineTemp) { 1702 } else if (fBaseLine < -fBaseLineTemp) {
1703 fBaseLine = -fBaseLineTemp; 1703 fBaseLine = -fBaseLineTemp;
1704 } 1704 }
1705 fLineStep = std::max(fLineStep, fLineHeight); 1705 fLineStep = std::max(fLineStep, fLineHeight);
1706 if (pUserData && pUserData->m_pLinkData) { 1706 if (pUserData && pUserData->m_pLinkData) {
1707 pUserData->m_pLinkData->Retain(); 1707 pUserData->m_pLinkData->Retain();
1708 pTP->pLinkData = pUserData->m_pLinkData; 1708 pTP->pLinkData = pUserData->m_pLinkData;
1709 } else { 1709 } else {
1710 pTP->pLinkData = NULL; 1710 pTP->pLinkData = nullptr;
1711 } 1711 }
1712 DoTabstops(pStyle, pPieceLine); 1712 DoTabstops(pStyle, pPieceLine);
1713 } 1713 }
1714 for (i = 0; i < iPieces; i++) { 1714 for (i = 0; i < iPieces; i++) {
1715 XFA_TextPiece* pTP = pPieceLine->m_textPieces.GetAt(i); 1715 XFA_TextPiece* pTP = pPieceLine->m_textPieces.GetAt(i);
1716 FX_FLOAT& fTop = pTP->rtPiece.top; 1716 FX_FLOAT& fTop = pTP->rtPiece.top;
1717 FX_FLOAT fBaseLineTemp = fTop; 1717 FX_FLOAT fBaseLineTemp = fTop;
1718 fTop = fLinePos + fLineStep - pTP->rtPiece.height - fBaseLineTemp; 1718 fTop = fLinePos + fLineStep - pTP->rtPiece.height - fBaseLineTemp;
1719 fTop = std::max(0.0f, fTop); 1719 fTop = std::max(0.0f, fTop);
1720 } 1720 }
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 pPath->AddLine(pt1, pt2); 1910 pPath->AddLine(pt1, pt2);
1911 fEndY += 2.0f; 1911 fEndY += 2.0f;
1912 } 1912 }
1913 } 1913 }
1914 pDevice->DrawPath(pPen, 1, pPath.get(), &tmDoc2Device); 1914 pDevice->DrawPath(pPen, 1, pPath.get(), &tmDoc2Device);
1915 } 1915 }
1916 1916
1917 int32_t CXFA_TextLayout::GetDisplayPos(const XFA_TextPiece* pPiece, 1917 int32_t CXFA_TextLayout::GetDisplayPos(const XFA_TextPiece* pPiece,
1918 FXTEXT_CHARPOS* pCharPos, 1918 FXTEXT_CHARPOS* pCharPos,
1919 FX_BOOL bCharCode) { 1919 FX_BOOL bCharCode) {
1920 if (pPiece == NULL) { 1920 if (!pPiece)
1921 return 0; 1921 return 0;
1922 } 1922
1923 FX_RTFTEXTOBJ tr; 1923 FX_RTFTEXTOBJ tr;
1924 if (!ToRun(pPiece, tr)) { 1924 if (!ToRun(pPiece, tr)) {
1925 return 0; 1925 return 0;
1926 } 1926 }
1927 return m_pBreak->GetDisplayPos(&tr, pCharPos, bCharCode); 1927 return m_pBreak->GetDisplayPos(&tr, pCharPos, bCharCode);
1928 } 1928 }
1929 FX_BOOL CXFA_TextLayout::ToRun(const XFA_TextPiece* pPiece, FX_RTFTEXTOBJ& tr) { 1929 FX_BOOL CXFA_TextLayout::ToRun(const XFA_TextPiece* pPiece, FX_RTFTEXTOBJ& tr) {
1930 int32_t iLength = pPiece->iChars; 1930 int32_t iLength = pPiece->iChars;
1931 if (iLength < 1) { 1931 if (iLength < 1) {
1932 return FALSE; 1932 return FALSE;
1933 } 1933 }
1934 tr.pStr = pPiece->pszText; 1934 tr.pStr = pPiece->pszText;
1935 tr.pFont = pPiece->pFont; 1935 tr.pFont = pPiece->pFont;
1936 tr.pRect = &pPiece->rtPiece; 1936 tr.pRect = &pPiece->rtPiece;
1937 tr.pWidths = pPiece->pWidths; 1937 tr.pWidths = pPiece->pWidths;
1938 tr.iLength = iLength; 1938 tr.iLength = iLength;
1939 tr.fFontSize = pPiece->fFontSize; 1939 tr.fFontSize = pPiece->fFontSize;
1940 tr.iBidiLevel = pPiece->iBidiLevel; 1940 tr.iBidiLevel = pPiece->iBidiLevel;
1941 tr.iCharRotation = 0; 1941 tr.iCharRotation = 0;
1942 tr.wLineBreakChar = L'\n'; 1942 tr.wLineBreakChar = L'\n';
1943 tr.iVerticalScale = pPiece->iVerScale; 1943 tr.iVerticalScale = pPiece->iVerScale;
1944 tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab; 1944 tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab;
1945 tr.iHorizontalScale = pPiece->iHorScale; 1945 tr.iHorizontalScale = pPiece->iHorScale;
1946 return TRUE; 1946 return TRUE;
1947 } 1947 }
OLDNEW
« no previous file with comments | « xfa/fxfa/app/xfa_textlayout.h ('k') | xfa/fxfa/fm2js/xfa_fmparse.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698