Index: core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp |
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp |
index 45b6970e2a58a28481447573777831914f998da4..b80d6b7a33eb3e65d0df37e38224ba70dc7323ad 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp |
@@ -1,7 +1,7 @@ |
// Copyright 2014 PDFium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
+ |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
#include "../../../include/fpdfapi/fpdf_render.h" |
@@ -10,380 +10,422 @@ |
#include "../fpdf_page/pageint.h" |
#include "render_int.h" |
struct CACHEINFO { |
- FX_DWORD time; |
- CPDF_Stream* pStream; |
+ FX_DWORD time; |
+ CPDF_Stream* pStream; |
}; |
extern "C" { |
- static int compare(const void* data1, const void* data2) |
- { |
- return ((CACHEINFO*)data1)->time - ((CACHEINFO*)data2)->time; |
- } |
+static int compare(const void* data1, const void* data2) { |
+ return ((CACHEINFO*)data1)->time - ((CACHEINFO*)data2)->time; |
+} |
}; |
-void CPDF_Page::ClearRenderCache() |
-{ |
- if (m_pPageRender) { |
- m_pPageRender->ClearAll(); |
- } |
+void CPDF_Page::ClearRenderCache() { |
+ if (m_pPageRender) { |
+ m_pPageRender->ClearAll(); |
+ } |
} |
-void CPDF_PageRenderCache::ClearAll() |
-{ |
- FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
- while (pos) { |
- FX_LPVOID key, value; |
- m_ImageCaches.GetNextAssoc(pos, key, value); |
- delete (CPDF_ImageCache*)value; |
- } |
- m_ImageCaches.RemoveAll(); |
- m_nCacheSize = 0; |
- m_nTimeCount = 0; |
+void CPDF_PageRenderCache::ClearAll() { |
+ FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
+ while (pos) { |
+ FX_LPVOID key, value; |
+ m_ImageCaches.GetNextAssoc(pos, key, value); |
+ delete (CPDF_ImageCache*)value; |
+ } |
+ m_ImageCaches.RemoveAll(); |
+ m_nCacheSize = 0; |
+ m_nTimeCount = 0; |
} |
-void CPDF_PageRenderCache::CacheOptimization(FX_INT32 dwLimitCacheSize) |
-{ |
- if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) { |
- return; |
- } |
- int nCount = m_ImageCaches.GetCount(); |
- CACHEINFO* pCACHEINFO = (CACHEINFO*)FX_Alloc(FX_BYTE, (sizeof (CACHEINFO)) * nCount); |
- FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
- int i = 0; |
- while (pos) { |
- FX_LPVOID key, value; |
- m_ImageCaches.GetNextAssoc(pos, key, value); |
- pCACHEINFO[i].time = ((CPDF_ImageCache*)value)->GetTimeCount(); |
- pCACHEINFO[i++].pStream = ((CPDF_ImageCache*)value)->GetStream(); |
- } |
- FXSYS_qsort(pCACHEINFO, nCount, sizeof (CACHEINFO), compare); |
- FX_DWORD nTimeCount = m_nTimeCount; |
- if (nTimeCount + 1 < nTimeCount) { |
- for (i = 0; i < nCount; i ++) { |
- ((CPDF_ImageCache*)(m_ImageCaches[pCACHEINFO[i].pStream]))->m_dwTimeCount = i; |
- } |
- m_nTimeCount = nCount; |
- } |
- i = 0; |
- while(nCount > 15) { |
- ClearImageCache(pCACHEINFO[i++].pStream); |
- nCount--; |
- } |
- while (m_nCacheSize > (FX_DWORD)dwLimitCacheSize) { |
- ClearImageCache(pCACHEINFO[i++].pStream); |
- } |
- FX_Free(pCACHEINFO); |
+void CPDF_PageRenderCache::CacheOptimization(FX_INT32 dwLimitCacheSize) { |
+ if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) { |
+ return; |
+ } |
+ int nCount = m_ImageCaches.GetCount(); |
+ CACHEINFO* pCACHEINFO = |
+ (CACHEINFO*)FX_Alloc(FX_BYTE, (sizeof(CACHEINFO)) * nCount); |
+ FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
+ int i = 0; |
+ while (pos) { |
+ FX_LPVOID key, value; |
+ m_ImageCaches.GetNextAssoc(pos, key, value); |
+ pCACHEINFO[i].time = ((CPDF_ImageCache*)value)->GetTimeCount(); |
+ pCACHEINFO[i++].pStream = ((CPDF_ImageCache*)value)->GetStream(); |
+ } |
+ FXSYS_qsort(pCACHEINFO, nCount, sizeof(CACHEINFO), compare); |
+ FX_DWORD nTimeCount = m_nTimeCount; |
+ if (nTimeCount + 1 < nTimeCount) { |
+ for (i = 0; i < nCount; i++) { |
+ ((CPDF_ImageCache*)(m_ImageCaches[pCACHEINFO[i].pStream])) |
+ ->m_dwTimeCount = i; |
+ } |
+ m_nTimeCount = nCount; |
+ } |
+ i = 0; |
+ while (nCount > 15) { |
+ ClearImageCache(pCACHEINFO[i++].pStream); |
+ nCount--; |
+ } |
+ while (m_nCacheSize > (FX_DWORD)dwLimitCacheSize) { |
+ ClearImageCache(pCACHEINFO[i++].pStream); |
+ } |
+ FX_Free(pCACHEINFO); |
} |
-void CPDF_PageRenderCache::ClearImageCache(CPDF_Stream* pStream) |
-{ |
- FX_LPVOID value = m_ImageCaches.GetValueAt(pStream); |
- if (value == NULL) { |
- m_ImageCaches.RemoveKey(pStream); |
- return; |
- } |
- m_nCacheSize -= ((CPDF_ImageCache*)value)->EstimateSize(); |
- delete (CPDF_ImageCache*)value; |
+void CPDF_PageRenderCache::ClearImageCache(CPDF_Stream* pStream) { |
+ FX_LPVOID value = m_ImageCaches.GetValueAt(pStream); |
+ if (value == NULL) { |
m_ImageCaches.RemoveKey(pStream); |
+ return; |
+ } |
+ m_nCacheSize -= ((CPDF_ImageCache*)value)->EstimateSize(); |
+ delete (CPDF_ImageCache*)value; |
+ m_ImageCaches.RemoveKey(pStream); |
} |
-FX_DWORD CPDF_PageRenderCache::EstimateSize() |
-{ |
- FX_DWORD dwSize = 0; |
- FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
- while (pos) { |
- FX_LPVOID key, value; |
- m_ImageCaches.GetNextAssoc(pos, key, value); |
- dwSize += ((CPDF_ImageCache*)value)->EstimateSize(); |
- } |
- m_nCacheSize = dwSize; |
- return dwSize; |
+FX_DWORD CPDF_PageRenderCache::EstimateSize() { |
+ FX_DWORD dwSize = 0; |
+ FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
+ while (pos) { |
+ FX_LPVOID key, value; |
+ m_ImageCaches.GetNextAssoc(pos, key, value); |
+ dwSize += ((CPDF_ImageCache*)value)->EstimateSize(); |
+ } |
+ m_nCacheSize = dwSize; |
+ return dwSize; |
} |
-FX_DWORD CPDF_PageRenderCache::GetCachedSize(CPDF_Stream* pStream) const |
-{ |
- if (pStream == NULL) { |
- return m_nCacheSize; |
- } |
- CPDF_ImageCache* pImageCache; |
- if (!m_ImageCaches.Lookup(pStream, (FX_LPVOID&)pImageCache)) { |
- return 0; |
- } |
- return pImageCache->EstimateSize(); |
+FX_DWORD CPDF_PageRenderCache::GetCachedSize(CPDF_Stream* pStream) const { |
+ if (pStream == NULL) { |
+ return m_nCacheSize; |
+ } |
+ CPDF_ImageCache* pImageCache; |
+ if (!m_ImageCaches.Lookup(pStream, (FX_LPVOID&)pImageCache)) { |
+ return 0; |
+ } |
+ return pImageCache->EstimateSize(); |
} |
-void CPDF_PageRenderCache::GetCachedBitmap(CPDF_Stream* pStream, CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, |
- FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, |
- FX_INT32 downsampleWidth, FX_INT32 downsampleHeight) |
-{ |
- CPDF_ImageCache* pImageCache; |
- FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (FX_LPVOID&)pImageCache); |
- if (!bFind) { |
- pImageCache = FX_NEW CPDF_ImageCache(m_pPage->m_pDocument, pStream); |
- } |
- m_nTimeCount ++; |
- FX_BOOL bCached = pImageCache->GetCachedBitmap(pBitmap, pMask, MatteColor, m_pPage->m_pPageResources, bStdCS, GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight); |
- if (!bFind) { |
- m_ImageCaches.SetAt(pStream, pImageCache); |
- } |
- if (!bCached) { |
- m_nCacheSize += pImageCache->EstimateSize(); |
- } |
+void CPDF_PageRenderCache::GetCachedBitmap(CPDF_Stream* pStream, |
+ CFX_DIBSource*& pBitmap, |
+ CFX_DIBSource*& pMask, |
+ FX_DWORD& MatteColor, |
+ FX_BOOL bStdCS, |
+ FX_DWORD GroupFamily, |
+ FX_BOOL bLoadMask, |
+ CPDF_RenderStatus* pRenderStatus, |
+ FX_INT32 downsampleWidth, |
+ FX_INT32 downsampleHeight) { |
+ CPDF_ImageCache* pImageCache; |
+ FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (FX_LPVOID&)pImageCache); |
+ if (!bFind) { |
+ pImageCache = FX_NEW CPDF_ImageCache(m_pPage->m_pDocument, pStream); |
+ } |
+ m_nTimeCount++; |
+ FX_BOOL bCached = pImageCache->GetCachedBitmap(pBitmap, |
+ pMask, |
+ MatteColor, |
+ m_pPage->m_pPageResources, |
+ bStdCS, |
+ GroupFamily, |
+ bLoadMask, |
+ pRenderStatus, |
+ downsampleWidth, |
+ downsampleHeight); |
+ if (!bFind) { |
+ m_ImageCaches.SetAt(pStream, pImageCache); |
+ } |
+ if (!bCached) { |
+ m_nCacheSize += pImageCache->EstimateSize(); |
+ } |
} |
-FX_BOOL CPDF_PageRenderCache::StartGetCachedBitmap(CPDF_Stream* pStream, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, FX_INT32 downsampleWidth, FX_INT32 downsampleHeight) |
-{ |
- m_bCurFindCache = m_ImageCaches.Lookup(pStream, (FX_LPVOID&)m_pCurImageCache); |
- if (!m_bCurFindCache) { |
- m_pCurImageCache = FX_NEW CPDF_ImageCache(m_pPage->m_pDocument, pStream); |
- } |
- int ret = m_pCurImageCache->StartGetCachedBitmap(pRenderStatus->m_pFormResource, m_pPage->m_pPageResources, bStdCS, GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight); |
- if (ret == 2) { |
- return TRUE; |
- } |
- m_nTimeCount ++; |
- if (!m_bCurFindCache) { |
- m_ImageCaches.SetAt(pStream, m_pCurImageCache); |
- } |
- if (!ret) { |
- m_nCacheSize += m_pCurImageCache->EstimateSize(); |
- } |
- return FALSE; |
+FX_BOOL CPDF_PageRenderCache::StartGetCachedBitmap( |
+ CPDF_Stream* pStream, |
+ FX_BOOL bStdCS, |
+ FX_DWORD GroupFamily, |
+ FX_BOOL bLoadMask, |
+ CPDF_RenderStatus* pRenderStatus, |
+ FX_INT32 downsampleWidth, |
+ FX_INT32 downsampleHeight) { |
+ m_bCurFindCache = m_ImageCaches.Lookup(pStream, (FX_LPVOID&)m_pCurImageCache); |
+ if (!m_bCurFindCache) { |
+ m_pCurImageCache = FX_NEW CPDF_ImageCache(m_pPage->m_pDocument, pStream); |
+ } |
+ int ret = |
+ m_pCurImageCache->StartGetCachedBitmap(pRenderStatus->m_pFormResource, |
+ m_pPage->m_pPageResources, |
+ bStdCS, |
+ GroupFamily, |
+ bLoadMask, |
+ pRenderStatus, |
+ downsampleWidth, |
+ downsampleHeight); |
+ if (ret == 2) { |
+ return TRUE; |
+ } |
+ m_nTimeCount++; |
+ if (!m_bCurFindCache) { |
+ m_ImageCaches.SetAt(pStream, m_pCurImageCache); |
+ } |
+ if (!ret) { |
+ m_nCacheSize += m_pCurImageCache->EstimateSize(); |
+ } |
+ return FALSE; |
} |
-FX_BOOL CPDF_PageRenderCache::Continue(IFX_Pause* pPause) |
-{ |
- int ret = m_pCurImageCache->Continue(pPause); |
- if (ret == 2) { |
- return TRUE; |
- } |
- m_nTimeCount ++; |
- if (!m_bCurFindCache) { |
- m_ImageCaches.SetAt(m_pCurImageCache->GetStream(), m_pCurImageCache); |
- } |
- if (!ret) { |
- m_nCacheSize += m_pCurImageCache->EstimateSize(); |
- } |
- return FALSE; |
+FX_BOOL CPDF_PageRenderCache::Continue(IFX_Pause* pPause) { |
+ int ret = m_pCurImageCache->Continue(pPause); |
+ if (ret == 2) { |
+ return TRUE; |
+ } |
+ m_nTimeCount++; |
+ if (!m_bCurFindCache) { |
+ m_ImageCaches.SetAt(m_pCurImageCache->GetStream(), m_pCurImageCache); |
+ } |
+ if (!ret) { |
+ m_nCacheSize += m_pCurImageCache->EstimateSize(); |
+ } |
+ return FALSE; |
} |
-void CPDF_PageRenderCache::ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap) |
-{ |
- CPDF_ImageCache* pImageCache; |
- if (!m_ImageCaches.Lookup(pStream, (FX_LPVOID&)pImageCache)) { |
- if (pBitmap == NULL) { |
- return; |
- } |
- pImageCache = FX_NEW CPDF_ImageCache(m_pPage->m_pDocument, pStream); |
- m_ImageCaches.SetAt(pStream, pImageCache); |
- } |
- int oldsize = pImageCache->EstimateSize(); |
- pImageCache->Reset(pBitmap); |
- m_nCacheSize = pImageCache->EstimateSize() - oldsize; |
+void CPDF_PageRenderCache::ResetBitmap(CPDF_Stream* pStream, |
+ const CFX_DIBitmap* pBitmap) { |
+ CPDF_ImageCache* pImageCache; |
+ if (!m_ImageCaches.Lookup(pStream, (FX_LPVOID&)pImageCache)) { |
+ if (pBitmap == NULL) { |
+ return; |
+ } |
+ pImageCache = FX_NEW CPDF_ImageCache(m_pPage->m_pDocument, pStream); |
+ m_ImageCaches.SetAt(pStream, pImageCache); |
+ } |
+ int oldsize = pImageCache->EstimateSize(); |
+ pImageCache->Reset(pBitmap); |
+ m_nCacheSize = pImageCache->EstimateSize() - oldsize; |
} |
CPDF_ImageCache::CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream) |
- : m_dwTimeCount(0) |
- , m_pCurBitmap(NULL) |
- , m_pCurMask(NULL) |
- , m_MatteColor(0) |
- , m_pRenderStatus(NULL) |
- , m_pDocument(pDoc) |
- , m_pStream(pStream) |
- , m_pCachedBitmap(NULL) |
- , m_pCachedMask(NULL) |
- , m_dwCacheSize(0) |
-{ |
-} |
-CPDF_ImageCache::~CPDF_ImageCache() |
-{ |
- if (m_pCachedBitmap) { |
- delete m_pCachedBitmap; |
- m_pCachedBitmap = NULL; |
- } |
- if (m_pCachedMask) { |
- delete m_pCachedMask; |
- m_pCachedMask = NULL; |
- } |
+ : m_dwTimeCount(0), |
+ m_pCurBitmap(NULL), |
+ m_pCurMask(NULL), |
+ m_MatteColor(0), |
+ m_pRenderStatus(NULL), |
+ m_pDocument(pDoc), |
+ m_pStream(pStream), |
+ m_pCachedBitmap(NULL), |
+ m_pCachedMask(NULL), |
+ m_dwCacheSize(0) { |
} |
-void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap) |
-{ |
- if (m_pCachedBitmap) { |
- delete m_pCachedBitmap; |
- } |
+CPDF_ImageCache::~CPDF_ImageCache() { |
+ if (m_pCachedBitmap) { |
+ delete m_pCachedBitmap; |
m_pCachedBitmap = NULL; |
- if (pBitmap) { |
- m_pCachedBitmap = pBitmap->Clone(); |
- } |
- CalcSize(); |
+ } |
+ if (m_pCachedMask) { |
+ delete m_pCachedMask; |
+ m_pCachedMask = NULL; |
+ } |
} |
-void CPDF_PageRenderCache::ClearImageData() |
-{ |
- FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
- while (pos) { |
- FX_LPVOID key, value; |
- m_ImageCaches.GetNextAssoc(pos, key, value); |
- ((CPDF_ImageCache*)value)->ClearImageData(); |
- } |
+void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap) { |
+ if (m_pCachedBitmap) { |
+ delete m_pCachedBitmap; |
+ } |
+ m_pCachedBitmap = NULL; |
+ if (pBitmap) { |
+ m_pCachedBitmap = pBitmap->Clone(); |
+ } |
+ CalcSize(); |
} |
-void CPDF_ImageCache::ClearImageData() |
-{ |
- if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) { |
- ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData(); |
- } |
+void CPDF_PageRenderCache::ClearImageData() { |
+ FX_POSITION pos = m_ImageCaches.GetStartPosition(); |
+ while (pos) { |
+ FX_LPVOID key, value; |
+ m_ImageCaches.GetNextAssoc(pos, key, value); |
+ ((CPDF_ImageCache*)value)->ClearImageData(); |
+ } |
} |
-static FX_DWORD FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) |
-{ |
- return pDIB && pDIB->GetBuffer() ? (FX_DWORD)pDIB->GetHeight() * pDIB->GetPitch() + (FX_DWORD)pDIB->GetPaletteSize() * 4 : 0; |
+void CPDF_ImageCache::ClearImageData() { |
+ if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) { |
+ ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData(); |
+ } |
} |
-FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources, |
- FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, |
- FX_INT32 downsampleWidth, FX_INT32 downsampleHeight) |
-{ |
- if (m_pCachedBitmap) { |
- pBitmap = m_pCachedBitmap; |
- pMask = m_pCachedMask; |
- MatteColor = m_MatteColor; |
- return TRUE; |
- } |
- if (!pRenderStatus) { |
- return FALSE; |
- } |
- CPDF_RenderContext*pContext = pRenderStatus->GetContext(); |
- CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache; |
- m_dwTimeCount = pPageRenderCache->GetTimeCount(); |
- CPDF_DIBSource* pSrc = FX_NEW CPDF_DIBSource; |
- CPDF_DIBSource* pMaskSrc = NULL; |
- if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, pRenderStatus->m_pFormResource, pPageResources, bStdCS, GroupFamily, bLoadMask)) { |
- delete pSrc; |
- pBitmap = NULL; |
- return FALSE; |
- } |
- m_MatteColor = MatteColor; |
+static FX_DWORD FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) { |
+ return pDIB && pDIB->GetBuffer() |
+ ? (FX_DWORD)pDIB->GetHeight() * pDIB->GetPitch() + |
+ (FX_DWORD)pDIB->GetPaletteSize() * 4 |
+ : 0; |
+} |
+FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap, |
+ CFX_DIBSource*& pMask, |
+ FX_DWORD& MatteColor, |
+ CPDF_Dictionary* pPageResources, |
+ FX_BOOL bStdCS, |
+ FX_DWORD GroupFamily, |
+ FX_BOOL bLoadMask, |
+ CPDF_RenderStatus* pRenderStatus, |
+ FX_INT32 downsampleWidth, |
+ FX_INT32 downsampleHeight) { |
+ if (m_pCachedBitmap) { |
+ pBitmap = m_pCachedBitmap; |
+ pMask = m_pCachedMask; |
+ MatteColor = m_MatteColor; |
+ return TRUE; |
+ } |
+ if (!pRenderStatus) { |
+ return FALSE; |
+ } |
+ CPDF_RenderContext* pContext = pRenderStatus->GetContext(); |
+ CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache; |
+ m_dwTimeCount = pPageRenderCache->GetTimeCount(); |
+ CPDF_DIBSource* pSrc = FX_NEW CPDF_DIBSource; |
+ CPDF_DIBSource* pMaskSrc = NULL; |
+ if (!pSrc->Load(m_pDocument, |
+ m_pStream, |
+ &pMaskSrc, |
+ &MatteColor, |
+ pRenderStatus->m_pFormResource, |
+ pPageResources, |
+ bStdCS, |
+ GroupFamily, |
+ bLoadMask)) { |
+ delete pSrc; |
+ pBitmap = NULL; |
+ return FALSE; |
+ } |
+ m_MatteColor = MatteColor; |
#if !defined(_FPDFAPI_MINI_) |
- if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { |
- m_pCachedBitmap = pSrc->Clone(); |
- delete pSrc; |
- } else { |
- m_pCachedBitmap = pSrc; |
- } |
- if (pMaskSrc) { |
- m_pCachedMask = pMaskSrc->Clone(); |
- delete pMaskSrc; |
- } |
+ if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { |
+ m_pCachedBitmap = pSrc->Clone(); |
+ delete pSrc; |
+ } else { |
+ m_pCachedBitmap = pSrc; |
+ } |
+ if (pMaskSrc) { |
+ m_pCachedMask = pMaskSrc->Clone(); |
+ delete pMaskSrc; |
+ } |
#else |
- if (pSrc->GetFormat() == FXDIB_8bppRgb && pSrc->GetPalette() && |
- pSrc->GetHeight() * pSrc->GetWidth() * 3 < 1024) { |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- m_pCachedBitmap = pSrc->CloneConvert(FXDIB_Rgb32); |
+ if (pSrc->GetFormat() == FXDIB_8bppRgb && pSrc->GetPalette() && |
+ pSrc->GetHeight() * pSrc->GetWidth() * 3 < 1024) { |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
+ m_pCachedBitmap = pSrc->CloneConvert(FXDIB_Rgb32); |
#else |
- m_pCachedBitmap = pSrc->CloneConvert(FXDIB_Rgb); |
+ m_pCachedBitmap = pSrc->CloneConvert(FXDIB_Rgb); |
#endif |
- delete pSrc; |
- } else if (pSrc->GetPitch() * pSrc->GetHeight() < 102400) { |
- m_pCachedBitmap = pSrc->Clone(); |
- delete pSrc; |
- } else { |
- m_pCachedBitmap = pSrc; |
- } |
- m_pCachedMask = pMaskSrc; |
+ delete pSrc; |
+ } else if (pSrc->GetPitch() * pSrc->GetHeight() < 102400) { |
+ m_pCachedBitmap = pSrc->Clone(); |
+ delete pSrc; |
+ } else { |
+ m_pCachedBitmap = pSrc; |
+ } |
+ m_pCachedMask = pMaskSrc; |
#endif |
- pBitmap = m_pCachedBitmap; |
- pMask = m_pCachedMask; |
- CalcSize(); |
- return FALSE; |
+ pBitmap = m_pCachedBitmap; |
+ pMask = m_pCachedMask; |
+ CalcSize(); |
+ return FALSE; |
} |
-CFX_DIBSource* CPDF_ImageCache::DetachBitmap() |
-{ |
- CFX_DIBSource* pDIBSource = m_pCurBitmap; |
- m_pCurBitmap = NULL; |
- return pDIBSource; |
+CFX_DIBSource* CPDF_ImageCache::DetachBitmap() { |
+ CFX_DIBSource* pDIBSource = m_pCurBitmap; |
+ m_pCurBitmap = NULL; |
+ return pDIBSource; |
} |
-CFX_DIBSource* CPDF_ImageCache::DetachMask() |
-{ |
- CFX_DIBSource* pDIBSource = m_pCurMask; |
- m_pCurMask = NULL; |
- return pDIBSource; |
+CFX_DIBSource* CPDF_ImageCache::DetachMask() { |
+ CFX_DIBSource* pDIBSource = m_pCurMask; |
+ m_pCurMask = NULL; |
+ return pDIBSource; |
} |
-int CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, FX_BOOL bStdCS, |
- FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, |
- FX_INT32 downsampleWidth, FX_INT32 downsampleHeight) |
-{ |
- if (m_pCachedBitmap) { |
- m_pCurBitmap = m_pCachedBitmap; |
- m_pCurMask = m_pCachedMask; |
- return 1; |
- } |
- if (!pRenderStatus) { |
- return 0; |
- } |
- m_pRenderStatus = pRenderStatus; |
- m_pCurBitmap = FX_NEW CPDF_DIBSource; |
- int ret = ((CPDF_DIBSource*)m_pCurBitmap)->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResources, pPageResources, bStdCS, GroupFamily, bLoadMask); |
- if (ret == 2) { |
- return ret; |
- } |
- if (!ret) { |
- delete m_pCurBitmap; |
- m_pCurBitmap = NULL; |
- return 0; |
- } |
- ContinueGetCachedBitmap(); |
+int CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, |
+ CPDF_Dictionary* pPageResources, |
+ FX_BOOL bStdCS, |
+ FX_DWORD GroupFamily, |
+ FX_BOOL bLoadMask, |
+ CPDF_RenderStatus* pRenderStatus, |
+ FX_INT32 downsampleWidth, |
+ FX_INT32 downsampleHeight) { |
+ if (m_pCachedBitmap) { |
+ m_pCurBitmap = m_pCachedBitmap; |
+ m_pCurMask = m_pCachedMask; |
+ return 1; |
+ } |
+ if (!pRenderStatus) { |
+ return 0; |
+ } |
+ m_pRenderStatus = pRenderStatus; |
+ m_pCurBitmap = FX_NEW CPDF_DIBSource; |
+ int ret = ((CPDF_DIBSource*)m_pCurBitmap)->StartLoadDIBSource(m_pDocument, |
+ m_pStream, |
+ TRUE, |
+ pFormResources, |
+ pPageResources, |
+ bStdCS, |
+ GroupFamily, |
+ bLoadMask); |
+ if (ret == 2) { |
+ return ret; |
+ } |
+ if (!ret) { |
+ delete m_pCurBitmap; |
+ m_pCurBitmap = NULL; |
return 0; |
+ } |
+ ContinueGetCachedBitmap(); |
+ return 0; |
} |
-int CPDF_ImageCache::ContinueGetCachedBitmap() |
-{ |
- m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->m_MatteColor; |
- m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask(); |
- CPDF_RenderContext*pContext = m_pRenderStatus->GetContext(); |
- CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache; |
- m_dwTimeCount = pPageRenderCache->GetTimeCount(); |
+int CPDF_ImageCache::ContinueGetCachedBitmap() { |
+ m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->m_MatteColor; |
+ m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask(); |
+ CPDF_RenderContext* pContext = m_pRenderStatus->GetContext(); |
+ CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache; |
+ m_dwTimeCount = pPageRenderCache->GetTimeCount(); |
#if !defined(_FPDFAPI_MINI_) |
- if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { |
- m_pCachedBitmap = m_pCurBitmap->Clone(); |
- delete m_pCurBitmap; |
- m_pCurBitmap = NULL; |
- } else { |
- m_pCachedBitmap = m_pCurBitmap; |
- } |
- if (m_pCurMask) { |
- m_pCachedMask = m_pCurMask->Clone(); |
- delete m_pCurMask; |
- m_pCurMask = NULL; |
- } |
+ if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < |
+ FPDF_HUGE_IMAGE_SIZE) { |
+ m_pCachedBitmap = m_pCurBitmap->Clone(); |
+ delete m_pCurBitmap; |
+ m_pCurBitmap = NULL; |
+ } else { |
+ m_pCachedBitmap = m_pCurBitmap; |
+ } |
+ if (m_pCurMask) { |
+ m_pCachedMask = m_pCurMask->Clone(); |
+ delete m_pCurMask; |
+ m_pCurMask = NULL; |
+ } |
#else |
- if (m_pCurBitmap->GetFormat() == FXDIB_8bppRgb && m_pCurBitmap->GetPalette() && |
- m_pCurBitmap->GetHeight() * m_pCurBitmap->GetWidth() * 3 < 1024) { |
- m_pCachedBitmap = m_pCurBitmap->CloneConvert(FXDIB_Rgb32); |
- m_pCachedBitmap = m_pCurBitmap->CloneConvert(FXDIB_Rgb); |
- delete m_pCurBitmap; |
- m_pCurBitmap = NULL; |
- } else if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < 102400) { |
- m_pCachedBitmap = m_pCurBitmap->Clone(); |
- delete m_pCurBitmap; |
- m_pCurBitmap = NULL; |
- } else { |
- m_pCachedBitmap = m_pCurBitmap; |
- } |
- m_pCachedMask = m_pCurMask; |
+ if (m_pCurBitmap->GetFormat() == FXDIB_8bppRgb && |
+ m_pCurBitmap->GetPalette() && |
+ m_pCurBitmap->GetHeight() * m_pCurBitmap->GetWidth() * 3 < 1024) { |
+ m_pCachedBitmap = m_pCurBitmap->CloneConvert(FXDIB_Rgb32); |
+ m_pCachedBitmap = m_pCurBitmap->CloneConvert(FXDIB_Rgb); |
+ delete m_pCurBitmap; |
+ m_pCurBitmap = NULL; |
+ } else if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < 102400) { |
+ m_pCachedBitmap = m_pCurBitmap->Clone(); |
+ delete m_pCurBitmap; |
+ m_pCurBitmap = NULL; |
+ } else { |
+ m_pCachedBitmap = m_pCurBitmap; |
+ } |
+ m_pCachedMask = m_pCurMask; |
#endif |
- m_pCurBitmap = m_pCachedBitmap; |
- m_pCurMask = m_pCachedMask; |
- CalcSize(); |
- return 0; |
+ m_pCurBitmap = m_pCachedBitmap; |
+ m_pCurMask = m_pCachedMask; |
+ CalcSize(); |
+ return 0; |
} |
-int CPDF_ImageCache::Continue(IFX_Pause* pPause) |
-{ |
- int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause); |
- if (ret == 2) { |
- return ret; |
- } |
- if (!ret) { |
- delete m_pCurBitmap; |
- m_pCurBitmap = NULL; |
- return 0; |
- } |
- ContinueGetCachedBitmap(); |
+int CPDF_ImageCache::Continue(IFX_Pause* pPause) { |
+ int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause); |
+ if (ret == 2) { |
+ return ret; |
+ } |
+ if (!ret) { |
+ delete m_pCurBitmap; |
+ m_pCurBitmap = NULL; |
return 0; |
+ } |
+ ContinueGetCachedBitmap(); |
+ return 0; |
} |
-void CPDF_ImageCache::CalcSize() |
-{ |
- m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + FPDF_ImageCache_EstimateImageSize(m_pCachedMask); |
+void CPDF_ImageCache::CalcSize() { |
+ m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + |
+ FPDF_ImageCache_EstimateImageSize(m_pCachedMask); |
} |
-void CPDF_Document::ClearRenderFont() |
-{ |
- if (m_pDocRender) { |
- CFX_FontCache* pCache = m_pDocRender->GetFontCache(); |
- if (pCache) { |
- pCache->FreeCache(FALSE); |
- } |
+void CPDF_Document::ClearRenderFont() { |
+ if (m_pDocRender) { |
+ CFX_FontCache* pCache = m_pDocRender->GetFontCache(); |
+ if (pCache) { |
+ pCache->FreeCache(FALSE); |
} |
+ } |
} |