| 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 |