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