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

Side by Side Diff: core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp

Issue 1601093009: Redo CPDF_PageObjects - part 1 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase Created 4 years, 11 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
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/src/fpdfapi/fpdf_page/pageint.h" 7 #include "core/src/fpdfapi/fpdf_page/pageint.h"
8 8
9 #include "core/include/fpdfapi/fpdf_module.h" 9 #include "core/include/fpdfapi/fpdf_module.h"
10 #include "core/include/fpdfapi/fpdf_page.h" 10 #include "core/include/fpdfapi/fpdf_page.h"
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 CFX_ByteStringC type = pXObject->GetDict() 731 CFX_ByteStringC type = pXObject->GetDict()
732 ? pXObject->GetDict()->GetConstString("Subtype") 732 ? pXObject->GetDict()->GetConstString("Subtype")
733 : CFX_ByteStringC(); 733 : CFX_ByteStringC();
734 if (type == "Image") { 734 if (type == "Image") {
735 if (m_Options.m_bTextOnly) { 735 if (m_Options.m_bTextOnly) {
736 return; 736 return;
737 } 737 }
738 CPDF_ImageObject* pObj = AddImage(pXObject, NULL, FALSE); 738 CPDF_ImageObject* pObj = AddImage(pXObject, NULL, FALSE);
739 m_LastImageName = name; 739 m_LastImageName = name;
740 m_pLastImage = pObj->m_pImage; 740 m_pLastImage = pObj->m_pImage;
741 if (!m_pObjectList->m_bHasImageMask) 741 if (!m_pObjectList->HasImageMask())
742 m_pObjectList->m_bHasImageMask = m_pLastImage->IsMask(); 742 m_pObjectList->SetHasImageMask(m_pLastImage->IsMask());
743 } else if (type == "Form") { 743 } else if (type == "Form") {
744 AddForm(pXObject); 744 AddForm(pXObject);
745 } else { 745 } else {
746 return; 746 return;
747 } 747 }
748 } 748 }
749 749
750 void CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream) { 750 void CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream) {
751 if (!m_Options.m_bSeparateForm) { 751 if (!m_Options.m_bSeparateForm) {
752 CPDF_Dictionary* pResources = pStream->GetDict()->GetDict("Resources"); 752 CPDF_Dictionary* pResources = pStream->GetDict()->GetDict("Resources");
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 pFormObj->m_pForm = 784 pFormObj->m_pForm =
785 new CPDF_Form(m_pDocument, m_pPageResources, pStream, m_pResources); 785 new CPDF_Form(m_pDocument, m_pPageResources, pStream, m_pResources);
786 pFormObj->m_FormMatrix = m_pCurStates->m_CTM; 786 pFormObj->m_FormMatrix = m_pCurStates->m_CTM;
787 pFormObj->m_FormMatrix.Concat(m_mtContentToUser); 787 pFormObj->m_FormMatrix.Concat(m_mtContentToUser);
788 CPDF_AllStates status; 788 CPDF_AllStates status;
789 status.m_GeneralState = m_pCurStates->m_GeneralState; 789 status.m_GeneralState = m_pCurStates->m_GeneralState;
790 status.m_GraphState = m_pCurStates->m_GraphState; 790 status.m_GraphState = m_pCurStates->m_GraphState;
791 status.m_ColorState = m_pCurStates->m_ColorState; 791 status.m_ColorState = m_pCurStates->m_ColorState;
792 status.m_TextState = m_pCurStates->m_TextState; 792 status.m_TextState = m_pCurStates->m_TextState;
793 pFormObj->m_pForm->ParseContent(&status, NULL, NULL, &m_Options, m_Level + 1); 793 pFormObj->m_pForm->ParseContent(&status, NULL, NULL, &m_Options, m_Level + 1);
794 if (!m_pObjectList->m_bBackgroundAlphaNeeded && 794 if (!m_pObjectList->BackgroundAlphaNeeded() &&
795 pFormObj->m_pForm->m_bBackgroundAlphaNeeded) { 795 pFormObj->m_pForm->BackgroundAlphaNeeded()) {
796 m_pObjectList->m_bBackgroundAlphaNeeded = TRUE; 796 m_pObjectList->SetBackgroundAlphaNeeded(TRUE);
797 } 797 }
798 pFormObj->CalcBoundingBox(); 798 pFormObj->CalcBoundingBox();
799 SetGraphicStates(pFormObj, TRUE, TRUE, TRUE); 799 SetGraphicStates(pFormObj, TRUE, TRUE, TRUE);
800 m_pObjectList->m_ObjectList.AddTail(pFormObj); 800 m_pObjectList->AddTail(pFormObj);
801 } 801 }
802 802
803 CPDF_ImageObject* CPDF_StreamContentParser::AddImage(CPDF_Stream* pStream, 803 CPDF_ImageObject* CPDF_StreamContentParser::AddImage(CPDF_Stream* pStream,
804 CPDF_Image* pImage, 804 CPDF_Image* pImage,
805 FX_BOOL bInline) { 805 FX_BOOL bInline) {
806 if (!pStream && !pImage) { 806 if (!pStream && !pImage) {
807 return NULL; 807 return NULL;
808 } 808 }
809 CFX_Matrix ImageMatrix; 809 CFX_Matrix ImageMatrix;
810 ImageMatrix.Copy(m_pCurStates->m_CTM); 810 ImageMatrix.Copy(m_pCurStates->m_CTM);
811 ImageMatrix.Concat(m_mtContentToUser); 811 ImageMatrix.Concat(m_mtContentToUser);
812 CPDF_ImageObject* pImageObj = new CPDF_ImageObject; 812 CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
813 if (pImage) { 813 if (pImage) {
814 pImageObj->m_pImage = 814 pImageObj->m_pImage =
815 m_pDocument->GetPageData()->GetImage(pImage->GetStream()); 815 m_pDocument->GetPageData()->GetImage(pImage->GetStream());
816 } else if (pStream->GetObjNum()) { 816 } else if (pStream->GetObjNum()) {
817 pImageObj->m_pImage = m_pDocument->LoadImageF(pStream); 817 pImageObj->m_pImage = m_pDocument->LoadImageF(pStream);
818 } else { 818 } else {
819 pImageObj->m_pImage = new CPDF_Image(m_pDocument); 819 pImageObj->m_pImage = new CPDF_Image(m_pDocument);
820 pImageObj->m_pImage->LoadImageF(pStream, bInline); 820 pImageObj->m_pImage->LoadImageF(pStream, bInline);
821 } 821 }
822 SetGraphicStates(pImageObj, pImageObj->m_pImage->IsMask(), FALSE, FALSE); 822 SetGraphicStates(pImageObj, pImageObj->m_pImage->IsMask(), FALSE, FALSE);
823 pImageObj->m_Matrix = ImageMatrix; 823 pImageObj->m_Matrix = ImageMatrix;
824 pImageObj->CalcBoundingBox(); 824 pImageObj->CalcBoundingBox();
825 m_pObjectList->m_ObjectList.AddTail(pImageObj); 825 m_pObjectList->AddTail(pImageObj);
826 return pImageObj; 826 return pImageObj;
827 } 827 }
828 828
829 void CPDF_StreamContentParser::Handle_MarkPlace_Dictionary() {} 829 void CPDF_StreamContentParser::Handle_MarkPlace_Dictionary() {}
830 830
831 void CPDF_StreamContentParser::Handle_EndImage() {} 831 void CPDF_StreamContentParser::Handle_EndImage() {}
832 832
833 void CPDF_StreamContentParser::Handle_EndMarkedContent() { 833 void CPDF_StreamContentParser::Handle_EndMarkedContent() {
834 if (!m_Options.m_bMarkedContent) { 834 if (!m_Options.m_bMarkedContent) {
835 return; 835 return;
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 if (pShading->IsMeshShading()) { 1204 if (pShading->IsMeshShading()) {
1205 bbox.Intersect(GetShadingBBox(ToStream(pShading->m_pShadingObj), 1205 bbox.Intersect(GetShadingBBox(ToStream(pShading->m_pShadingObj),
1206 pShading->m_ShadingType, &pObj->m_Matrix, 1206 pShading->m_ShadingType, &pObj->m_Matrix,
1207 pShading->m_pFunctions, pShading->m_nFuncs, 1207 pShading->m_pFunctions, pShading->m_nFuncs,
1208 pShading->m_pCS)); 1208 pShading->m_pCS));
1209 } 1209 }
1210 pObj->m_Left = bbox.left; 1210 pObj->m_Left = bbox.left;
1211 pObj->m_Right = bbox.right; 1211 pObj->m_Right = bbox.right;
1212 pObj->m_Top = bbox.top; 1212 pObj->m_Top = bbox.top;
1213 pObj->m_Bottom = bbox.bottom; 1213 pObj->m_Bottom = bbox.bottom;
1214 m_pObjectList->m_ObjectList.AddTail(pObj); 1214 m_pObjectList->AddTail(pObj);
1215 } 1215 }
1216 1216
1217 void CPDF_StreamContentParser::Handle_SetCharSpace() { 1217 void CPDF_StreamContentParser::Handle_SetCharSpace() {
1218 m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(0); 1218 m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(0);
1219 } 1219 }
1220 1220
1221 void CPDF_StreamContentParser::Handle_MoveTextPoint() { 1221 void CPDF_StreamContentParser::Handle_MoveTextPoint() {
1222 m_pCurStates->m_TextLineX += GetNumber(1); 1222 m_pCurStates->m_TextLineX += GetNumber(1);
1223 m_pCurStates->m_TextLineY += GetNumber(0); 1223 m_pCurStates->m_TextLineY += GetNumber(0);
1224 m_pCurStates->m_TextX = m_pCurStates->m_TextLineX; 1224 m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 FX_FLOAT x_advance, y_advance; 1382 FX_FLOAT x_advance, y_advance;
1383 pText->CalcPositionData(&x_advance, &y_advance, m_pCurStates->m_TextHorzScale, 1383 pText->CalcPositionData(&x_advance, &y_advance, m_pCurStates->m_TextHorzScale,
1384 m_Level); 1384 m_Level);
1385 m_pCurStates->m_TextX += x_advance; 1385 m_pCurStates->m_TextX += x_advance;
1386 m_pCurStates->m_TextY += y_advance; 1386 m_pCurStates->m_TextY += y_advance;
1387 if (textmode > 3) { 1387 if (textmode > 3) {
1388 CPDF_TextObject* pCopy = new CPDF_TextObject; 1388 CPDF_TextObject* pCopy = new CPDF_TextObject;
1389 pCopy->Copy(pText); 1389 pCopy->Copy(pText);
1390 m_ClipTextList.Add(pCopy); 1390 m_ClipTextList.Add(pCopy);
1391 } 1391 }
1392 m_pObjectList->m_ObjectList.AddTail(pText); 1392 m_pObjectList->AddTail(pText);
1393 if (pKerning && pKerning[nsegs - 1] != 0) { 1393 if (pKerning && pKerning[nsegs - 1] != 0) {
1394 if (!pFont->IsVertWriting()) { 1394 if (!pFont->IsVertWriting()) {
1395 m_pCurStates->m_TextX -= 1395 m_pCurStates->m_TextX -=
1396 FXSYS_Mul(pKerning[nsegs - 1], 1396 FXSYS_Mul(pKerning[nsegs - 1],
1397 m_pCurStates->m_TextState.GetFontSize()) / 1397 m_pCurStates->m_TextState.GetFontSize()) /
1398 1000; 1398 1000;
1399 } else { 1399 } else {
1400 m_pCurStates->m_TextY -= 1400 m_pCurStates->m_TextY -=
1401 FXSYS_Mul(pKerning[nsegs - 1], 1401 FXSYS_Mul(pKerning[nsegs - 1],
1402 m_pCurStates->m_TextState.GetFontSize()) / 1402 m_pCurStates->m_TextState.GetFontSize()) /
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1617 CFX_Matrix matrix = m_pCurStates->m_CTM; 1617 CFX_Matrix matrix = m_pCurStates->m_CTM;
1618 matrix.Concat(m_mtContentToUser); 1618 matrix.Concat(m_mtContentToUser);
1619 if (bStroke || FillType) { 1619 if (bStroke || FillType) {
1620 CPDF_PathObject* pPathObj = new CPDF_PathObject; 1620 CPDF_PathObject* pPathObj = new CPDF_PathObject;
1621 pPathObj->m_bStroke = bStroke; 1621 pPathObj->m_bStroke = bStroke;
1622 pPathObj->m_FillType = FillType; 1622 pPathObj->m_FillType = FillType;
1623 pPathObj->m_Path = Path; 1623 pPathObj->m_Path = Path;
1624 pPathObj->m_Matrix = matrix; 1624 pPathObj->m_Matrix = matrix;
1625 SetGraphicStates(pPathObj, TRUE, FALSE, TRUE); 1625 SetGraphicStates(pPathObj, TRUE, FALSE, TRUE);
1626 pPathObj->CalcBoundingBox(); 1626 pPathObj->CalcBoundingBox();
1627 m_pObjectList->m_ObjectList.AddTail(pPathObj); 1627 m_pObjectList->AddTail(pPathObj);
1628 } 1628 }
1629 if (PathClipType) { 1629 if (PathClipType) {
1630 if (!matrix.IsIdentity()) { 1630 if (!matrix.IsIdentity()) {
1631 Path.Transform(&matrix); 1631 Path.Transform(&matrix);
1632 matrix.SetIdentity(); 1632 matrix.SetIdentity();
1633 } 1633 }
1634 m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE); 1634 m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE);
1635 } 1635 }
1636 } 1636 }
1637 1637
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 pArray->SetAt(i, new CPDF_Name(fullname)); 1811 pArray->SetAt(i, new CPDF_Name(fullname));
1812 } 1812 }
1813 } else { 1813 } else {
1814 PDF_ReplaceAbbr(pElement); 1814 PDF_ReplaceAbbr(pElement);
1815 } 1815 }
1816 } 1816 }
1817 break; 1817 break;
1818 } 1818 }
1819 } 1819 }
1820 } 1820 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp ('k') | core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698