Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(582)

Side by Side Diff: core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp

Issue 656753002: Store the address of the page data map's value for proper referencing. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: typedef Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 } 76 }
77 } else { 77 } else {
78 m_pShadingObj = pPatternObj; 78 m_pShadingObj = pPatternObj;
79 } 79 }
80 m_ShadingType = 0; 80 m_ShadingType = 0;
81 m_pCS = NULL; 81 m_pCS = NULL;
82 m_nFuncs = 0; 82 m_nFuncs = 0;
83 for (int i = 0; i < 4; i ++) { 83 for (int i = 0; i < 4; i ++) {
84 m_pFunctions[i] = NULL; 84 m_pFunctions[i] = NULL;
85 } 85 }
86 m_pCountedCS = NULL;
86 } 87 }
87 CPDF_ShadingPattern::~CPDF_ShadingPattern() 88 CPDF_ShadingPattern::~CPDF_ShadingPattern()
88 { 89 {
89 Clear(); 90 Clear();
90 } 91 }
91 void CPDF_ShadingPattern::Clear() 92 void CPDF_ShadingPattern::Clear()
92 { 93 {
93 for (int i = 0; i < m_nFuncs; i ++) { 94 for (int i = 0; i < m_nFuncs; i ++) {
94 if (m_pFunctions[i]) { 95 if (m_pFunctions[i]) {
95 delete m_pFunctions[i]; 96 delete m_pFunctions[i];
96 } 97 }
97 m_pFunctions[i] = NULL; 98 m_pFunctions[i] = NULL;
98 } 99 }
99 CPDF_ColorSpace* pCS = m_pCS; 100 CPDF_ColorSpace* pCS = m_pCountedCS ? m_pCountedCS->m_Obj : NULL;
100 if (!m_bForceClear && pCS && m_pDocument) { 101 if (pCS && m_pDocument) {
101 m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray()); 102 m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
102 } 103 }
103 m_ShadingType = 0; 104 m_ShadingType = 0;
104 m_pCS = NULL; 105 m_pCS = NULL;
106 m_pCountedCS = NULL;
105 m_nFuncs = 0; 107 m_nFuncs = 0;
106 } 108 }
107 FX_BOOL CPDF_ShadingPattern::Load() 109 FX_BOOL CPDF_ShadingPattern::Load()
108 { 110 {
109 if (m_ShadingType != 0) { 111 if (m_ShadingType != 0) {
110 return TRUE; 112 return TRUE;
111 } 113 }
112 CPDF_Dictionary* pShadingDict = m_pShadingObj ? m_pShadingObj->GetDict() : N ULL; 114 CPDF_Dictionary* pShadingDict = m_pShadingObj ? m_pShadingObj->GetDict() : N ULL;
113 if (pShadingDict == NULL) { 115 if (pShadingDict == NULL) {
114 return FALSE; 116 return FALSE;
(...skipping 19 matching lines...) Expand all
134 m_pFunctions[0] = CPDF_Function::Load(pFunc); 136 m_pFunctions[0] = CPDF_Function::Load(pFunc);
135 m_nFuncs = 1; 137 m_nFuncs = 1;
136 } 138 }
137 } 139 }
138 CPDF_Object* pCSObj = pShadingDict->GetElementValue(FX_BSTRC("ColorSpace")); 140 CPDF_Object* pCSObj = pShadingDict->GetElementValue(FX_BSTRC("ColorSpace"));
139 if (pCSObj == NULL) { 141 if (pCSObj == NULL) {
140 return FALSE; 142 return FALSE;
141 } 143 }
142 CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData(); 144 CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData();
143 m_pCS = pDocPageData->GetColorSpace(pCSObj, NULL); 145 m_pCS = pDocPageData->GetColorSpace(pCSObj, NULL);
146 if (m_pCS) {
147 m_pCountedCS = pDocPageData->FindColorSpacePtr(m_pCS->GetArray());
148 }
144 m_ShadingType = pShadingDict->GetInteger(FX_BSTRC("ShadingType")); 149 m_ShadingType = pShadingDict->GetInteger(FX_BSTRC("ShadingType"));
145 return TRUE; 150 return TRUE;
146 } 151 }
147 FX_BOOL CPDF_ShadingPattern::Reload() 152 FX_BOOL CPDF_ShadingPattern::Reload()
148 { 153 {
149 Clear(); 154 Clear();
150 return Load(); 155 return Load();
151 } 156 }
152 FX_BOOL CPDF_MeshStream::Load(CPDF_Stream* pShadingStream, CPDF_Function** pFunc s, int nFuncs, CPDF_ColorSpace* pCS) 157 FX_BOOL CPDF_MeshStream::Load(CPDF_Stream* pShadingStream, CPDF_Function** pFunc s, int nFuncs, CPDF_ColorSpace* pCS)
153 { 158 {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 } 286 }
282 } 287 }
283 stream.m_BitStream.SkipBits(stream.m_nComps * stream.m_nCompBits * color _count); 288 stream.m_BitStream.SkipBits(stream.m_nComps * stream.m_nCompBits * color _count);
284 if (bGouraud) { 289 if (bGouraud) {
285 stream.m_BitStream.ByteAlign(); 290 stream.m_BitStream.ByteAlign();
286 } 291 }
287 } 292 }
288 rect.Transform(pMatrix); 293 rect.Transform(pMatrix);
289 return rect; 294 return rect;
290 } 295 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698