| 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 cdbecd65ea89ddc4cbbfa92e5419af131dec3880..8da176e040981018f89a7c11f0d97d084680a0c3 100644
|
| --- a/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp
|
| +++ b/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp
|
| @@ -10,344 +10,361 @@
|
| #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) {
|
| - void* key;
|
| - void* 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) {
|
| + void* key;
|
| + void* value;
|
| + m_ImageCaches.GetNextAssoc(pos, key, value);
|
| + delete (CPDF_ImageCache*)value;
|
| + }
|
| + m_ImageCaches.RemoveAll();
|
| + m_nCacheSize = 0;
|
| + m_nTimeCount = 0;
|
| }
|
| -void CPDF_PageRenderCache::CacheOptimization(int32_t dwLimitCacheSize)
|
| -{
|
| - if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) {
|
| - return;
|
| - }
|
| - int nCount = m_ImageCaches.GetCount();
|
| - CACHEINFO* pCACHEINFO = (CACHEINFO*)FX_Alloc2D(uint8_t, sizeof(CACHEINFO), nCount);
|
| - FX_POSITION pos = m_ImageCaches.GetStartPosition();
|
| - int i = 0;
|
| - while (pos) {
|
| - void* key;
|
| - void* 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(int32_t dwLimitCacheSize) {
|
| + if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) {
|
| + return;
|
| + }
|
| + int nCount = m_ImageCaches.GetCount();
|
| + CACHEINFO* pCACHEINFO =
|
| + (CACHEINFO*)FX_Alloc2D(uint8_t, sizeof(CACHEINFO), nCount);
|
| + FX_POSITION pos = m_ImageCaches.GetStartPosition();
|
| + int i = 0;
|
| + while (pos) {
|
| + void* key;
|
| + void* 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)
|
| -{
|
| - void* 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) {
|
| + void* 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) {
|
| - void* key;
|
| - void* 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) {
|
| + void* key;
|
| + void* 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, (void*&)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, (void*&)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,
|
| - int32_t downsampleWidth, int32_t downsampleHeight)
|
| -{
|
| - CPDF_ImageCache* pImageCache;
|
| - FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (void*&)pImageCache);
|
| - if (!bFind) {
|
| - pImageCache = 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,
|
| + int32_t downsampleWidth,
|
| + int32_t downsampleHeight) {
|
| + CPDF_ImageCache* pImageCache;
|
| + FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (void*&)pImageCache);
|
| + if (!bFind) {
|
| + pImageCache = 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, int32_t downsampleWidth, int32_t downsampleHeight)
|
| -{
|
| - m_bCurFindCache = m_ImageCaches.Lookup(pStream, (void*&)m_pCurImageCache);
|
| - if (!m_bCurFindCache) {
|
| - m_pCurImageCache = 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,
|
| + int32_t downsampleWidth,
|
| + int32_t downsampleHeight) {
|
| + m_bCurFindCache = m_ImageCaches.Lookup(pStream, (void*&)m_pCurImageCache);
|
| + if (!m_bCurFindCache) {
|
| + m_pCurImageCache = 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, (void*&)pImageCache)) {
|
| - if (pBitmap == NULL) {
|
| - return;
|
| - }
|
| - pImageCache = 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, (void*&)pImageCache)) {
|
| + if (pBitmap == NULL) {
|
| + return;
|
| + }
|
| + pImageCache = 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)
|
| -{
|
| + : 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() {
|
| + delete m_pCachedBitmap;
|
| + m_pCachedBitmap = NULL;
|
| + delete m_pCachedMask;
|
| + m_pCachedMask = NULL;
|
| }
|
| -CPDF_ImageCache::~CPDF_ImageCache()
|
| -{
|
| - delete m_pCachedBitmap;
|
| - m_pCachedBitmap = NULL;
|
| - delete m_pCachedMask;
|
| - m_pCachedMask = NULL;
|
| +void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap) {
|
| + delete m_pCachedBitmap;
|
| + m_pCachedBitmap = NULL;
|
| + if (pBitmap) {
|
| + m_pCachedBitmap = pBitmap->Clone();
|
| + }
|
| + CalcSize();
|
| }
|
| -void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap)
|
| -{
|
| - delete m_pCachedBitmap;
|
| - m_pCachedBitmap = NULL;
|
| - if (pBitmap) {
|
| - m_pCachedBitmap = pBitmap->Clone();
|
| - }
|
| - CalcSize();
|
| +void CPDF_PageRenderCache::ClearImageData() {
|
| + FX_POSITION pos = m_ImageCaches.GetStartPosition();
|
| + while (pos) {
|
| + void* key;
|
| + void* value;
|
| + m_ImageCaches.GetNextAssoc(pos, key, value);
|
| + ((CPDF_ImageCache*)value)->ClearImageData();
|
| + }
|
| }
|
| -void CPDF_PageRenderCache::ClearImageData()
|
| -{
|
| - FX_POSITION pos = m_ImageCaches.GetStartPosition();
|
| - while (pos) {
|
| - void* key;
|
| - void* value;
|
| - m_ImageCaches.GetNextAssoc(pos, key, value);
|
| - ((CPDF_ImageCache*)value)->ClearImageData();
|
| - }
|
| -}
|
| -void CPDF_ImageCache::ClearImageData()
|
| -{
|
| - if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) {
|
| - ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData();
|
| - }
|
| +void CPDF_ImageCache::ClearImageData() {
|
| + if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) {
|
| + ((CPDF_DIBSource*)m_pCachedBitmap)->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;
|
| +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,
|
| - int32_t downsampleWidth, int32_t 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 = 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 (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;
|
| - }
|
| -
|
| +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,
|
| + int32_t downsampleWidth,
|
| + int32_t downsampleHeight) {
|
| + if (m_pCachedBitmap) {
|
| pBitmap = m_pCachedBitmap;
|
| pMask = m_pCachedMask;
|
| - CalcSize();
|
| + 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 = 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 (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;
|
| + }
|
| +
|
| + 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,
|
| - int32_t downsampleWidth, int32_t downsampleHeight)
|
| -{
|
| - if (m_pCachedBitmap) {
|
| - m_pCurBitmap = m_pCachedBitmap;
|
| - m_pCurMask = m_pCachedMask;
|
| - return 1;
|
| - }
|
| - if (!pRenderStatus) {
|
| - return 0;
|
| - }
|
| - m_pRenderStatus = pRenderStatus;
|
| - m_pCurBitmap = 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();
|
| - 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;
|
| - }
|
| +int CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
|
| + CPDF_Dictionary* pPageResources,
|
| + FX_BOOL bStdCS,
|
| + FX_DWORD GroupFamily,
|
| + FX_BOOL bLoadMask,
|
| + CPDF_RenderStatus* pRenderStatus,
|
| + int32_t downsampleWidth,
|
| + int32_t downsampleHeight) {
|
| + if (m_pCachedBitmap) {
|
| m_pCurBitmap = m_pCachedBitmap;
|
| m_pCurMask = m_pCachedMask;
|
| - CalcSize();
|
| + return 1;
|
| + }
|
| + if (!pRenderStatus) {
|
| + return 0;
|
| + }
|
| + m_pRenderStatus = pRenderStatus;
|
| + m_pCurBitmap = 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::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::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 (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;
|
| + }
|
| + 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();
|
| + 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);
|
| }
|
| + }
|
| }
|
|
|