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

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

Issue 1919563002: Pass CFX_*StringCs to FX_HashCode_GETA and _GETW hash functions. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: fix issue from c4 Created 4 years, 7 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_fm2jscontext.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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 CXFA_Para para = pTextProvider->GetParaNode(); 105 CXFA_Para para = pTextProvider->GetParaNode();
106 IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(NULL); 106 IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(NULL);
107 IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles(); 107 IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
108 IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles(); 108 IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
109 FX_FLOAT fLineHeight = 0, fFontSize = 10; 109 FX_FLOAT fLineHeight = 0, fFontSize = 10;
110 if (para) { 110 if (para) {
111 fLineHeight = para.GetLineHeight(); 111 fLineHeight = para.GetLineHeight();
112 FDE_CSSLENGTH indent; 112 FDE_CSSLENGTH indent;
113 indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent()); 113 indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent());
114 pParaStyle->SetTextIndent(indent); 114 pParaStyle->SetTextIndent(indent);
115 FDE_CSSTEXTALIGN hAlgin = FDE_CSSTEXTALIGN_Left; 115 FDE_CSSTEXTALIGN hAlign = FDE_CSSTEXTALIGN_Left;
116 switch (para.GetHorizontalAlign()) { 116 switch (para.GetHorizontalAlign()) {
117 case XFA_ATTRIBUTEENUM_Center: 117 case XFA_ATTRIBUTEENUM_Center:
118 hAlgin = FDE_CSSTEXTALIGN_Center; 118 hAlign = FDE_CSSTEXTALIGN_Center;
119 break; 119 break;
120 case XFA_ATTRIBUTEENUM_Right: 120 case XFA_ATTRIBUTEENUM_Right:
121 hAlgin = FDE_CSSTEXTALIGN_Right; 121 hAlign = FDE_CSSTEXTALIGN_Right;
122 break; 122 break;
123 case XFA_ATTRIBUTEENUM_Justify: 123 case XFA_ATTRIBUTEENUM_Justify:
124 hAlgin = FDE_CSSTEXTALIGN_Justify; 124 hAlign = FDE_CSSTEXTALIGN_Justify;
125 break; 125 break;
126 case XFA_ATTRIBUTEENUM_JustifyAll: 126 case XFA_ATTRIBUTEENUM_JustifyAll:
127 hAlgin = FDE_CSSTEXTALIGN_JustifyAll; 127 hAlign = FDE_CSSTEXTALIGN_JustifyAll;
128 break; 128 break;
129 } 129 }
130 pParaStyle->SetTextAlign(hAlgin); 130 pParaStyle->SetTextAlign(hAlign);
131 FDE_CSSRECT rtMarginWidth; 131 FDE_CSSRECT rtMarginWidth;
132 rtMarginWidth.left.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginLeft()); 132 rtMarginWidth.left.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginLeft());
133 rtMarginWidth.top.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceAbove()); 133 rtMarginWidth.top.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceAbove());
134 rtMarginWidth.right.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginRight()); 134 rtMarginWidth.right.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginRight());
135 rtMarginWidth.bottom.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceBelow()); 135 rtMarginWidth.bottom.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceBelow());
136 pStyle->GetBoundaryStyles()->SetMarginWidth(rtMarginWidth); 136 pStyle->GetBoundaryStyles()->SetMarginWidth(rtMarginWidth);
137 } 137 }
138 if (font) { 138 if (font) {
139 pFontStyle->SetColor(font.GetColor()); 139 pFontStyle->SetColor(font.GetColor());
140 pFontStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFONTSTYLE_Italic 140 pFontStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFONTSTYLE_Italic
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 static const uint32_t s_XFATagName[] = { 268 static const uint32_t s_XFATagName[] = {
269 0x61, 0x62, 0x69, 0x70, 0x0001f714, 269 0x61, 0x62, 0x69, 0x70, 0x0001f714,
270 0x00022a55, 0x000239bb, 0x00025881, 0x0bd37faa, 0x0bd37fb8, 270 0x00022a55, 0x000239bb, 0x00025881, 0x0bd37faa, 0x0bd37fb8,
271 0xa73e3af2, 0xb182eaae, 0xdb8ac455, 271 0xa73e3af2, 0xb182eaae, 0xdb8ac455,
272 }; 272 };
273 CFX_WideString wsName; 273 CFX_WideString wsName;
274 if (pXMLNode->GetType() == FDE_XMLNODE_Element) { 274 if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
275 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode); 275 CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode);
276 pXMLElement->GetLocalTagName(wsName); 276 pXMLElement->GetLocalTagName(wsName);
277 tagProvider.SetTagNameObj(wsName); 277 tagProvider.SetTagNameObj(wsName);
278 uint32_t dwHashCode = 278 uint32_t dwHashCode = FX_HashCode_GetW(wsName.AsStringC(), true);
279 FX_HashCode_String_GetW(wsName.c_str(), wsName.GetLength(), TRUE);
280 static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(uint32_t); 279 static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(uint32_t);
281 CFX_DSPATemplate<uint32_t> lookup; 280 CFX_DSPATemplate<uint32_t> lookup;
282 tagProvider.m_bTagAviliable = 281 tagProvider.m_bTagAviliable =
283 lookup.Lookup(dwHashCode, s_XFATagName, s_iCount) > -1; 282 lookup.Lookup(dwHashCode, s_XFATagName, s_iCount) > -1;
284 CFX_WideString wsValue; 283 CFX_WideString wsValue;
285 pXMLElement->GetString(FX_WSTRC(L"style").c_str(), wsValue); 284 pXMLElement->GetString(FX_WSTRC(L"style").c_str(), wsValue);
286 if (!wsValue.IsEmpty()) { 285 if (!wsValue.IsEmpty()) {
287 tagProvider.SetAttribute(FX_WSTRC(L"style"), wsValue); 286 tagProvider.SetAttribute(FX_WSTRC(L"style"), wsValue);
288 } 287 }
289 } else if (pXMLNode->GetType() == FDE_XMLNODE_Text) { 288 } else if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
290 tagProvider.m_bTagAviliable = TRUE; 289 tagProvider.m_bTagAviliable = TRUE;
291 tagProvider.m_bContent = TRUE; 290 tagProvider.m_bContent = TRUE;
292 } 291 }
293 } 292 }
294 293
295 int32_t CXFA_TextParser::GetVAlgin(CXFA_TextProvider* pTextProvider) const { 294 int32_t CXFA_TextParser::GetVAlign(CXFA_TextProvider* pTextProvider) const {
296 CXFA_Para para = pTextProvider->GetParaNode(); 295 CXFA_Para para = pTextProvider->GetParaNode();
297 return para ? para.GetVerticalAlign() : XFA_ATTRIBUTEENUM_Top; 296 return para ? para.GetVerticalAlign() : XFA_ATTRIBUTEENUM_Top;
298 } 297 }
299 298
300 FX_FLOAT CXFA_TextParser::GetTabInterval(IFDE_CSSComputedStyle* pStyle) const { 299 FX_FLOAT CXFA_TextParser::GetTabInterval(IFDE_CSSComputedStyle* pStyle) const {
301 CFX_WideString wsValue; 300 CFX_WideString wsValue;
302 if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue)) 301 if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue))
303 return CXFA_Measurement(wsValue.AsStringC()).ToUnit(XFA_UNIT_Pt); 302 return CXFA_Measurement(wsValue.AsStringC()).ToUnit(XFA_UNIT_Pt);
304 return 36; 303 return 36;
305 } 304 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 } 605 }
607 while (iCur < iLength && pTabStops[iCur] <= ' ') { 606 while (iCur < iLength && pTabStops[iCur] <= ' ') {
608 iCur++; 607 iCur++;
609 } 608 }
610 iLast = iCur; 609 iLast = iCur;
611 eStatus = XFA_TABSTOPSSTATUS_Location; 610 eStatus = XFA_TABSTOPSSTATUS_Location;
612 } 611 }
613 break; 612 break;
614 case XFA_TABSTOPSSTATUS_Location: 613 case XFA_TABSTOPSSTATUS_Location:
615 if (ch == ' ') { 614 if (ch == ' ') {
616 uint32_t dwHashCode = FX_HashCode_String_GetW( 615 uint32_t dwHashCode = FX_HashCode_GetW(wsAlign.AsStringC(), true);
617 wsAlign.c_str(), wsAlign.GetLength(), TRUE);
618 CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast)); 616 CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
619 FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt); 617 FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt);
620 pTabstopContext->Append(dwHashCode, fPos); 618 pTabstopContext->Append(dwHashCode, fPos);
621 wsAlign.clear(); 619 wsAlign.clear();
622 eStatus = XFA_TABSTOPSSTATUS_None; 620 eStatus = XFA_TABSTOPSSTATUS_None;
623 } 621 }
624 iCur++; 622 iCur++;
625 break; 623 break;
626 default: 624 default:
627 break; 625 break;
628 } 626 }
629 } 627 }
630 if (!wsAlign.IsEmpty()) { 628 if (!wsAlign.IsEmpty()) {
631 uint32_t dwHashCode = 629 uint32_t dwHashCode = FX_HashCode_GetW(wsAlign.AsStringC(), true);
632 FX_HashCode_String_GetW(wsAlign.c_str(), wsAlign.GetLength(), TRUE);
633 CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast)); 630 CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
634 FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt); 631 FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt);
635 pTabstopContext->Append(dwHashCode, fPos); 632 pTabstopContext->Append(dwHashCode, fPos);
636 } 633 }
637 return TRUE; 634 return TRUE;
638 } 635 }
639 CXFA_TextLayout::CXFA_TextLayout(CXFA_TextProvider* pTextProvider) 636 CXFA_TextLayout::CXFA_TextLayout(CXFA_TextProvider* pTextProvider)
640 : m_bHasBlock(FALSE), 637 : m_bHasBlock(FALSE),
641 m_pTextProvider(pTextProvider), 638 m_pTextProvider(pTextProvider),
642 m_pTextDataNode(nullptr), 639 m_pTextDataNode(nullptr),
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 fHeight = GetLayoutHeight(); 924 fHeight = GetLayoutHeight();
928 } 925 }
929 m_pLoader->m_fHeight = fHeight; 926 m_pLoader->m_fHeight = fHeight;
930 if (fContentAreaHeight < 0) { 927 if (fContentAreaHeight < 0) {
931 return FALSE; 928 return FALSE;
932 } 929 }
933 m_bHasBlock = TRUE; 930 m_bHasBlock = TRUE;
934 if (iBlockCount == 0 && fHeight > 0) { 931 if (iBlockCount == 0 && fHeight > 0) {
935 fHeight = fTextHeight - GetLayoutHeight(); 932 fHeight = fTextHeight - GetLayoutHeight();
936 if (fHeight > 0) { 933 if (fHeight > 0) {
937 int32_t iAlign = m_textParser.GetVAlgin(m_pTextProvider); 934 int32_t iAlign = m_textParser.GetVAlign(m_pTextProvider);
938 if (iAlign == XFA_ATTRIBUTEENUM_Middle) { 935 if (iAlign == XFA_ATTRIBUTEENUM_Middle) {
939 fHeight /= 2.0f; 936 fHeight /= 2.0f;
940 } else if (iAlign != XFA_ATTRIBUTEENUM_Bottom) { 937 } else if (iAlign != XFA_ATTRIBUTEENUM_Bottom) {
941 fHeight = 0; 938 fHeight = 0;
942 } 939 }
943 m_pLoader->m_fStartLineOffset = fHeight; 940 m_pLoader->m_fStartLineOffset = fHeight;
944 } 941 }
945 } 942 }
946 FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset; 943 FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset;
947 int32_t iLineIndex = 0; 944 int32_t iLineIndex = 0;
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 delete pSolidBrush; 1243 delete pSolidBrush;
1247 delete pPen; 1244 delete pPen;
1248 pDevice->Release(); 1245 pDevice->Release();
1249 return iPieceLines; 1246 return iPieceLines;
1250 } 1247 }
1251 void CXFA_TextLayout::UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom) { 1248 void CXFA_TextLayout::UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom) {
1252 fHeight -= fBottom; 1249 fHeight -= fBottom;
1253 if (fHeight < 0.1f) { 1250 if (fHeight < 0.1f) {
1254 return; 1251 return;
1255 } 1252 }
1256 switch (m_textParser.GetVAlgin(m_pTextProvider)) { 1253 switch (m_textParser.GetVAlign(m_pTextProvider)) {
1257 case XFA_ATTRIBUTEENUM_Middle: 1254 case XFA_ATTRIBUTEENUM_Middle:
1258 fHeight /= 2.0f; 1255 fHeight /= 2.0f;
1259 break; 1256 break;
1260 case XFA_ATTRIBUTEENUM_Bottom: 1257 case XFA_ATTRIBUTEENUM_Bottom:
1261 break; 1258 break;
1262 default: 1259 default:
1263 return; 1260 return;
1264 } 1261 }
1265 int32_t iCount = m_pieceLines.GetSize(); 1262 int32_t iCount = m_pieceLines.GetSize();
1266 for (int32_t i = 0; i < iCount; i++) { 1263 for (int32_t i = 0; i < iCount; i++) {
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
1636 XFA_TextPiece* p = pPieceLine->m_textPieces.GetAt(iPieces - 2); 1633 XFA_TextPiece* p = pPieceLine->m_textPieces.GetAt(iPieces - 2);
1637 fRight = p->rtPiece.right(); 1634 fRight = p->rtPiece.right();
1638 } 1635 }
1639 m_pTabstopContext->m_fTabWidth = 1636 m_pTabstopContext->m_fTabWidth =
1640 pPiece->rtPiece.width + pPiece->rtPiece.left - fRight; 1637 pPiece->rtPiece.width + pPiece->rtPiece.left - fRight;
1641 } else if (iTabstopsIndex > -1) { 1638 } else if (iTabstopsIndex > -1) {
1642 FX_FLOAT fLeft = 0; 1639 FX_FLOAT fLeft = 0;
1643 if (m_pTabstopContext->m_bTabstops) { 1640 if (m_pTabstopContext->m_bTabstops) {
1644 XFA_TABSTOPS* pTabstops = 1641 XFA_TABSTOPS* pTabstops =
1645 m_pTabstopContext->m_tabstops.GetDataPtr(iTabstopsIndex); 1642 m_pTabstopContext->m_tabstops.GetDataPtr(iTabstopsIndex);
1646 uint32_t dwAlgin = pTabstops->dwAlign; 1643 uint32_t dwAlign = pTabstops->dwAlign;
1647 if (dwAlgin == FX_HashCode_String_GetW(L"center", 6)) { 1644 if (dwAlign == FX_HashCode_GetW(L"center", false)) {
1648 fLeft = pPiece->rtPiece.width / 2.0f; 1645 fLeft = pPiece->rtPiece.width / 2.0f;
1649 } else if (dwAlgin == FX_HashCode_String_GetW(L"right", 5) || 1646 } else if (dwAlign == FX_HashCode_GetW(L"right", false) ||
1650 dwAlgin == FX_HashCode_String_GetW(L"before", 6)) { 1647 dwAlign == FX_HashCode_GetW(L"before", false)) {
1651 fLeft = pPiece->rtPiece.width; 1648 fLeft = pPiece->rtPiece.width;
1652 } else if (dwAlgin == FX_HashCode_String_GetW(L"decimal", 7)) { 1649 } else if (dwAlign == FX_HashCode_GetW(L"decimal", false)) {
1653 int32_t iChars = pPiece->iChars; 1650 int32_t iChars = pPiece->iChars;
1654 for (int32_t i = 0; i < iChars; i++) { 1651 for (int32_t i = 0; i < iChars; i++) {
1655 if (pPiece->pszText[i] == L'.') { 1652 if (pPiece->pszText[i] == L'.') {
1656 break; 1653 break;
1657 } 1654 }
1658 fLeft += pPiece->pWidths[i] / 20000.0f; 1655 fLeft += pPiece->pWidths[i] / 20000.0f;
1659 } 1656 }
1660 } 1657 }
1661 m_pTabstopContext->m_fLeft = 1658 m_pTabstopContext->m_fLeft =
1662 std::min(fLeft, m_pTabstopContext->m_fTabWidth); 1659 std::min(fLeft, m_pTabstopContext->m_fTabWidth);
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1963 tr.iLength = iLength; 1960 tr.iLength = iLength;
1964 tr.fFontSize = pPiece->fFontSize; 1961 tr.fFontSize = pPiece->fFontSize;
1965 tr.iBidiLevel = pPiece->iBidiLevel; 1962 tr.iBidiLevel = pPiece->iBidiLevel;
1966 tr.iCharRotation = 0; 1963 tr.iCharRotation = 0;
1967 tr.wLineBreakChar = L'\n'; 1964 tr.wLineBreakChar = L'\n';
1968 tr.iVerticalScale = pPiece->iVerScale; 1965 tr.iVerticalScale = pPiece->iVerScale;
1969 tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab; 1966 tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab;
1970 tr.iHorizontalScale = pPiece->iHorScale; 1967 tr.iHorizontalScale = pPiece->iHorScale;
1971 return TRUE; 1968 return TRUE;
1972 } 1969 }
OLDNEW
« no previous file with comments | « xfa/fxfa/app/xfa_textlayout.h ('k') | xfa/fxfa/fm2js/xfa_fm2jscontext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698