| 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 "../../../include/fpdfapi/fpdf_page.h" | 7 #include "../../../include/fpdfapi/fpdf_page.h" |
| 8 #include "pageint.h" | 8 #include "pageint.h" |
| 9 | 9 |
| 10 CPDF_Pattern::CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix) | 10 CPDF_Pattern::CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix) |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 if (pShadingDict == NULL) { | 111 if (pShadingDict == NULL) { |
| 112 return FALSE; | 112 return FALSE; |
| 113 } | 113 } |
| 114 if (m_nFuncs) { | 114 if (m_nFuncs) { |
| 115 for (int i = 0; i < m_nFuncs; i++) | 115 for (int i = 0; i < m_nFuncs; i++) |
| 116 delete m_pFunctions[i]; | 116 delete m_pFunctions[i]; |
| 117 m_nFuncs = 0; | 117 m_nFuncs = 0; |
| 118 } | 118 } |
| 119 CPDF_Object* pFunc = pShadingDict->GetElementValue(FX_BSTRC("Function")); | 119 CPDF_Object* pFunc = pShadingDict->GetElementValue(FX_BSTRC("Function")); |
| 120 if (pFunc) { | 120 if (pFunc) { |
| 121 if (pFunc->GetType() == PDFOBJ_ARRAY) { | 121 if (CPDF_Array* pArray = pFunc->AsArray()) { |
| 122 m_nFuncs = ((CPDF_Array*)pFunc)->GetCount(); | 122 m_nFuncs = std::min<int>(pArray->GetCount(), 4); |
| 123 if (m_nFuncs > 4) { | 123 |
| 124 m_nFuncs = 4; | |
| 125 } | |
| 126 for (int i = 0; i < m_nFuncs; i++) { | 124 for (int i = 0; i < m_nFuncs; i++) { |
| 127 m_pFunctions[i] = | 125 m_pFunctions[i] = CPDF_Function::Load(pArray->GetElementValue(i)); |
| 128 CPDF_Function::Load(((CPDF_Array*)pFunc)->GetElementValue(i)); | |
| 129 } | 126 } |
| 130 } else { | 127 } else { |
| 131 m_pFunctions[0] = CPDF_Function::Load(pFunc); | 128 m_pFunctions[0] = CPDF_Function::Load(pFunc); |
| 132 m_nFuncs = 1; | 129 m_nFuncs = 1; |
| 133 } | 130 } |
| 134 } | 131 } |
| 135 CPDF_Object* pCSObj = pShadingDict->GetElementValue(FX_BSTRC("ColorSpace")); | 132 CPDF_Object* pCSObj = pShadingDict->GetElementValue(FX_BSTRC("ColorSpace")); |
| 136 if (pCSObj == NULL) { | 133 if (pCSObj == NULL) { |
| 137 return FALSE; | 134 return FALSE; |
| 138 } | 135 } |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 } | 288 } |
| 292 stream.m_BitStream.SkipBits(stream.m_nComps * stream.m_nCompBits * | 289 stream.m_BitStream.SkipBits(stream.m_nComps * stream.m_nCompBits * |
| 293 color_count); | 290 color_count); |
| 294 if (bGouraud) { | 291 if (bGouraud) { |
| 295 stream.m_BitStream.ByteAlign(); | 292 stream.m_BitStream.ByteAlign(); |
| 296 } | 293 } |
| 297 } | 294 } |
| 298 rect.Transform(pMatrix); | 295 rect.Transform(pMatrix); |
| 299 return rect; | 296 return rect; |
| 300 } | 297 } |
| OLD | NEW |