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

Side by Side Diff: core/fpdftext/cpdf_textpage.cpp

Issue 2307953003: Remove CFX_Matrix::Copy() in favor of assignment (Closed)
Patch Set: Created 4 years, 3 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 | « core/fpdfapi/fpdf_render/fpdf_render_text.cpp ('k') | core/fxcrt/include/fx_coordinates.h » ('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 "core/fpdftext/include/cpdf_textpage.h" 7 #include "core/fpdftext/include/cpdf_textpage.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 info->m_OriginX = charinfo.m_OriginX; 380 info->m_OriginX = charinfo.m_OriginX;
381 info->m_OriginY = charinfo.m_OriginY; 381 info->m_OriginY = charinfo.m_OriginY;
382 info->m_Unicode = charinfo.m_Unicode; 382 info->m_Unicode = charinfo.m_Unicode;
383 info->m_Flag = charinfo.m_Flag; 383 info->m_Flag = charinfo.m_Flag;
384 info->m_CharBox = charinfo.m_CharBox; 384 info->m_CharBox = charinfo.m_CharBox;
385 info->m_pTextObj = charinfo.m_pTextObj; 385 info->m_pTextObj = charinfo.m_pTextObj;
386 if (charinfo.m_pTextObj && charinfo.m_pTextObj->GetFont()) 386 if (charinfo.m_pTextObj && charinfo.m_pTextObj->GetFont())
387 info->m_FontSize = charinfo.m_pTextObj->GetFontSize(); 387 info->m_FontSize = charinfo.m_pTextObj->GetFontSize();
388 else 388 else
389 info->m_FontSize = kDefaultFontSize; 389 info->m_FontSize = kDefaultFontSize;
390 info->m_Matrix.Copy(charinfo.m_Matrix); 390 info->m_Matrix = charinfo.m_Matrix;
391 } 391 }
392 392
393 void CPDF_TextPage::CheckMarkedContentObject(int32_t& start, 393 void CPDF_TextPage::CheckMarkedContentObject(int32_t& start,
394 int32_t& nCount) const { 394 int32_t& nCount) const {
395 PAGECHAR_INFO charinfo = m_CharList[start]; 395 PAGECHAR_INFO charinfo = m_CharList[start];
396 PAGECHAR_INFO charinfo2 = m_CharList[start + nCount - 1]; 396 PAGECHAR_INFO charinfo2 = m_CharList[start + nCount - 1];
397 if (FPDFTEXT_CHAR_PIECE != charinfo.m_Flag && 397 if (FPDFTEXT_CHAR_PIECE != charinfo.m_Flag &&
398 FPDFTEXT_CHAR_PIECE != charinfo2.m_Flag) { 398 FPDFTEXT_CHAR_PIECE != charinfo2.m_Flag) {
399 return; 399 return;
400 } 400 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 } 558 }
559 559
560 void CPDF_TextPage::AppendGeneratedCharacter(FX_WCHAR unicode, 560 void CPDF_TextPage::AppendGeneratedCharacter(FX_WCHAR unicode,
561 const CFX_Matrix& formMatrix) { 561 const CFX_Matrix& formMatrix) {
562 PAGECHAR_INFO generateChar; 562 PAGECHAR_INFO generateChar;
563 if (!GenerateCharInfo(unicode, generateChar)) 563 if (!GenerateCharInfo(unicode, generateChar))
564 return; 564 return;
565 565
566 m_TextBuf.AppendChar(unicode); 566 m_TextBuf.AppendChar(unicode);
567 if (!formMatrix.IsIdentity()) 567 if (!formMatrix.IsIdentity())
568 generateChar.m_Matrix.Copy(formMatrix); 568 generateChar.m_Matrix = formMatrix;
569 m_CharList.push_back(generateChar); 569 m_CharList.push_back(generateChar);
570 } 570 }
571 571
572 void CPDF_TextPage::ProcessObject() { 572 void CPDF_TextPage::ProcessObject() {
573 if (m_pPage->GetPageObjectList()->empty()) 573 if (m_pPage->GetPageObjectList()->empty())
574 return; 574 return;
575 575
576 m_TextlineDir = FindTextlineFlowOrientation(); 576 m_TextlineDir = FindTextlineFlowOrientation();
577 const CPDF_PageObjectList* pObjList = m_pPage->GetPageObjectList(); 577 const CPDF_PageObjectList* pObjList = m_pPage->GetPageObjectList();
578 for (auto it = pObjList->begin(); it != pObjList->end(); ++it) { 578 for (auto it = pObjList->begin(); it != pObjList->end(); ++it) {
(...skipping 14 matching lines...) Expand all
593 CloseTempLine(); 593 CloseTempLine();
594 } 594 }
595 595
596 void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj, 596 void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj,
597 const CFX_Matrix& formMatrix) { 597 const CFX_Matrix& formMatrix) {
598 CPDF_PageObjectList* pObjectList = pFormObj->m_pForm->GetPageObjectList(); 598 CPDF_PageObjectList* pObjectList = pFormObj->m_pForm->GetPageObjectList();
599 if (pObjectList->empty()) 599 if (pObjectList->empty())
600 return; 600 return;
601 601
602 CFX_Matrix curFormMatrix; 602 CFX_Matrix curFormMatrix;
603 curFormMatrix.Copy(pFormObj->m_FormMatrix); 603 curFormMatrix = pFormObj->m_FormMatrix;
604 curFormMatrix.Concat(formMatrix); 604 curFormMatrix.Concat(formMatrix);
605 605
606 for (auto it = pObjectList->begin(); it != pObjectList->end(); ++it) { 606 for (auto it = pObjectList->begin(); it != pObjectList->end(); ++it) {
607 if (CPDF_PageObject* pPageObj = it->get()) { 607 if (CPDF_PageObject* pPageObj = it->get()) {
608 if (pPageObj->IsText()) 608 if (pPageObj->IsText())
609 ProcessTextObject(pPageObj->AsText(), curFormMatrix, pObjectList, it); 609 ProcessTextObject(pPageObj->AsText(), curFormMatrix, pObjectList, it);
610 else if (pPageObj->IsForm()) 610 else if (pPageObj->IsForm())
611 ProcessFormObject(pPageObj->AsForm(), curFormMatrix); 611 ProcessFormObject(pPageObj->AsForm(), curFormMatrix);
612 } 612 }
613 } 613 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 charinfo.m_OriginY = fPosY; 914 charinfo.m_OriginY = fPosY;
915 charinfo.m_Index = nCharInfoIndex; 915 charinfo.m_Index = nCharInfoIndex;
916 charinfo.m_Unicode = wChar; 916 charinfo.m_Unicode = wChar;
917 charinfo.m_CharCode = pFont->CharCodeFromUnicode(wChar); 917 charinfo.m_CharCode = pFont->CharCodeFromUnicode(wChar);
918 charinfo.m_Flag = FPDFTEXT_CHAR_PIECE; 918 charinfo.m_Flag = FPDFTEXT_CHAR_PIECE;
919 charinfo.m_pTextObj = pTextObj; 919 charinfo.m_pTextObj = pTextObj;
920 charinfo.m_CharBox.top = charBox.top; 920 charinfo.m_CharBox.top = charBox.top;
921 charinfo.m_CharBox.left = charBox.left; 921 charinfo.m_CharBox.left = charBox.left;
922 charinfo.m_CharBox.right = charBox.right; 922 charinfo.m_CharBox.right = charBox.right;
923 charinfo.m_CharBox.bottom = charBox.bottom; 923 charinfo.m_CharBox.bottom = charBox.bottom;
924 charinfo.m_Matrix.Copy(matrix); 924 charinfo.m_Matrix = matrix;
925 m_TempTextBuf.AppendChar(wChar); 925 m_TempTextBuf.AppendChar(wChar);
926 m_TempCharList.push_back(charinfo); 926 m_TempCharList.push_back(charinfo);
927 } 927 }
928 } 928 }
929 929
930 void CPDF_TextPage::FindPreviousTextObject() { 930 void CPDF_TextPage::FindPreviousTextObject() {
931 if (m_TempCharList.empty() && m_CharList.empty()) 931 if (m_TempCharList.empty() && m_CharList.empty())
932 return; 932 return;
933 933
934 PAGECHAR_INFO preChar = 934 PAGECHAR_INFO preChar =
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f) 977 if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f)
978 return; 978 return;
979 CFX_Matrix formMatrix = Obj.m_formMatrix; 979 CFX_Matrix formMatrix = Obj.m_formMatrix;
980 CPDF_Font* pFont = pTextObj->GetFont(); 980 CPDF_Font* pFont = pTextObj->GetFont();
981 CFX_Matrix matrix; 981 CFX_Matrix matrix;
982 pTextObj->GetTextMatrix(&matrix); 982 pTextObj->GetTextMatrix(&matrix);
983 matrix.Concat(formMatrix); 983 matrix.Concat(formMatrix);
984 FPDFText_MarkedContent ePreMKC = PreMarkedContent(Obj); 984 FPDFText_MarkedContent ePreMKC = PreMarkedContent(Obj);
985 if (ePreMKC == FPDFText_MarkedContent::Done) { 985 if (ePreMKC == FPDFText_MarkedContent::Done) {
986 m_pPreTextObj = pTextObj; 986 m_pPreTextObj = pTextObj;
987 m_perMatrix.Copy(formMatrix); 987 m_perMatrix = formMatrix;
988 return; 988 return;
989 } 989 }
990 GenerateCharacter result = GenerateCharacter::None; 990 GenerateCharacter result = GenerateCharacter::None;
991 if (m_pPreTextObj) { 991 if (m_pPreTextObj) {
992 result = ProcessInsertObject(pTextObj, formMatrix); 992 result = ProcessInsertObject(pTextObj, formMatrix);
993 if (result == GenerateCharacter::LineBreak) { 993 if (result == GenerateCharacter::LineBreak) {
994 m_CurlineRect = 994 m_CurlineRect =
995 CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom, 995 CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
996 Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top); 996 Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
997 } else { 997 } else {
998 m_CurlineRect.Union( 998 m_CurlineRect.Union(
999 CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom, 999 CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
1000 Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top)); 1000 Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top));
1001 } 1001 }
1002 switch (result) { 1002 switch (result) {
1003 case GenerateCharacter::None: 1003 case GenerateCharacter::None:
1004 break; 1004 break;
1005 case GenerateCharacter::Space: { 1005 case GenerateCharacter::Space: {
1006 PAGECHAR_INFO generateChar; 1006 PAGECHAR_INFO generateChar;
1007 if (GenerateCharInfo(TEXT_SPACE_CHAR, generateChar)) { 1007 if (GenerateCharInfo(TEXT_SPACE_CHAR, generateChar)) {
1008 if (!formMatrix.IsIdentity()) 1008 if (!formMatrix.IsIdentity())
1009 generateChar.m_Matrix.Copy(formMatrix); 1009 generateChar.m_Matrix = formMatrix;
1010 m_TempTextBuf.AppendChar(TEXT_SPACE_CHAR); 1010 m_TempTextBuf.AppendChar(TEXT_SPACE_CHAR);
1011 m_TempCharList.push_back(generateChar); 1011 m_TempCharList.push_back(generateChar);
1012 } 1012 }
1013 break; 1013 break;
1014 } 1014 }
1015 case GenerateCharacter::LineBreak: 1015 case GenerateCharacter::LineBreak:
1016 CloseTempLine(); 1016 CloseTempLine();
1017 if (m_TextBuf.GetSize()) { 1017 if (m_TextBuf.GetSize()) {
1018 AppendGeneratedCharacter(TEXT_RETURN_CHAR, formMatrix); 1018 AppendGeneratedCharacter(TEXT_RETURN_CHAR, formMatrix);
1019 AppendGeneratedCharacter(TEXT_LINEFEED_CHAR, formMatrix); 1019 AppendGeneratedCharacter(TEXT_LINEFEED_CHAR, formMatrix);
(...skipping 25 matching lines...) Expand all
1045 break; 1045 break;
1046 } 1046 }
1047 } else { 1047 } else {
1048 m_CurlineRect = 1048 m_CurlineRect =
1049 CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom, 1049 CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
1050 Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top); 1050 Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
1051 } 1051 }
1052 if (ePreMKC == FPDFText_MarkedContent::Delay) { 1052 if (ePreMKC == FPDFText_MarkedContent::Delay) {
1053 ProcessMarkedContent(Obj); 1053 ProcessMarkedContent(Obj);
1054 m_pPreTextObj = pTextObj; 1054 m_pPreTextObj = pTextObj;
1055 m_perMatrix.Copy(formMatrix); 1055 m_perMatrix = formMatrix;
1056 return; 1056 return;
1057 } 1057 }
1058 m_pPreTextObj = pTextObj; 1058 m_pPreTextObj = pTextObj;
1059 m_perMatrix.Copy(formMatrix); 1059 m_perMatrix = formMatrix;
1060 int nItems = pTextObj->CountItems(); 1060 int nItems = pTextObj->CountItems();
1061 FX_FLOAT baseSpace = CalculateBaseSpace(pTextObj, matrix); 1061 FX_FLOAT baseSpace = CalculateBaseSpace(pTextObj, matrix);
1062 1062
1063 const FX_BOOL bR2L = IsRightToLeft(pTextObj, pFont, nItems); 1063 const FX_BOOL bR2L = IsRightToLeft(pTextObj, pFont, nItems);
1064 const FX_BOOL bIsBidiAndMirrorInverse = 1064 const FX_BOOL bIsBidiAndMirrorInverse =
1065 bR2L && (matrix.a * matrix.d - matrix.b * matrix.c) < 0; 1065 bR2L && (matrix.a * matrix.d - matrix.b * matrix.c) < 0;
1066 int32_t iBufStartAppend = m_TempTextBuf.GetLength(); 1066 int32_t iBufStartAppend = m_TempTextBuf.GetLength();
1067 int32_t iCharListStartAppend = 1067 int32_t iCharListStartAppend =
1068 pdfium::CollectionSize<int32_t>(m_TempCharList); 1068 pdfium::CollectionSize<int32_t>(m_TempCharList);
1069 1069
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1110 threshold = NormalizeThreshold(threshold); 1110 threshold = NormalizeThreshold(threshold);
1111 threshold = fontsize_h * threshold / 1000; 1111 threshold = fontsize_h * threshold / 1000;
1112 } 1112 }
1113 if (threshold && (spacing && spacing >= threshold)) { 1113 if (threshold && (spacing && spacing >= threshold)) {
1114 charinfo.m_Unicode = TEXT_SPACE_CHAR; 1114 charinfo.m_Unicode = TEXT_SPACE_CHAR;
1115 charinfo.m_Flag = FPDFTEXT_CHAR_GENERATED; 1115 charinfo.m_Flag = FPDFTEXT_CHAR_GENERATED;
1116 charinfo.m_pTextObj = pTextObj; 1116 charinfo.m_pTextObj = pTextObj;
1117 charinfo.m_Index = m_TextBuf.GetLength(); 1117 charinfo.m_Index = m_TextBuf.GetLength();
1118 m_TempTextBuf.AppendChar(TEXT_SPACE_CHAR); 1118 m_TempTextBuf.AppendChar(TEXT_SPACE_CHAR);
1119 charinfo.m_CharCode = CPDF_Font::kInvalidCharCode; 1119 charinfo.m_CharCode = CPDF_Font::kInvalidCharCode;
1120 charinfo.m_Matrix.Copy(formMatrix); 1120 charinfo.m_Matrix = formMatrix;
1121 matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX, 1121 matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX,
1122 charinfo.m_OriginY); 1122 charinfo.m_OriginY);
1123 charinfo.m_CharBox = 1123 charinfo.m_CharBox =
1124 CFX_FloatRect(charinfo.m_OriginX, charinfo.m_OriginY, 1124 CFX_FloatRect(charinfo.m_OriginX, charinfo.m_OriginY,
1125 charinfo.m_OriginX, charinfo.m_OriginY); 1125 charinfo.m_OriginX, charinfo.m_OriginY);
1126 m_TempCharList.push_back(charinfo); 1126 m_TempCharList.push_back(charinfo);
1127 } 1127 }
1128 if (item.m_CharCode == CPDF_Font::kInvalidCharCode) 1128 if (item.m_CharCode == CPDF_Font::kInvalidCharCode)
1129 continue; 1129 continue;
1130 } 1130 }
(...skipping 30 matching lines...) Expand all
1161 rect.bottom * pTextObj->GetFontSize() / 1000 + item.m_OriginY; 1161 rect.bottom * pTextObj->GetFontSize() / 1000 + item.m_OriginY;
1162 if (fabsf(charinfo.m_CharBox.top - charinfo.m_CharBox.bottom) < 0.01f) { 1162 if (fabsf(charinfo.m_CharBox.top - charinfo.m_CharBox.bottom) < 0.01f) {
1163 charinfo.m_CharBox.top = 1163 charinfo.m_CharBox.top =
1164 charinfo.m_CharBox.bottom + pTextObj->GetFontSize(); 1164 charinfo.m_CharBox.bottom + pTextObj->GetFontSize();
1165 } 1165 }
1166 if (fabsf(charinfo.m_CharBox.right - charinfo.m_CharBox.left) < 0.01f) { 1166 if (fabsf(charinfo.m_CharBox.right - charinfo.m_CharBox.left) < 0.01f) {
1167 charinfo.m_CharBox.right = 1167 charinfo.m_CharBox.right =
1168 charinfo.m_CharBox.left + pTextObj->GetCharWidth(charinfo.m_CharCode); 1168 charinfo.m_CharBox.left + pTextObj->GetCharWidth(charinfo.m_CharCode);
1169 } 1169 }
1170 matrix.TransformRect(charinfo.m_CharBox); 1170 matrix.TransformRect(charinfo.m_CharBox);
1171 charinfo.m_Matrix.Copy(matrix); 1171 charinfo.m_Matrix = matrix;
1172 if (wstrItem.IsEmpty()) { 1172 if (wstrItem.IsEmpty()) {
1173 charinfo.m_Unicode = 0; 1173 charinfo.m_Unicode = 0;
1174 m_TempCharList.push_back(charinfo); 1174 m_TempCharList.push_back(charinfo);
1175 m_TempTextBuf.AppendChar(0xfffe); 1175 m_TempTextBuf.AppendChar(0xfffe);
1176 continue; 1176 continue;
1177 } else { 1177 } else {
1178 int nTotal = wstrItem.GetLength(); 1178 int nTotal = wstrItem.GetLength();
1179 bool bDel = false; 1179 bool bDel = false;
1180 const int count = 1180 const int count =
1181 std::min(pdfium::CollectionSize<int>(m_TempCharList), 7); 1181 std::min(pdfium::CollectionSize<int>(m_TempCharList), 7);
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 info.m_OriginY); 1537 info.m_OriginY);
1538 return TRUE; 1538 return TRUE;
1539 } 1539 }
1540 1540
1541 FX_BOOL CPDF_TextPage::IsRectIntersect(const CFX_FloatRect& rect1, 1541 FX_BOOL CPDF_TextPage::IsRectIntersect(const CFX_FloatRect& rect1,
1542 const CFX_FloatRect& rect2) { 1542 const CFX_FloatRect& rect2) {
1543 CFX_FloatRect rect = rect1; 1543 CFX_FloatRect rect = rect1;
1544 rect.Intersect(rect2); 1544 rect.Intersect(rect2);
1545 return !rect.IsEmpty(); 1545 return !rect.IsEmpty();
1546 } 1546 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_render/fpdf_render_text.cpp ('k') | core/fxcrt/include/fx_coordinates.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698