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

Side by Side Diff: core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 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_render.h" 7 #include "../../../include/fpdfapi/fpdf_render.h"
8 #include "../../../include/fpdfapi/fpdf_pageobj.h" 8 #include "../../../include/fpdfapi/fpdf_pageobj.h"
9 #include "../../../include/fxge/fx_ge.h" 9 #include "../../../include/fxge/fx_ge.h"
10 #include "../fpdf_page/pageint.h" 10 #include "../fpdf_page/pageint.h"
11 #include "render_int.h" 11 #include "render_int.h"
12 struct CACHEINFO { 12 struct CACHEINFO {
13 FX_DWORD time; 13 FX_DWORD time;
14 CPDF_Stream* pStream; 14 CPDF_Stream* pStream;
15 }; 15 };
16 extern "C" { 16 extern "C" {
17 static int compare(const void* data1, const void* data2) 17 static int compare(const void* data1, const void* data2) {
18 { 18 return ((CACHEINFO*)data1)->time - ((CACHEINFO*)data2)->time;
19 return ((CACHEINFO*)data1)->time - ((CACHEINFO*)data2)->time; 19 }
20 };
21 void CPDF_Page::ClearRenderCache() {
22 if (m_pPageRender) {
23 m_pPageRender->ClearAll();
24 }
25 }
26 void CPDF_PageRenderCache::ClearAll() {
27 FX_POSITION pos = m_ImageCaches.GetStartPosition();
28 while (pos) {
29 void* key;
30 void* value;
31 m_ImageCaches.GetNextAssoc(pos, key, value);
32 delete (CPDF_ImageCache*)value;
33 }
34 m_ImageCaches.RemoveAll();
35 m_nCacheSize = 0;
36 m_nTimeCount = 0;
37 }
38 void CPDF_PageRenderCache::CacheOptimization(int32_t dwLimitCacheSize) {
39 if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) {
40 return;
41 }
42 int nCount = m_ImageCaches.GetCount();
43 CACHEINFO* pCACHEINFO =
44 (CACHEINFO*)FX_Alloc2D(uint8_t, sizeof(CACHEINFO), nCount);
45 FX_POSITION pos = m_ImageCaches.GetStartPosition();
46 int i = 0;
47 while (pos) {
48 void* key;
49 void* value;
50 m_ImageCaches.GetNextAssoc(pos, key, value);
51 pCACHEINFO[i].time = ((CPDF_ImageCache*)value)->GetTimeCount();
52 pCACHEINFO[i++].pStream = ((CPDF_ImageCache*)value)->GetStream();
53 }
54 FXSYS_qsort(pCACHEINFO, nCount, sizeof(CACHEINFO), compare);
55 FX_DWORD nTimeCount = m_nTimeCount;
56 if (nTimeCount + 1 < nTimeCount) {
57 for (i = 0; i < nCount; i++) {
58 ((CPDF_ImageCache*)(m_ImageCaches[pCACHEINFO[i].pStream]))
59 ->m_dwTimeCount = i;
20 } 60 }
21 }; 61 m_nTimeCount = nCount;
22 void CPDF_Page::ClearRenderCache() 62 }
23 { 63 i = 0;
24 if (m_pPageRender) { 64 while (nCount > 15) {
25 m_pPageRender->ClearAll(); 65 ClearImageCache(pCACHEINFO[i++].pStream);
66 nCount--;
67 }
68 while (m_nCacheSize > (FX_DWORD)dwLimitCacheSize) {
69 ClearImageCache(pCACHEINFO[i++].pStream);
70 }
71 FX_Free(pCACHEINFO);
72 }
73 void CPDF_PageRenderCache::ClearImageCache(CPDF_Stream* pStream) {
74 void* value = m_ImageCaches.GetValueAt(pStream);
75 if (value == NULL) {
76 m_ImageCaches.RemoveKey(pStream);
77 return;
78 }
79 m_nCacheSize -= ((CPDF_ImageCache*)value)->EstimateSize();
80 delete (CPDF_ImageCache*)value;
81 m_ImageCaches.RemoveKey(pStream);
82 }
83 FX_DWORD CPDF_PageRenderCache::EstimateSize() {
84 FX_DWORD dwSize = 0;
85 FX_POSITION pos = m_ImageCaches.GetStartPosition();
86 while (pos) {
87 void* key;
88 void* value;
89 m_ImageCaches.GetNextAssoc(pos, key, value);
90 dwSize += ((CPDF_ImageCache*)value)->EstimateSize();
91 }
92 m_nCacheSize = dwSize;
93 return dwSize;
94 }
95 FX_DWORD CPDF_PageRenderCache::GetCachedSize(CPDF_Stream* pStream) const {
96 if (pStream == NULL) {
97 return m_nCacheSize;
98 }
99 CPDF_ImageCache* pImageCache;
100 if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
101 return 0;
102 }
103 return pImageCache->EstimateSize();
104 }
105 void CPDF_PageRenderCache::GetCachedBitmap(CPDF_Stream* pStream,
106 CFX_DIBSource*& pBitmap,
107 CFX_DIBSource*& pMask,
108 FX_DWORD& MatteColor,
109 FX_BOOL bStdCS,
110 FX_DWORD GroupFamily,
111 FX_BOOL bLoadMask,
112 CPDF_RenderStatus* pRenderStatus,
113 int32_t downsampleWidth,
114 int32_t downsampleHeight) {
115 CPDF_ImageCache* pImageCache;
116 FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (void*&)pImageCache);
117 if (!bFind) {
118 pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
119 }
120 m_nTimeCount++;
121 FX_BOOL bCached = pImageCache->GetCachedBitmap(
122 pBitmap, pMask, MatteColor, m_pPage->m_pPageResources, bStdCS,
123 GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight);
124 if (!bFind) {
125 m_ImageCaches.SetAt(pStream, pImageCache);
126 }
127 if (!bCached) {
128 m_nCacheSize += pImageCache->EstimateSize();
129 }
130 }
131 FX_BOOL CPDF_PageRenderCache::StartGetCachedBitmap(
132 CPDF_Stream* pStream,
133 FX_BOOL bStdCS,
134 FX_DWORD GroupFamily,
135 FX_BOOL bLoadMask,
136 CPDF_RenderStatus* pRenderStatus,
137 int32_t downsampleWidth,
138 int32_t downsampleHeight) {
139 m_bCurFindCache = m_ImageCaches.Lookup(pStream, (void*&)m_pCurImageCache);
140 if (!m_bCurFindCache) {
141 m_pCurImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
142 }
143 int ret = m_pCurImageCache->StartGetCachedBitmap(
144 pRenderStatus->m_pFormResource, m_pPage->m_pPageResources, bStdCS,
145 GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight);
146 if (ret == 2) {
147 return TRUE;
148 }
149 m_nTimeCount++;
150 if (!m_bCurFindCache) {
151 m_ImageCaches.SetAt(pStream, m_pCurImageCache);
152 }
153 if (!ret) {
154 m_nCacheSize += m_pCurImageCache->EstimateSize();
155 }
156 return FALSE;
157 }
158 FX_BOOL CPDF_PageRenderCache::Continue(IFX_Pause* pPause) {
159 int ret = m_pCurImageCache->Continue(pPause);
160 if (ret == 2) {
161 return TRUE;
162 }
163 m_nTimeCount++;
164 if (!m_bCurFindCache) {
165 m_ImageCaches.SetAt(m_pCurImageCache->GetStream(), m_pCurImageCache);
166 }
167 if (!ret) {
168 m_nCacheSize += m_pCurImageCache->EstimateSize();
169 }
170 return FALSE;
171 }
172 void CPDF_PageRenderCache::ResetBitmap(CPDF_Stream* pStream,
173 const CFX_DIBitmap* pBitmap) {
174 CPDF_ImageCache* pImageCache;
175 if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
176 if (pBitmap == NULL) {
177 return;
26 } 178 }
27 } 179 pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
28 void CPDF_PageRenderCache::ClearAll() 180 m_ImageCaches.SetAt(pStream, pImageCache);
29 { 181 }
30 FX_POSITION pos = m_ImageCaches.GetStartPosition(); 182 int oldsize = pImageCache->EstimateSize();
31 while (pos) { 183 pImageCache->Reset(pBitmap);
32 void* key; 184 m_nCacheSize = pImageCache->EstimateSize() - oldsize;
33 void* value;
34 m_ImageCaches.GetNextAssoc(pos, key, value);
35 delete (CPDF_ImageCache*)value;
36 }
37 m_ImageCaches.RemoveAll();
38 m_nCacheSize = 0;
39 m_nTimeCount = 0;
40 }
41 void CPDF_PageRenderCache::CacheOptimization(int32_t dwLimitCacheSize)
42 {
43 if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) {
44 return;
45 }
46 int nCount = m_ImageCaches.GetCount();
47 CACHEINFO* pCACHEINFO = (CACHEINFO*)FX_Alloc2D(uint8_t, sizeof(CACHEINFO), n Count);
48 FX_POSITION pos = m_ImageCaches.GetStartPosition();
49 int i = 0;
50 while (pos) {
51 void* key;
52 void* value;
53 m_ImageCaches.GetNextAssoc(pos, key, value);
54 pCACHEINFO[i].time = ((CPDF_ImageCache*)value)->GetTimeCount();
55 pCACHEINFO[i++].pStream = ((CPDF_ImageCache*)value)->GetStream();
56 }
57 FXSYS_qsort(pCACHEINFO, nCount, sizeof (CACHEINFO), compare);
58 FX_DWORD nTimeCount = m_nTimeCount;
59 if (nTimeCount + 1 < nTimeCount) {
60 for (i = 0; i < nCount; i ++) {
61 ((CPDF_ImageCache*)(m_ImageCaches[pCACHEINFO[i].pStream]))->m_dwTime Count = i;
62 }
63 m_nTimeCount = nCount;
64 }
65 i = 0;
66 while(nCount > 15) {
67 ClearImageCache(pCACHEINFO[i++].pStream);
68 nCount--;
69 }
70 while (m_nCacheSize > (FX_DWORD)dwLimitCacheSize) {
71 ClearImageCache(pCACHEINFO[i++].pStream);
72 }
73 FX_Free(pCACHEINFO);
74 }
75 void CPDF_PageRenderCache::ClearImageCache(CPDF_Stream* pStream)
76 {
77 void* value = m_ImageCaches.GetValueAt(pStream);
78 if (value == NULL)» {
79 m_ImageCaches.RemoveKey(pStream);
80 return;
81 }
82 m_nCacheSize -= ((CPDF_ImageCache*)value)->EstimateSize();
83 delete (CPDF_ImageCache*)value;
84 m_ImageCaches.RemoveKey(pStream);
85 }
86 FX_DWORD CPDF_PageRenderCache::EstimateSize()
87 {
88 FX_DWORD dwSize = 0;
89 FX_POSITION pos = m_ImageCaches.GetStartPosition();
90 while (pos) {
91 void* key;
92 void* value;
93 m_ImageCaches.GetNextAssoc(pos, key, value);
94 dwSize += ((CPDF_ImageCache*)value)->EstimateSize();
95 }
96 m_nCacheSize = dwSize;
97 return dwSize;
98 }
99 FX_DWORD CPDF_PageRenderCache::GetCachedSize(CPDF_Stream* pStream) const
100 {
101 if (pStream == NULL) {
102 return m_nCacheSize;
103 }
104 CPDF_ImageCache* pImageCache;
105 if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
106 return 0;
107 }
108 return pImageCache->EstimateSize();
109 }
110 void CPDF_PageRenderCache::GetCachedBitmap(CPDF_Stream* pStream, CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor,
111 FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStat us* pRenderStatus,
112 int32_t downsampleWidth, int32_t downsampleHeight)
113 {
114 CPDF_ImageCache* pImageCache;
115 FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (void*&)pImageCache);
116 if (!bFind) {
117 pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
118 }
119 m_nTimeCount ++;
120 FX_BOOL bCached = pImageCache->GetCachedBitmap(pBitmap, pMask, MatteColor, m _pPage->m_pPageResources, bStdCS, GroupFamily, bLoadMask, pRenderStatus, downsam pleWidth, downsampleHeight);
121 if (!bFind) {
122 m_ImageCaches.SetAt(pStream, pImageCache);
123 }
124 if (!bCached) {
125 m_nCacheSize += pImageCache->EstimateSize();
126 }
127 }
128 FX_BOOL»CPDF_PageRenderCache::StartGetCachedBitmap(CPDF_Stream* pStream, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStat us, int32_t downsampleWidth, int32_t downsampleHeight)
129 {
130 m_bCurFindCache = m_ImageCaches.Lookup(pStream, (void*&)m_pCurImageCache);
131 if (!m_bCurFindCache) {
132 m_pCurImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
133 }
134 int ret = m_pCurImageCache->StartGetCachedBitmap(pRenderStatus->m_pFormResou rce, m_pPage->m_pPageResources, bStdCS, GroupFamily, bLoadMask, pRenderStatus, d ownsampleWidth, downsampleHeight);
135 if (ret == 2) {
136 return TRUE;
137 }
138 m_nTimeCount ++;
139 if (!m_bCurFindCache) {
140 m_ImageCaches.SetAt(pStream, m_pCurImageCache);
141 }
142 if (!ret) {
143 m_nCacheSize += m_pCurImageCache->EstimateSize();
144 }
145 return FALSE;
146 }
147 FX_BOOL»CPDF_PageRenderCache::Continue(IFX_Pause* pPause)
148 {
149 int ret = m_pCurImageCache->Continue(pPause);
150 if (ret == 2) {
151 return TRUE;
152 }
153 m_nTimeCount ++;
154 if (!m_bCurFindCache) {
155 m_ImageCaches.SetAt(m_pCurImageCache->GetStream(), m_pCurImageCache);
156 }
157 if (!ret) {
158 m_nCacheSize += m_pCurImageCache->EstimateSize();
159 }
160 return FALSE;
161 }
162 void CPDF_PageRenderCache::ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap)
163 {
164 CPDF_ImageCache* pImageCache;
165 if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
166 if (pBitmap == NULL) {
167 return;
168 }
169 pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
170 m_ImageCaches.SetAt(pStream, pImageCache);
171 }
172 int oldsize = pImageCache->EstimateSize();
173 pImageCache->Reset(pBitmap);
174 m_nCacheSize = pImageCache->EstimateSize() - oldsize;
175 } 185 }
176 CPDF_ImageCache::CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream) 186 CPDF_ImageCache::CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream)
177 : m_dwTimeCount(0) 187 : m_dwTimeCount(0),
178 , m_pCurBitmap(NULL) 188 m_pCurBitmap(NULL),
179 , m_pCurMask(NULL) 189 m_pCurMask(NULL),
180 , m_MatteColor(0) 190 m_MatteColor(0),
181 , m_pRenderStatus(NULL) 191 m_pRenderStatus(NULL),
182 , m_pDocument(pDoc) 192 m_pDocument(pDoc),
183 , m_pStream(pStream) 193 m_pStream(pStream),
184 , m_pCachedBitmap(NULL) 194 m_pCachedBitmap(NULL),
185 , m_pCachedMask(NULL) 195 m_pCachedMask(NULL),
186 , m_dwCacheSize(0) 196 m_dwCacheSize(0) {}
187 { 197 CPDF_ImageCache::~CPDF_ImageCache() {
188 } 198 delete m_pCachedBitmap;
189 CPDF_ImageCache::~CPDF_ImageCache() 199 m_pCachedBitmap = NULL;
190 { 200 delete m_pCachedMask;
191 delete m_pCachedBitmap; 201 m_pCachedMask = NULL;
192 m_pCachedBitmap = NULL; 202 }
193 delete m_pCachedMask; 203 void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap) {
194 m_pCachedMask = NULL; 204 delete m_pCachedBitmap;
195 } 205 m_pCachedBitmap = NULL;
196 void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap) 206 if (pBitmap) {
197 { 207 m_pCachedBitmap = pBitmap->Clone();
198 delete m_pCachedBitmap; 208 }
199 m_pCachedBitmap = NULL; 209 CalcSize();
200 if (pBitmap) { 210 }
201 m_pCachedBitmap = pBitmap->Clone(); 211 void CPDF_PageRenderCache::ClearImageData() {
202 } 212 FX_POSITION pos = m_ImageCaches.GetStartPosition();
203 CalcSize(); 213 while (pos) {
204 } 214 void* key;
205 void CPDF_PageRenderCache::ClearImageData() 215 void* value;
206 { 216 m_ImageCaches.GetNextAssoc(pos, key, value);
207 FX_POSITION pos = m_ImageCaches.GetStartPosition(); 217 ((CPDF_ImageCache*)value)->ClearImageData();
208 while (pos) { 218 }
209 void* key; 219 }
210 void* value; 220 void CPDF_ImageCache::ClearImageData() {
211 m_ImageCaches.GetNextAssoc(pos, key, value); 221 if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) {
212 ((CPDF_ImageCache*)value)->ClearImageData(); 222 ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData();
213 } 223 }
214 } 224 }
215 void CPDF_ImageCache::ClearImageData() 225 static FX_DWORD FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) {
216 { 226 return pDIB && pDIB->GetBuffer()
217 if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) { 227 ? (FX_DWORD)pDIB->GetHeight() * pDIB->GetPitch() +
218 ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData(); 228 (FX_DWORD)pDIB->GetPaletteSize() * 4
219 } 229 : 0;
220 } 230 }
221 static FX_DWORD FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) 231 FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap,
222 { 232 CFX_DIBSource*& pMask,
223 return pDIB && pDIB->GetBuffer() ? (FX_DWORD)pDIB->GetHeight() * pDIB->GetPi tch() + (FX_DWORD)pDIB->GetPaletteSize() * 4 : 0; 233 FX_DWORD& MatteColor,
224 } 234 CPDF_Dictionary* pPageResources,
225 FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource* & pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources, 235 FX_BOOL bStdCS,
226 FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStat us* pRenderStatus, 236 FX_DWORD GroupFamily,
227 int32_t downsampleWidth, int32_t downsampleHeight) 237 FX_BOOL bLoadMask,
228 { 238 CPDF_RenderStatus* pRenderStatus,
229 if (m_pCachedBitmap) { 239 int32_t downsampleWidth,
230 pBitmap = m_pCachedBitmap; 240 int32_t downsampleHeight) {
231 pMask = m_pCachedMask; 241 if (m_pCachedBitmap) {
232 MatteColor = m_MatteColor;
233 return TRUE;
234 }
235 if (!pRenderStatus) {
236 return FALSE;
237 }
238 CPDF_RenderContext*pContext = pRenderStatus->GetContext();
239 CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
240 m_dwTimeCount = pPageRenderCache->GetTimeCount();
241 CPDF_DIBSource* pSrc = new CPDF_DIBSource;
242 CPDF_DIBSource* pMaskSrc = NULL;
243 if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, pRenderStatu s->m_pFormResource, pPageResources, bStdCS, GroupFamily, bLoadMask)) {
244 delete pSrc;
245 pBitmap = NULL;
246 return FALSE;
247 }
248 m_MatteColor = MatteColor;
249 if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) {
250 m_pCachedBitmap = pSrc->Clone();
251 delete pSrc;
252 } else {
253 m_pCachedBitmap = pSrc;
254 }
255 if (pMaskSrc) {
256 m_pCachedMask = pMaskSrc->Clone();
257 delete pMaskSrc;
258 }
259
260 pBitmap = m_pCachedBitmap; 242 pBitmap = m_pCachedBitmap;
261 pMask = m_pCachedMask; 243 pMask = m_pCachedMask;
262 CalcSize(); 244 MatteColor = m_MatteColor;
245 return TRUE;
246 }
247 if (!pRenderStatus) {
263 return FALSE; 248 return FALSE;
264 } 249 }
265 CFX_DIBSource* CPDF_ImageCache::DetachBitmap() 250 CPDF_RenderContext* pContext = pRenderStatus->GetContext();
266 { 251 CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
267 CFX_DIBSource* pDIBSource = m_pCurBitmap; 252 m_dwTimeCount = pPageRenderCache->GetTimeCount();
268 m_pCurBitmap = NULL; 253 CPDF_DIBSource* pSrc = new CPDF_DIBSource;
269 return pDIBSource; 254 CPDF_DIBSource* pMaskSrc = NULL;
270 } 255 if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor,
271 CFX_DIBSource* CPDF_ImageCache::DetachMask() 256 pRenderStatus->m_pFormResource, pPageResources, bStdCS,
272 { 257 GroupFamily, bLoadMask)) {
273 CFX_DIBSource* pDIBSource = m_pCurMask; 258 delete pSrc;
274 m_pCurMask = NULL; 259 pBitmap = NULL;
275 return pDIBSource; 260 return FALSE;
276 } 261 }
277 int» CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, C PDF_Dictionary* pPageResources, FX_BOOL bStdCS, 262 m_MatteColor = MatteColor;
278 FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatu s, 263 if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) {
279 int32_t downsampleWidth, int32_t downsampleHeight) 264 m_pCachedBitmap = pSrc->Clone();
280 { 265 delete pSrc;
281 if (m_pCachedBitmap) { 266 } else {
282 m_pCurBitmap = m_pCachedBitmap; 267 m_pCachedBitmap = pSrc;
283 m_pCurMask = m_pCachedMask; 268 }
284 return 1; 269 if (pMaskSrc) {
285 } 270 m_pCachedMask = pMaskSrc->Clone();
286 if (!pRenderStatus) { 271 delete pMaskSrc;
287 return 0; 272 }
288 } 273
289 m_pRenderStatus = pRenderStatus; 274 pBitmap = m_pCachedBitmap;
290 m_pCurBitmap = new CPDF_DIBSource; 275 pMask = m_pCachedMask;
291 int ret = ((CPDF_DIBSource*)m_pCurBitmap)->StartLoadDIBSource(m_pDocument, m _pStream, TRUE, pFormResources, pPageResources, bStdCS, GroupFamily, bLoadMask); 276 CalcSize();
292 if (ret == 2) { 277 return FALSE;
293 return ret; 278 }
294 } 279 CFX_DIBSource* CPDF_ImageCache::DetachBitmap() {
295 if (!ret) { 280 CFX_DIBSource* pDIBSource = m_pCurBitmap;
296 delete m_pCurBitmap; 281 m_pCurBitmap = NULL;
297 m_pCurBitmap = NULL; 282 return pDIBSource;
298 return 0; 283 }
299 } 284 CFX_DIBSource* CPDF_ImageCache::DetachMask() {
300 ContinueGetCachedBitmap(); 285 CFX_DIBSource* pDIBSource = m_pCurMask;
301 return 0; 286 m_pCurMask = NULL;
302 } 287 return pDIBSource;
303 int CPDF_ImageCache::ContinueGetCachedBitmap() 288 }
304 { 289 int CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
305 m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->m_MatteColor; 290 CPDF_Dictionary* pPageResources,
306 m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask(); 291 FX_BOOL bStdCS,
307 CPDF_RenderContext*pContext = m_pRenderStatus->GetContext(); 292 FX_DWORD GroupFamily,
308 CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache; 293 FX_BOOL bLoadMask,
309 m_dwTimeCount = pPageRenderCache->GetTimeCount(); 294 CPDF_RenderStatus* pRenderStatus,
310 if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < FPDF_HUGE_IMAGE_S IZE) { 295 int32_t downsampleWidth,
311 m_pCachedBitmap = m_pCurBitmap->Clone(); 296 int32_t downsampleHeight) {
312 delete m_pCurBitmap; 297 if (m_pCachedBitmap) {
313 m_pCurBitmap = NULL;
314 } else {
315 m_pCachedBitmap = m_pCurBitmap;
316 }
317 if (m_pCurMask) {
318 m_pCachedMask = m_pCurMask->Clone();
319 delete m_pCurMask;
320 m_pCurMask = NULL;
321 }
322 m_pCurBitmap = m_pCachedBitmap; 298 m_pCurBitmap = m_pCachedBitmap;
323 m_pCurMask = m_pCachedMask; 299 m_pCurMask = m_pCachedMask;
324 CalcSize(); 300 return 1;
301 }
302 if (!pRenderStatus) {
325 return 0; 303 return 0;
326 } 304 }
327 int» CPDF_ImageCache::Continue(IFX_Pause* pPause) 305 m_pRenderStatus = pRenderStatus;
328 { 306 m_pCurBitmap = new CPDF_DIBSource;
329 int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause); 307 int ret =
330 if (ret == 2) { 308 ((CPDF_DIBSource*)m_pCurBitmap)
331 return ret; 309 ->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResources,
310 pPageResources, bStdCS, GroupFamily, bLoadMask);
311 if (ret == 2) {
312 return ret;
313 }
314 if (!ret) {
315 delete m_pCurBitmap;
316 m_pCurBitmap = NULL;
317 return 0;
318 }
319 ContinueGetCachedBitmap();
320 return 0;
321 }
322 int CPDF_ImageCache::ContinueGetCachedBitmap() {
323 m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->m_MatteColor;
324 m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask();
325 CPDF_RenderContext* pContext = m_pRenderStatus->GetContext();
326 CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
327 m_dwTimeCount = pPageRenderCache->GetTimeCount();
328 if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() <
329 FPDF_HUGE_IMAGE_SIZE) {
330 m_pCachedBitmap = m_pCurBitmap->Clone();
331 delete m_pCurBitmap;
332 m_pCurBitmap = NULL;
333 } else {
334 m_pCachedBitmap = m_pCurBitmap;
335 }
336 if (m_pCurMask) {
337 m_pCachedMask = m_pCurMask->Clone();
338 delete m_pCurMask;
339 m_pCurMask = NULL;
340 }
341 m_pCurBitmap = m_pCachedBitmap;
342 m_pCurMask = m_pCachedMask;
343 CalcSize();
344 return 0;
345 }
346 int CPDF_ImageCache::Continue(IFX_Pause* pPause) {
347 int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause);
348 if (ret == 2) {
349 return ret;
350 }
351 if (!ret) {
352 delete m_pCurBitmap;
353 m_pCurBitmap = NULL;
354 return 0;
355 }
356 ContinueGetCachedBitmap();
357 return 0;
358 }
359 void CPDF_ImageCache::CalcSize() {
360 m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) +
361 FPDF_ImageCache_EstimateImageSize(m_pCachedMask);
362 }
363 void CPDF_Document::ClearRenderFont() {
364 if (m_pDocRender) {
365 CFX_FontCache* pCache = m_pDocRender->GetFontCache();
366 if (pCache) {
367 pCache->FreeCache(FALSE);
332 } 368 }
333 if (!ret) { 369 }
334 delete m_pCurBitmap; 370 }
335 m_pCurBitmap = NULL;
336 return 0;
337 }
338 ContinueGetCachedBitmap();
339 return 0;
340 }
341 void CPDF_ImageCache::CalcSize()
342 {
343 m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + FPDF_Im ageCache_EstimateImageSize(m_pCachedMask);
344 }
345 void CPDF_Document::ClearRenderFont()
346 {
347 if (m_pDocRender) {
348 CFX_FontCache* pCache = m_pDocRender->GetFontCache();
349 if (pCache) {
350 pCache->FreeCache(FALSE);
351 }
352 }
353 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698