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