diff options
Diffstat (limited to 'core/fpdfapi/fpdf_page/fpdf_page_parser.cpp')
-rw-r--r-- | core/fpdfapi/fpdf_page/fpdf_page_parser.cpp | 87 |
1 files changed, 40 insertions, 47 deletions
diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp index 5dc8480423..5d5b75b60e 100644 --- a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp +++ b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp @@ -6,7 +6,6 @@ #include "core/fpdfapi/fpdf_page/pageint.h" -#include <algorithm> #include <memory> #include <utility> #include <vector> @@ -693,7 +692,7 @@ void CPDF_StreamContentParser::Handle_SetColorSpace_Fill() { return; m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->GetFillColor()->SetColorSpace(pCS); + m_pCurStates->m_ColorState->m_FillColor.SetColorSpace(pCS); } void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() { @@ -702,7 +701,7 @@ void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() { return; m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->GetStrokeColor()->SetColorSpace(pCS); + m_pCurStates->m_ColorState->m_StrokeColor.SetColorSpace(pCS); } void CPDF_StreamContentParser::Handle_SetDash() { @@ -846,16 +845,14 @@ void CPDF_StreamContentParser::Handle_EOFillPath() { void CPDF_StreamContentParser::Handle_SetGray_Fill() { FX_FLOAT value = GetNumber(0); - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetFillColor( - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY), &value, 1); + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY); + m_pCurStates->m_ColorState.SetFillColor(pCS, &value, 1); } void CPDF_StreamContentParser::Handle_SetGray_Stroke() { FX_FLOAT value = GetNumber(0); - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetStrokeColor( - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY), &value, 1); + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY); + m_pCurStates->m_ColorState.SetStrokeColor(pCS, &value, 1); } void CPDF_StreamContentParser::Handle_SetExtendGraphState() { @@ -903,12 +900,11 @@ void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() { return; FX_FLOAT values[4]; - for (int i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { values[i] = GetNumber(3 - i); - - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetFillColor( - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK), values, 4); + } + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); + m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4); } void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() { @@ -916,12 +912,11 @@ void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() { return; FX_FLOAT values[4]; - for (int i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { values[i] = GetNumber(3 - i); - - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetStrokeColor( - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK), values, 4); + } + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); + m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4); } void CPDF_StreamContentParser::Handle_LineTo() { @@ -986,12 +981,11 @@ void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() { return; FX_FLOAT values[3]; - for (int i = 0; i < 3; i++) + for (int i = 0; i < 3; i++) { values[i] = GetNumber(2 - i); - - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetFillColor( - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), values, 3); + } + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); + m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3); } void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() { @@ -999,12 +993,11 @@ void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() { return; FX_FLOAT values[3]; - for (int i = 0; i < 3; i++) + for (int i = 0; i < 3; i++) { values[i] = GetNumber(2 - i); - - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetStrokeColor( - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), values, 3); + } + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); + m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3); } void CPDF_StreamContentParser::Handle_SetRenderIntent() {} @@ -1020,22 +1013,26 @@ void CPDF_StreamContentParser::Handle_StrokePath() { void CPDF_StreamContentParser::Handle_SetColor_Fill() { FX_FLOAT values[4]; - uint32_t nargs = std::min(m_ParamCount, 4u); - for (uint32_t i = 0; i < nargs; i++) + int nargs = m_ParamCount; + if (nargs > 4) { + nargs = 4; + } + for (int i = 0; i < nargs; i++) { values[i] = GetNumber(nargs - i - 1); - - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetFillColor(nullptr, values, nargs); + } + m_pCurStates->m_ColorState.SetFillColor(nullptr, values, nargs); } void CPDF_StreamContentParser::Handle_SetColor_Stroke() { FX_FLOAT values[4]; - uint32_t nargs = std::min(m_ParamCount, 4u); - for (uint32_t i = 0; i < nargs; i++) + int nargs = m_ParamCount; + if (nargs > 4) { + nargs = 4; + } + for (int i = 0; i < nargs; i++) { values[i] = GetNumber(nargs - i - 1); - - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetStrokeColor(nullptr, values, nargs); + } + m_pCurStates->m_ColorState.SetStrokeColor(nullptr, values, nargs); } void CPDF_StreamContentParser::Handle_SetColorPS_Fill() { @@ -1057,12 +1054,10 @@ void CPDF_StreamContentParser::Handle_SetColorPS_Fill() { if (nvalues != nargs) { CPDF_Pattern* pPattern = FindPattern(GetString(0), false); if (pPattern) { - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetFillPattern(pPattern, values, nvalues); + m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues); } } else { - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetFillColor(nullptr, values, nvalues); + m_pCurStates->m_ColorState.SetFillColor(nullptr, values, nvalues); } FX_Free(values); } @@ -1087,12 +1082,10 @@ void CPDF_StreamContentParser::Handle_SetColorPS_Stroke() { if (nvalues != nargs) { CPDF_Pattern* pPattern = FindPattern(GetString(0), false); if (pPattern) { - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetStrokePattern(pPattern, values, nvalues); + m_pCurStates->m_ColorState.SetStrokePattern(pPattern, values, nvalues); } } else { - m_pCurStates->m_ColorState.MakePrivateCopy(); - m_pCurStates->m_ColorState->SetStrokeColor(nullptr, values, nvalues); + m_pCurStates->m_ColorState.SetStrokeColor(nullptr, values, nvalues); } FX_Free(values); } |