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

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

Issue 2283113002: Add -> operators to CFX_CountRef. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@privatize
Patch Set: Regenerate patch, rebase off of master. 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
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/fpdfapi/fpdf_page/pageint.h" 7 #include "core/fpdfapi/fpdf_page/pageint.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 return; 576 return;
577 } 577 }
578 FX_BOOL bDirect = TRUE; 578 FX_BOOL bDirect = TRUE;
579 if (pProperty->IsName()) { 579 if (pProperty->IsName()) {
580 pProperty = FindResourceObj("Properties", pProperty->GetString()); 580 pProperty = FindResourceObj("Properties", pProperty->GetString());
581 if (!pProperty) 581 if (!pProperty)
582 return; 582 return;
583 bDirect = FALSE; 583 bDirect = FALSE;
584 } 584 }
585 if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) { 585 if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) {
586 m_CurContentMark.GetPrivateCopy()->AddMark(tag, pDict, bDirect); 586 m_CurContentMark.MakePrivateCopy();
587 m_CurContentMark->AddMark(tag, pDict, bDirect);
587 } 588 }
588 } 589 }
589 590
590 void CPDF_StreamContentParser::Handle_BeginImage() { 591 void CPDF_StreamContentParser::Handle_BeginImage() {
591 FX_FILESIZE savePos = m_pSyntax->GetPos(); 592 FX_FILESIZE savePos = m_pSyntax->GetPos();
592 CPDF_Dictionary* pDict = new CPDF_Dictionary; 593 CPDF_Dictionary* pDict = new CPDF_Dictionary;
593 while (1) { 594 while (1) {
594 CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement(); 595 CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
595 if (type == CPDF_StreamParser::Keyword) { 596 if (type == CPDF_StreamParser::Keyword) {
596 CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(), 597 CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 if (!pImgObj) { 652 if (!pImgObj) {
652 if (pStream) { 653 if (pStream) {
653 pStream->Release(); 654 pStream->Release();
654 } else { 655 } else {
655 pDict->Release(); 656 pDict->Release();
656 } 657 }
657 } 658 }
658 } 659 }
659 660
660 void CPDF_StreamContentParser::Handle_BeginMarkedContent() { 661 void CPDF_StreamContentParser::Handle_BeginMarkedContent() {
661 CFX_ByteString tag = GetString(0); 662 m_CurContentMark.MakePrivateCopy();
662 m_CurContentMark.GetPrivateCopy()->AddMark(tag, nullptr, FALSE); 663 m_CurContentMark->AddMark(GetString(0), nullptr, FALSE);
663 } 664 }
664 665
665 void CPDF_StreamContentParser::Handle_BeginText() { 666 void CPDF_StreamContentParser::Handle_BeginText() {
666 m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0); 667 m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0);
667 OnChangeTextMatrix(); 668 OnChangeTextMatrix();
668 m_pCurStates->m_TextX = 0; 669 m_pCurStates->m_TextX = 0;
669 m_pCurStates->m_TextY = 0; 670 m_pCurStates->m_TextY = 0;
670 m_pCurStates->m_TextLineX = 0; 671 m_pCurStates->m_TextLineX = 0;
671 m_pCurStates->m_TextLineY = 0; 672 m_pCurStates->m_TextLineY = 0;
672 } 673 }
673 674
674 void CPDF_StreamContentParser::Handle_CurveTo_123() { 675 void CPDF_StreamContentParser::Handle_CurveTo_123() {
675 AddPathPoint(GetNumber(5), GetNumber(4), FXPT_BEZIERTO); 676 AddPathPoint(GetNumber(5), GetNumber(4), FXPT_BEZIERTO);
676 AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO); 677 AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
677 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 678 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
678 } 679 }
679 680
680 void CPDF_StreamContentParser::Handle_ConcatMatrix() { 681 void CPDF_StreamContentParser::Handle_ConcatMatrix() {
681 CFX_Matrix new_matrix(GetNumber(5), GetNumber(4), GetNumber(3), GetNumber(2), 682 CFX_Matrix new_matrix(GetNumber(5), GetNumber(4), GetNumber(3), GetNumber(2),
682 GetNumber(1), GetNumber(0)); 683 GetNumber(1), GetNumber(0));
683 new_matrix.Concat(m_pCurStates->m_CTM); 684 new_matrix.Concat(m_pCurStates->m_CTM);
684 m_pCurStates->m_CTM = new_matrix; 685 m_pCurStates->m_CTM = new_matrix;
685 OnChangeTextMatrix(); 686 OnChangeTextMatrix();
686 } 687 }
687 688
688 void CPDF_StreamContentParser::Handle_SetColorSpace_Fill() { 689 void CPDF_StreamContentParser::Handle_SetColorSpace_Fill() {
689 CFX_ByteString csname = GetString(0); 690 CPDF_ColorSpace* pCS = FindColorSpace(GetString(0));
690 CPDF_ColorSpace* pCS = FindColorSpace(csname); 691 if (!pCS)
691 if (!pCS) {
692 return; 692 return;
693 } 693
694 m_pCurStates->m_ColorState.GetPrivateCopy()->m_FillColor.SetColorSpace(pCS); 694 m_pCurStates->m_ColorState.MakePrivateCopy();
695 m_pCurStates->m_ColorState->m_FillColor.SetColorSpace(pCS);
695 } 696 }
696 697
697 void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() { 698 void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() {
698 CFX_ByteString csname = GetString(0); 699 CPDF_ColorSpace* pCS = FindColorSpace(GetString(0));
699 CPDF_ColorSpace* pCS = FindColorSpace(csname); 700 if (!pCS)
700 if (!pCS) {
701 return; 701 return;
702 } 702
703 m_pCurStates->m_ColorState.GetPrivateCopy()->m_StrokeColor.SetColorSpace(pCS); 703 m_pCurStates->m_ColorState.MakePrivateCopy();
704 m_pCurStates->m_ColorState->m_StrokeColor.SetColorSpace(pCS);
704 } 705 }
705 706
706 void CPDF_StreamContentParser::Handle_SetDash() { 707 void CPDF_StreamContentParser::Handle_SetDash() {
707 CPDF_Array* pArray = ToArray(GetObject(1)); 708 CPDF_Array* pArray = ToArray(GetObject(1));
708 if (!pArray) 709 if (!pArray)
709 return; 710 return;
710 711
711 m_pCurStates->SetLineDash(pArray, GetNumber(0), 1.0f); 712 m_pCurStates->SetLineDash(pArray, GetNumber(0), 1.0f);
712 } 713 }
713 714
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 } 805 }
805 806
806 void CPDF_StreamContentParser::Handle_MarkPlace_Dictionary() {} 807 void CPDF_StreamContentParser::Handle_MarkPlace_Dictionary() {}
807 808
808 void CPDF_StreamContentParser::Handle_EndImage() {} 809 void CPDF_StreamContentParser::Handle_EndImage() {}
809 810
810 void CPDF_StreamContentParser::Handle_EndMarkedContent() { 811 void CPDF_StreamContentParser::Handle_EndMarkedContent() {
811 if (!m_CurContentMark) 812 if (!m_CurContentMark)
812 return; 813 return;
813 814
814 int count = m_CurContentMark.GetObject()->CountItems(); 815 if (m_CurContentMark->CountItems() == 1) {
815 if (count == 1) { 816 m_CurContentMark.Clear();
816 m_CurContentMark.SetNull();
817 return; 817 return;
818 } 818 }
819 m_CurContentMark.GetPrivateCopy()->DeleteLastMark(); 819
820 m_CurContentMark.MakePrivateCopy();
821 m_CurContentMark->DeleteLastMark();
820 } 822 }
821 823
822 void CPDF_StreamContentParser::Handle_EndText() { 824 void CPDF_StreamContentParser::Handle_EndText() {
823 if (m_ClipTextList.empty()) 825 if (m_ClipTextList.empty())
824 return; 826 return;
825 827
826 if (TextRenderingModeIsClipMode( 828 if (TextRenderingModeIsClipMode(m_pCurStates->m_TextState->m_TextMode))
827 m_pCurStates->m_TextState.GetObject()->m_TextMode)) {
828 m_pCurStates->m_ClipPath.AppendTexts(&m_ClipTextList); 829 m_pCurStates->m_ClipPath.AppendTexts(&m_ClipTextList);
829 } 830
830 m_ClipTextList.clear(); 831 m_ClipTextList.clear();
831 } 832 }
832 833
833 void CPDF_StreamContentParser::Handle_FillPath() { 834 void CPDF_StreamContentParser::Handle_FillPath() {
834 AddPathObject(FXFILL_WINDING, FALSE); 835 AddPathObject(FXFILL_WINDING, FALSE);
835 } 836 }
836 837
837 void CPDF_StreamContentParser::Handle_FillPathOld() { 838 void CPDF_StreamContentParser::Handle_FillPathOld() {
838 AddPathObject(FXFILL_WINDING, FALSE); 839 AddPathObject(FXFILL_WINDING, FALSE);
839 } 840 }
(...skipping 29 matching lines...) Expand all
869 return; 870 return;
870 } 871 }
871 if (m_PathStartX != m_PathCurrentX || m_PathStartY != m_PathCurrentY) { 872 if (m_PathStartX != m_PathCurrentX || m_PathStartY != m_PathCurrentY) {
872 AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE); 873 AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE);
873 } else if (m_pPathPoints[m_PathPointCount - 1].m_Flag != FXPT_MOVETO) { 874 } else if (m_pPathPoints[m_PathPointCount - 1].m_Flag != FXPT_MOVETO) {
874 m_pPathPoints[m_PathPointCount - 1].m_Flag |= FXPT_CLOSEFIGURE; 875 m_pPathPoints[m_PathPointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
875 } 876 }
876 } 877 }
877 878
878 void CPDF_StreamContentParser::Handle_SetFlat() { 879 void CPDF_StreamContentParser::Handle_SetFlat() {
879 m_pCurStates->m_GeneralState.GetPrivateCopy()->m_Flatness = GetNumber(0); 880 m_pCurStates->m_GeneralState.MakePrivateCopy();
881 m_pCurStates->m_GeneralState->m_Flatness = GetNumber(0);
880 } 882 }
881 883
882 void CPDF_StreamContentParser::Handle_BeginImageData() {} 884 void CPDF_StreamContentParser::Handle_BeginImageData() {}
883 885
884 void CPDF_StreamContentParser::Handle_SetLineJoin() { 886 void CPDF_StreamContentParser::Handle_SetLineJoin() {
885 m_pCurStates->m_GraphState.GetPrivateCopy()->m_LineJoin = 887 m_pCurStates->m_GraphState.MakePrivateCopy();
886 (CFX_GraphStateData::LineJoin)GetInteger(0); 888 m_pCurStates->m_GraphState->m_LineJoin =
889 static_cast<CFX_GraphStateData::LineJoin>(GetInteger(0));
887 } 890 }
888 891
889 void CPDF_StreamContentParser::Handle_SetLineCap() { 892 void CPDF_StreamContentParser::Handle_SetLineCap() {
890 m_pCurStates->m_GraphState.GetPrivateCopy()->m_LineCap = 893 m_pCurStates->m_GraphState.MakePrivateCopy();
891 (CFX_GraphStateData::LineCap)GetInteger(0); 894 m_pCurStates->m_GraphState->m_LineCap =
895 static_cast<CFX_GraphStateData::LineCap>(GetInteger(0));
892 } 896 }
893 897
894 void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() { 898 void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() {
895 if (m_ParamCount != 4) 899 if (m_ParamCount != 4)
896 return; 900 return;
897 901
898 FX_FLOAT values[4]; 902 FX_FLOAT values[4];
899 for (int i = 0; i < 4; i++) { 903 for (int i = 0; i < 4; i++) {
900 values[i] = GetNumber(3 - i); 904 values[i] = GetNumber(3 - i);
901 } 905 }
(...skipping 22 matching lines...) Expand all
924 928
925 void CPDF_StreamContentParser::Handle_MoveTo() { 929 void CPDF_StreamContentParser::Handle_MoveTo() {
926 if (m_ParamCount != 2) 930 if (m_ParamCount != 2)
927 return; 931 return;
928 932
929 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO); 933 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO);
930 ParsePathObject(); 934 ParsePathObject();
931 } 935 }
932 936
933 void CPDF_StreamContentParser::Handle_SetMiterLimit() { 937 void CPDF_StreamContentParser::Handle_SetMiterLimit() {
934 m_pCurStates->m_GraphState.GetPrivateCopy()->m_MiterLimit = GetNumber(0); 938 m_pCurStates->m_GraphState.MakePrivateCopy();
939 m_pCurStates->m_GraphState->m_MiterLimit = GetNumber(0);
935 } 940 }
936 941
937 void CPDF_StreamContentParser::Handle_MarkPlace() {} 942 void CPDF_StreamContentParser::Handle_MarkPlace() {}
938 943
939 void CPDF_StreamContentParser::Handle_EndPath() { 944 void CPDF_StreamContentParser::Handle_EndPath() {
940 AddPathObject(0, FALSE); 945 AddPathObject(0, FALSE);
941 } 946 }
942 947
943 void CPDF_StreamContentParser::Handle_SaveGraphState() { 948 void CPDF_StreamContentParser::Handle_SaveGraphState() {
944 std::unique_ptr<CPDF_AllStates> pStates(new CPDF_AllStates); 949 std::unique_ptr<CPDF_AllStates> pStates(new CPDF_AllStates);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 if (pShading->IsMeshShading()) 1112 if (pShading->IsMeshShading())
1108 bbox.Intersect(GetShadingBBox(pShading, pObj->m_Matrix)); 1113 bbox.Intersect(GetShadingBBox(pShading, pObj->m_Matrix));
1109 pObj->m_Left = bbox.left; 1114 pObj->m_Left = bbox.left;
1110 pObj->m_Right = bbox.right; 1115 pObj->m_Right = bbox.right;
1111 pObj->m_Top = bbox.top; 1116 pObj->m_Top = bbox.top;
1112 pObj->m_Bottom = bbox.bottom; 1117 pObj->m_Bottom = bbox.bottom;
1113 m_pObjectHolder->GetPageObjectList()->push_back(std::move(pObj)); 1118 m_pObjectHolder->GetPageObjectList()->push_back(std::move(pObj));
1114 } 1119 }
1115 1120
1116 void CPDF_StreamContentParser::Handle_SetCharSpace() { 1121 void CPDF_StreamContentParser::Handle_SetCharSpace() {
1117 m_pCurStates->m_TextState.GetPrivateCopy()->m_CharSpace = GetNumber(0); 1122 m_pCurStates->m_TextState.MakePrivateCopy();
1123 m_pCurStates->m_TextState->m_CharSpace = GetNumber(0);
1118 } 1124 }
1119 1125
1120 void CPDF_StreamContentParser::Handle_MoveTextPoint() { 1126 void CPDF_StreamContentParser::Handle_MoveTextPoint() {
1121 m_pCurStates->m_TextLineX += GetNumber(1); 1127 m_pCurStates->m_TextLineX += GetNumber(1);
1122 m_pCurStates->m_TextLineY += GetNumber(0); 1128 m_pCurStates->m_TextLineY += GetNumber(0);
1123 m_pCurStates->m_TextX = m_pCurStates->m_TextLineX; 1129 m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
1124 m_pCurStates->m_TextY = m_pCurStates->m_TextLineY; 1130 m_pCurStates->m_TextY = m_pCurStates->m_TextLineY;
1125 } 1131 }
1126 1132
1127 void CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading() { 1133 void CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading() {
1128 Handle_MoveTextPoint(); 1134 Handle_MoveTextPoint();
1129 m_pCurStates->m_TextLeading = -GetNumber(0); 1135 m_pCurStates->m_TextLeading = -GetNumber(0);
1130 } 1136 }
1131 1137
1132 void CPDF_StreamContentParser::Handle_SetFont() { 1138 void CPDF_StreamContentParser::Handle_SetFont() {
1133 FX_FLOAT fs = GetNumber(0); 1139 FX_FLOAT fs = GetNumber(0);
1134 if (fs == 0) { 1140 if (fs == 0)
1135 fs = m_DefFontSize; 1141 fs = m_DefFontSize;
1136 } 1142
1137 m_pCurStates->m_TextState.GetPrivateCopy()->m_FontSize = fs; 1143 m_pCurStates->m_TextState.MakePrivateCopy();
1144 m_pCurStates->m_TextState->m_FontSize = fs;
1138 CPDF_Font* pFont = FindFont(GetString(1)); 1145 CPDF_Font* pFont = FindFont(GetString(1));
1139 if (pFont) { 1146 if (pFont)
1140 m_pCurStates->m_TextState.SetFont(pFont); 1147 m_pCurStates->m_TextState.SetFont(pFont);
1141 }
1142 } 1148 }
1143 1149
1144 CPDF_Object* CPDF_StreamContentParser::FindResourceObj( 1150 CPDF_Object* CPDF_StreamContentParser::FindResourceObj(
1145 const CFX_ByteString& type, 1151 const CFX_ByteString& type,
1146 const CFX_ByteString& name) { 1152 const CFX_ByteString& name) {
1147 if (!m_pResources) 1153 if (!m_pResources)
1148 return nullptr; 1154 return nullptr;
1149 CPDF_Dictionary* pDict = m_pResources->GetDictBy(type); 1155 CPDF_Dictionary* pDict = m_pResources->GetDictBy(type);
1150 if (pDict) 1156 if (pDict)
1151 return pDict->GetDirectObjectBy(name); 1157 return pDict->GetDirectObjectBy(name);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 } else { 1242 } else {
1237 m_pCurStates->m_TextY -= 1243 m_pCurStates->m_TextY -=
1238 (fInitKerning * m_pCurStates->m_TextState.GetFontSize()) / 1000; 1244 (fInitKerning * m_pCurStates->m_TextState.GetFontSize()) / 1000;
1239 } 1245 }
1240 } 1246 }
1241 if (nsegs == 0) { 1247 if (nsegs == 0) {
1242 return; 1248 return;
1243 } 1249 }
1244 const TextRenderingMode text_mode = 1250 const TextRenderingMode text_mode =
1245 pFont->IsType3Font() ? TextRenderingMode::MODE_FILL 1251 pFont->IsType3Font() ? TextRenderingMode::MODE_FILL
1246 : m_pCurStates->m_TextState.GetObject()->m_TextMode; 1252 : m_pCurStates->m_TextState->m_TextMode;
1247 { 1253 {
1248 std::unique_ptr<CPDF_TextObject> pText(new CPDF_TextObject); 1254 std::unique_ptr<CPDF_TextObject> pText(new CPDF_TextObject);
1249 m_pLastTextObject = pText.get(); 1255 m_pLastTextObject = pText.get();
1250 SetGraphicStates(m_pLastTextObject, TRUE, TRUE, TRUE); 1256 SetGraphicStates(m_pLastTextObject, TRUE, TRUE, TRUE);
1251 if (TextRenderingModeIsStrokeMode(text_mode)) { 1257 if (TextRenderingModeIsStrokeMode(text_mode)) {
1252 FX_FLOAT* pCTM = pText->m_TextState.GetPrivateCopy()->m_CTM; 1258 pText->m_TextState.MakePrivateCopy();
1259 FX_FLOAT* pCTM = pText->m_TextState->m_CTM;
1253 pCTM[0] = m_pCurStates->m_CTM.a; 1260 pCTM[0] = m_pCurStates->m_CTM.a;
1254 pCTM[1] = m_pCurStates->m_CTM.c; 1261 pCTM[1] = m_pCurStates->m_CTM.c;
1255 pCTM[2] = m_pCurStates->m_CTM.b; 1262 pCTM[2] = m_pCurStates->m_CTM.b;
1256 pCTM[3] = m_pCurStates->m_CTM.d; 1263 pCTM[3] = m_pCurStates->m_CTM.d;
1257 } 1264 }
1258 pText->SetSegments(pStrs, pKerning, nsegs); 1265 pText->SetSegments(pStrs, pKerning, nsegs);
1259 pText->m_PosX = m_pCurStates->m_TextX; 1266 pText->m_PosX = m_pCurStates->m_TextX;
1260 pText->m_PosY = m_pCurStates->m_TextY + m_pCurStates->m_TextRise; 1267 pText->m_PosY = m_pCurStates->m_TextY + m_pCurStates->m_TextRise;
1261 ConvertTextSpace(pText->m_PosX, pText->m_PosY); 1268 ConvertTextSpace(pText->m_PosX, pText->m_PosY);
1262 FX_FLOAT x_advance; 1269 FX_FLOAT x_advance;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 m_pCurStates->m_TextLineX = 0; 1358 m_pCurStates->m_TextLineX = 0;
1352 m_pCurStates->m_TextLineY = 0; 1359 m_pCurStates->m_TextLineY = 0;
1353 } 1360 }
1354 1361
1355 void CPDF_StreamContentParser::OnChangeTextMatrix() { 1362 void CPDF_StreamContentParser::OnChangeTextMatrix() {
1356 CFX_Matrix text_matrix(m_pCurStates->m_TextHorzScale, 0.0f, 0.0f, 1.0f, 0.0f, 1363 CFX_Matrix text_matrix(m_pCurStates->m_TextHorzScale, 0.0f, 0.0f, 1.0f, 0.0f,
1357 0.0f); 1364 0.0f);
1358 text_matrix.Concat(m_pCurStates->m_TextMatrix); 1365 text_matrix.Concat(m_pCurStates->m_TextMatrix);
1359 text_matrix.Concat(m_pCurStates->m_CTM); 1366 text_matrix.Concat(m_pCurStates->m_CTM);
1360 text_matrix.Concat(m_mtContentToUser); 1367 text_matrix.Concat(m_mtContentToUser);
1361 FX_FLOAT* pTextMatrix = m_pCurStates->m_TextState.GetPrivateCopy()->m_Matrix; 1368 m_pCurStates->m_TextState.MakePrivateCopy();
1369 FX_FLOAT* pTextMatrix = m_pCurStates->m_TextState->m_Matrix;
1362 pTextMatrix[0] = text_matrix.a; 1370 pTextMatrix[0] = text_matrix.a;
1363 pTextMatrix[1] = text_matrix.c; 1371 pTextMatrix[1] = text_matrix.c;
1364 pTextMatrix[2] = text_matrix.b; 1372 pTextMatrix[2] = text_matrix.b;
1365 pTextMatrix[3] = text_matrix.d; 1373 pTextMatrix[3] = text_matrix.d;
1366 } 1374 }
1367 1375
1368 void CPDF_StreamContentParser::Handle_SetTextRenderMode() { 1376 void CPDF_StreamContentParser::Handle_SetTextRenderMode() {
1369 int mode = GetInteger(0); 1377 m_pCurStates->m_TextState.MakePrivateCopy();
1370 SetTextRenderingModeFromInt( 1378 SetTextRenderingModeFromInt(GetInteger(0),
1371 mode, &m_pCurStates->m_TextState.GetPrivateCopy()->m_TextMode); 1379 &m_pCurStates->m_TextState->m_TextMode);
1372 } 1380 }
1373 1381
1374 void CPDF_StreamContentParser::Handle_SetTextRise() { 1382 void CPDF_StreamContentParser::Handle_SetTextRise() {
1375 m_pCurStates->m_TextRise = GetNumber(0); 1383 m_pCurStates->m_TextRise = GetNumber(0);
1376 } 1384 }
1377 1385
1378 void CPDF_StreamContentParser::Handle_SetWordSpace() { 1386 void CPDF_StreamContentParser::Handle_SetWordSpace() {
1379 m_pCurStates->m_TextState.GetPrivateCopy()->m_WordSpace = GetNumber(0); 1387 m_pCurStates->m_TextState.MakePrivateCopy();
1388 m_pCurStates->m_TextState->m_WordSpace = GetNumber(0);
1380 } 1389 }
1381 1390
1382 void CPDF_StreamContentParser::Handle_SetHorzScale() { 1391 void CPDF_StreamContentParser::Handle_SetHorzScale() {
1383 if (m_ParamCount != 1) { 1392 if (m_ParamCount != 1)
1384 return; 1393 return;
1385 } 1394
1386 m_pCurStates->m_TextHorzScale = GetNumber(0) / 100; 1395 m_pCurStates->m_TextHorzScale = GetNumber(0) / 100;
1387 OnChangeTextMatrix(); 1396 OnChangeTextMatrix();
1388 } 1397 }
1389 1398
1390 void CPDF_StreamContentParser::Handle_MoveToNextLine() { 1399 void CPDF_StreamContentParser::Handle_MoveToNextLine() {
1391 m_pCurStates->m_TextLineY -= m_pCurStates->m_TextLeading; 1400 m_pCurStates->m_TextLineY -= m_pCurStates->m_TextLeading;
1392 m_pCurStates->m_TextX = m_pCurStates->m_TextLineX; 1401 m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
1393 m_pCurStates->m_TextY = m_pCurStates->m_TextLineY; 1402 m_pCurStates->m_TextY = m_pCurStates->m_TextLineY;
1394 } 1403 }
1395 1404
1396 void CPDF_StreamContentParser::Handle_CurveTo_23() { 1405 void CPDF_StreamContentParser::Handle_CurveTo_23() {
1397 AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO); 1406 AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO);
1398 AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO); 1407 AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
1399 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 1408 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
1400 } 1409 }
1401 1410
1402 void CPDF_StreamContentParser::Handle_SetLineWidth() { 1411 void CPDF_StreamContentParser::Handle_SetLineWidth() {
1403 FX_FLOAT width = GetNumber(0); 1412 m_pCurStates->m_GraphState.MakePrivateCopy();
1404 m_pCurStates->m_GraphState.GetPrivateCopy()->m_LineWidth = width; 1413 m_pCurStates->m_GraphState->m_LineWidth = GetNumber(0);
1405 } 1414 }
1406 1415
1407 void CPDF_StreamContentParser::Handle_Clip() { 1416 void CPDF_StreamContentParser::Handle_Clip() {
1408 m_PathClipType = FXFILL_WINDING; 1417 m_PathClipType = FXFILL_WINDING;
1409 } 1418 }
1410 1419
1411 void CPDF_StreamContentParser::Handle_EOClip() { 1420 void CPDF_StreamContentParser::Handle_EOClip() {
1412 m_PathClipType = FXFILL_ALTERNATE; 1421 m_PathClipType = FXFILL_ALTERNATE;
1413 } 1422 }
1414 1423
1415 void CPDF_StreamContentParser::Handle_CurveTo_13() { 1424 void CPDF_StreamContentParser::Handle_CurveTo_13() {
1416 AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO); 1425 AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
1417 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 1426 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
1418 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 1427 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
1419 } 1428 }
1420 1429
1421 void CPDF_StreamContentParser::Handle_NextLineShowText() { 1430 void CPDF_StreamContentParser::Handle_NextLineShowText() {
1422 Handle_MoveToNextLine(); 1431 Handle_MoveToNextLine();
1423 Handle_ShowText(); 1432 Handle_ShowText();
1424 } 1433 }
1425 1434
1426 void CPDF_StreamContentParser::Handle_NextLineShowText_Space() { 1435 void CPDF_StreamContentParser::Handle_NextLineShowText_Space() {
1427 m_pCurStates->m_TextState.GetPrivateCopy()->m_WordSpace = GetNumber(2); 1436 m_pCurStates->m_TextState.MakePrivateCopy();
1428 m_pCurStates->m_TextState.GetPrivateCopy()->m_CharSpace = GetNumber(1); 1437 m_pCurStates->m_TextState->m_WordSpace = GetNumber(2);
1438 m_pCurStates->m_TextState->m_CharSpace = GetNumber(1);
1429 Handle_NextLineShowText(); 1439 Handle_NextLineShowText();
1430 } 1440 }
1431 1441
1432 void CPDF_StreamContentParser::Handle_Invalid() {} 1442 void CPDF_StreamContentParser::Handle_Invalid() {}
1433 1443
1434 void CPDF_StreamContentParser::AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag) { 1444 void CPDF_StreamContentParser::AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag) {
1435 m_PathCurrentX = x; 1445 m_PathCurrentX = x;
1436 m_PathCurrentY = y; 1446 m_PathCurrentY = y;
1437 if (flag == FXPT_MOVETO) { 1447 if (flag == FXPT_MOVETO) {
1438 m_PathStartX = x; 1448 m_PathStartX = x;
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 } else { 1695 } else {
1686 PDF_ReplaceAbbr(pElement); 1696 PDF_ReplaceAbbr(pElement);
1687 } 1697 }
1688 } 1698 }
1689 break; 1699 break;
1690 } 1700 }
1691 default: 1701 default:
1692 break; 1702 break;
1693 } 1703 }
1694 } 1704 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_page/cpdf_textstate.cpp ('k') | core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698