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_render/cpdf_pagerendercache.h" | 7 #include "core/fpdfapi/fpdf_render/cpdf_pagerendercache.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" | 9 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" |
10 #include "core/fpdfapi/fpdf_page/pageint.h" | 10 #include "core/fpdfapi/fpdf_page/pageint.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 } else { | 159 } else { |
160 pEntry = it->second; | 160 pEntry = it->second; |
161 } | 161 } |
162 m_nCacheSize -= pEntry->EstimateSize(); | 162 m_nCacheSize -= pEntry->EstimateSize(); |
163 pEntry->Reset(pBitmap); | 163 pEntry->Reset(pBitmap); |
164 m_nCacheSize += pEntry->EstimateSize(); | 164 m_nCacheSize += pEntry->EstimateSize(); |
165 } | 165 } |
166 CPDF_ImageCacheEntry::CPDF_ImageCacheEntry(CPDF_Document* pDoc, | 166 CPDF_ImageCacheEntry::CPDF_ImageCacheEntry(CPDF_Document* pDoc, |
167 CPDF_Stream* pStream) | 167 CPDF_Stream* pStream) |
168 : m_dwTimeCount(0), | 168 : m_dwTimeCount(0), |
169 m_pCurBitmap(NULL), | 169 m_pCurBitmap(nullptr), |
170 m_pCurMask(NULL), | 170 m_pCurMask(nullptr), |
171 m_MatteColor(0), | 171 m_MatteColor(0), |
172 m_pRenderStatus(NULL), | 172 m_pRenderStatus(nullptr), |
173 m_pDocument(pDoc), | 173 m_pDocument(pDoc), |
174 m_pStream(pStream), | 174 m_pStream(pStream), |
175 m_pCachedBitmap(NULL), | 175 m_pCachedBitmap(nullptr), |
176 m_pCachedMask(NULL), | 176 m_pCachedMask(nullptr), |
177 m_dwCacheSize(0) {} | 177 m_dwCacheSize(0) {} |
178 CPDF_ImageCacheEntry::~CPDF_ImageCacheEntry() { | 178 CPDF_ImageCacheEntry::~CPDF_ImageCacheEntry() { |
179 delete m_pCachedBitmap; | 179 delete m_pCachedBitmap; |
180 delete m_pCachedMask; | 180 delete m_pCachedMask; |
181 } | 181 } |
182 void CPDF_ImageCacheEntry::Reset(const CFX_DIBitmap* pBitmap) { | 182 void CPDF_ImageCacheEntry::Reset(const CFX_DIBitmap* pBitmap) { |
183 delete m_pCachedBitmap; | 183 delete m_pCachedBitmap; |
184 m_pCachedBitmap = NULL; | 184 m_pCachedBitmap = nullptr; |
185 if (pBitmap) { | 185 if (pBitmap) { |
186 m_pCachedBitmap = pBitmap->Clone(); | 186 m_pCachedBitmap = pBitmap->Clone(); |
187 } | 187 } |
188 CalcSize(); | 188 CalcSize(); |
189 } | 189 } |
190 | 190 |
191 static uint32_t FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) { | 191 static uint32_t FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) { |
192 return pDIB && pDIB->GetBuffer() | 192 return pDIB && pDIB->GetBuffer() |
193 ? (uint32_t)pDIB->GetHeight() * pDIB->GetPitch() + | 193 ? (uint32_t)pDIB->GetHeight() * pDIB->GetPitch() + |
194 (uint32_t)pDIB->GetPaletteSize() * 4 | 194 (uint32_t)pDIB->GetPaletteSize() * 4 |
(...skipping 15 matching lines...) Expand all Loading... |
210 MatteColor = m_MatteColor; | 210 MatteColor = m_MatteColor; |
211 return TRUE; | 211 return TRUE; |
212 } | 212 } |
213 if (!pRenderStatus) { | 213 if (!pRenderStatus) { |
214 return FALSE; | 214 return FALSE; |
215 } | 215 } |
216 CPDF_RenderContext* pContext = pRenderStatus->GetContext(); | 216 CPDF_RenderContext* pContext = pRenderStatus->GetContext(); |
217 CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache(); | 217 CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache(); |
218 m_dwTimeCount = pPageRenderCache->GetTimeCount(); | 218 m_dwTimeCount = pPageRenderCache->GetTimeCount(); |
219 CPDF_DIBSource* pSrc = new CPDF_DIBSource; | 219 CPDF_DIBSource* pSrc = new CPDF_DIBSource; |
220 CPDF_DIBSource* pMaskSrc = NULL; | 220 CPDF_DIBSource* pMaskSrc = nullptr; |
221 if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, | 221 if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, |
222 pRenderStatus->m_pFormResource, pPageResources, bStdCS, | 222 pRenderStatus->m_pFormResource, pPageResources, bStdCS, |
223 GroupFamily, bLoadMask)) { | 223 GroupFamily, bLoadMask)) { |
224 delete pSrc; | 224 delete pSrc; |
225 pBitmap = NULL; | 225 pBitmap = nullptr; |
226 return FALSE; | 226 return FALSE; |
227 } | 227 } |
228 m_MatteColor = MatteColor; | 228 m_MatteColor = MatteColor; |
229 if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { | 229 if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { |
230 m_pCachedBitmap = pSrc->Clone(); | 230 m_pCachedBitmap = pSrc->Clone(); |
231 delete pSrc; | 231 delete pSrc; |
232 } else { | 232 } else { |
233 m_pCachedBitmap = pSrc; | 233 m_pCachedBitmap = pSrc; |
234 } | 234 } |
235 if (pMaskSrc) { | 235 if (pMaskSrc) { |
236 m_pCachedMask = pMaskSrc->Clone(); | 236 m_pCachedMask = pMaskSrc->Clone(); |
237 delete pMaskSrc; | 237 delete pMaskSrc; |
238 } | 238 } |
239 | 239 |
240 pBitmap = m_pCachedBitmap; | 240 pBitmap = m_pCachedBitmap; |
241 pMask = m_pCachedMask; | 241 pMask = m_pCachedMask; |
242 CalcSize(); | 242 CalcSize(); |
243 return FALSE; | 243 return FALSE; |
244 } | 244 } |
245 CFX_DIBSource* CPDF_ImageCacheEntry::DetachBitmap() { | 245 CFX_DIBSource* CPDF_ImageCacheEntry::DetachBitmap() { |
246 CFX_DIBSource* pDIBSource = m_pCurBitmap; | 246 CFX_DIBSource* pDIBSource = m_pCurBitmap; |
247 m_pCurBitmap = NULL; | 247 m_pCurBitmap = nullptr; |
248 return pDIBSource; | 248 return pDIBSource; |
249 } | 249 } |
250 CFX_DIBSource* CPDF_ImageCacheEntry::DetachMask() { | 250 CFX_DIBSource* CPDF_ImageCacheEntry::DetachMask() { |
251 CFX_DIBSource* pDIBSource = m_pCurMask; | 251 CFX_DIBSource* pDIBSource = m_pCurMask; |
252 m_pCurMask = NULL; | 252 m_pCurMask = nullptr; |
253 return pDIBSource; | 253 return pDIBSource; |
254 } | 254 } |
255 int CPDF_ImageCacheEntry::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, | 255 int CPDF_ImageCacheEntry::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, |
256 CPDF_Dictionary* pPageResources, | 256 CPDF_Dictionary* pPageResources, |
257 FX_BOOL bStdCS, | 257 FX_BOOL bStdCS, |
258 uint32_t GroupFamily, | 258 uint32_t GroupFamily, |
259 FX_BOOL bLoadMask, | 259 FX_BOOL bLoadMask, |
260 CPDF_RenderStatus* pRenderStatus, | 260 CPDF_RenderStatus* pRenderStatus, |
261 int32_t downsampleWidth, | 261 int32_t downsampleWidth, |
262 int32_t downsampleHeight) { | 262 int32_t downsampleHeight) { |
263 if (m_pCachedBitmap) { | 263 if (m_pCachedBitmap) { |
264 m_pCurBitmap = m_pCachedBitmap; | 264 m_pCurBitmap = m_pCachedBitmap; |
265 m_pCurMask = m_pCachedMask; | 265 m_pCurMask = m_pCachedMask; |
266 return 1; | 266 return 1; |
267 } | 267 } |
268 if (!pRenderStatus) { | 268 if (!pRenderStatus) { |
269 return 0; | 269 return 0; |
270 } | 270 } |
271 m_pRenderStatus = pRenderStatus; | 271 m_pRenderStatus = pRenderStatus; |
272 m_pCurBitmap = new CPDF_DIBSource; | 272 m_pCurBitmap = new CPDF_DIBSource; |
273 int ret = | 273 int ret = |
274 ((CPDF_DIBSource*)m_pCurBitmap) | 274 ((CPDF_DIBSource*)m_pCurBitmap) |
275 ->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResources, | 275 ->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResources, |
276 pPageResources, bStdCS, GroupFamily, bLoadMask); | 276 pPageResources, bStdCS, GroupFamily, bLoadMask); |
277 if (ret == 2) { | 277 if (ret == 2) { |
278 return ret; | 278 return ret; |
279 } | 279 } |
280 if (!ret) { | 280 if (!ret) { |
281 delete m_pCurBitmap; | 281 delete m_pCurBitmap; |
282 m_pCurBitmap = NULL; | 282 m_pCurBitmap = nullptr; |
283 return 0; | 283 return 0; |
284 } | 284 } |
285 ContinueGetCachedBitmap(); | 285 ContinueGetCachedBitmap(); |
286 return 0; | 286 return 0; |
287 } | 287 } |
288 void CPDF_ImageCacheEntry::ContinueGetCachedBitmap() { | 288 void CPDF_ImageCacheEntry::ContinueGetCachedBitmap() { |
289 m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->GetMatteColor(); | 289 m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->GetMatteColor(); |
290 m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask(); | 290 m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask(); |
291 CPDF_RenderContext* pContext = m_pRenderStatus->GetContext(); | 291 CPDF_RenderContext* pContext = m_pRenderStatus->GetContext(); |
292 CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache(); | 292 CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache(); |
293 m_dwTimeCount = pPageRenderCache->GetTimeCount(); | 293 m_dwTimeCount = pPageRenderCache->GetTimeCount(); |
294 if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < | 294 if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < |
295 FPDF_HUGE_IMAGE_SIZE) { | 295 FPDF_HUGE_IMAGE_SIZE) { |
296 m_pCachedBitmap = m_pCurBitmap->Clone(); | 296 m_pCachedBitmap = m_pCurBitmap->Clone(); |
297 delete m_pCurBitmap; | 297 delete m_pCurBitmap; |
298 m_pCurBitmap = NULL; | 298 m_pCurBitmap = nullptr; |
299 } else { | 299 } else { |
300 m_pCachedBitmap = m_pCurBitmap; | 300 m_pCachedBitmap = m_pCurBitmap; |
301 } | 301 } |
302 if (m_pCurMask) { | 302 if (m_pCurMask) { |
303 m_pCachedMask = m_pCurMask->Clone(); | 303 m_pCachedMask = m_pCurMask->Clone(); |
304 delete m_pCurMask; | 304 delete m_pCurMask; |
305 m_pCurMask = NULL; | 305 m_pCurMask = nullptr; |
306 } | 306 } |
307 m_pCurBitmap = m_pCachedBitmap; | 307 m_pCurBitmap = m_pCachedBitmap; |
308 m_pCurMask = m_pCachedMask; | 308 m_pCurMask = m_pCachedMask; |
309 CalcSize(); | 309 CalcSize(); |
310 } | 310 } |
311 int CPDF_ImageCacheEntry::Continue(IFX_Pause* pPause) { | 311 int CPDF_ImageCacheEntry::Continue(IFX_Pause* pPause) { |
312 int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause); | 312 int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause); |
313 if (ret == 2) { | 313 if (ret == 2) { |
314 return ret; | 314 return ret; |
315 } | 315 } |
316 if (!ret) { | 316 if (!ret) { |
317 delete m_pCurBitmap; | 317 delete m_pCurBitmap; |
318 m_pCurBitmap = NULL; | 318 m_pCurBitmap = nullptr; |
319 return 0; | 319 return 0; |
320 } | 320 } |
321 ContinueGetCachedBitmap(); | 321 ContinueGetCachedBitmap(); |
322 return 0; | 322 return 0; |
323 } | 323 } |
324 void CPDF_ImageCacheEntry::CalcSize() { | 324 void CPDF_ImageCacheEntry::CalcSize() { |
325 m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + | 325 m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + |
326 FPDF_ImageCache_EstimateImageSize(m_pCachedMask); | 326 FPDF_ImageCache_EstimateImageSize(m_pCachedMask); |
327 } | 327 } |
OLD | NEW |