OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |