diff options
Diffstat (limited to 'core/fpdfapi')
-rw-r--r-- | core/fpdfapi/page/cpdf_image.cpp | 14 | ||||
-rw-r--r-- | core/fpdfapi/page/cpdf_image.h | 5 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_imagecacheentry.cpp | 42 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_imagecacheentry.h | 21 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_pagerendercache.cpp | 13 |
5 files changed, 51 insertions, 44 deletions
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp index 5f82886a9b..24f58dfeff 100644 --- a/core/fpdfapi/page/cpdf_image.cpp +++ b/core/fpdfapi/page/cpdf_image.cpp @@ -351,7 +351,7 @@ bool CPDF_Image::StartLoadDIBSource(CPDF_Dictionary* pFormResource, int ret = source->StartLoadDIBSource(m_pDocument.Get(), m_pStream.Get(), true, pFormResource, pPageResource, bStdCS, GroupFamily, bLoadMask); - if (!ret) { + if (ret == 0) { m_pDIBSource.Reset(); return false; } @@ -367,14 +367,14 @@ bool CPDF_Image::StartLoadDIBSource(CPDF_Dictionary* pFormResource, bool CPDF_Image::Continue(IFX_PauseIndicator* pPause) { RetainPtr<CPDF_DIBSource> pSource = m_pDIBSource.As<CPDF_DIBSource>(); int ret = pSource->ContinueLoadDIBSource(pPause); - if (!ret) { - m_pDIBSource.Reset(); - return false; - } if (ret == 2) return true; - m_pMask = pSource->DetachMask(); - m_MatteColor = pSource->GetMatteColor(); + if (ret == 1) { + m_pMask = pSource->DetachMask(); + m_MatteColor = pSource->GetMatteColor(); + } else { + m_pDIBSource.Reset(); + } return false; } diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h index 57cbe94ca2..43011f8822 100644 --- a/core/fpdfapi/page/cpdf_image.h +++ b/core/fpdfapi/page/cpdf_image.h @@ -48,12 +48,17 @@ class CPDF_Image : public Retainable { void SetJpegImageInline(const RetainPtr<IFX_SeekableReadStream>& pFile); void ResetCache(CPDF_Page* pPage, const RetainPtr<CFX_DIBitmap>& pDIBitmap); + + // Returns whether to Continue() or not. bool StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, bool bStdCS = false, uint32_t GroupFamily = 0, bool bLoadMask = false); + + // Returns whether to Continue() or not. bool Continue(IFX_PauseIndicator* pPause); + RetainPtr<CFX_DIBSource> DetachBitmap(); RetainPtr<CFX_DIBSource> DetachMask(); diff --git a/core/fpdfapi/render/cpdf_imagecacheentry.cpp b/core/fpdfapi/render/cpdf_imagecacheentry.cpp index f69bfdae68..f4be2af12c 100644 --- a/core/fpdfapi/render/cpdf_imagecacheentry.cpp +++ b/core/fpdfapi/render/cpdf_imagecacheentry.cpp @@ -52,7 +52,7 @@ RetainPtr<CFX_DIBSource> CPDF_ImageCacheEntry::DetachMask() { return std::move(m_pCurMask); } -int CPDF_ImageCacheEntry::StartGetCachedBitmap( +CPDF_DIBSource::LoadState CPDF_ImageCacheEntry::StartGetCachedBitmap( CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, bool bStdCS, @@ -64,7 +64,7 @@ int CPDF_ImageCacheEntry::StartGetCachedBitmap( if (m_pCachedBitmap) { m_pCurBitmap = m_pCachedBitmap; m_pCurMask = m_pCachedMask; - return 1; + return CPDF_DIBSource::LoadState::kSuccess; } m_pCurBitmap = pdfium::MakeRetain<CPDF_DIBSource>(); @@ -72,14 +72,26 @@ int CPDF_ImageCacheEntry::StartGetCachedBitmap( m_pDocument.Get(), m_pImage->GetStream(), true, pFormResources, pPageResources, bStdCS, GroupFamily, bLoadMask); if (ret == 2) - return ret; + return CPDF_DIBSource::LoadState::kContinue; - if (!ret) { + if (ret == 1) + ContinueGetCachedBitmap(pRenderStatus); + else m_pCurBitmap.Reset(); - return 0; - } - ContinueGetCachedBitmap(pRenderStatus); - return 0; + return CPDF_DIBSource::LoadState::kFail; +} + +bool CPDF_ImageCacheEntry::Continue(IFX_PauseIndicator* pPause, + CPDF_RenderStatus* pRenderStatus) { + int ret = m_pCurBitmap.As<CPDF_DIBSource>()->ContinueLoadDIBSource(pPause); + if (ret == 2) + return true; + + if (ret == 1) + ContinueGetCachedBitmap(pRenderStatus); + else + m_pCurBitmap.Reset(); + return false; } void CPDF_ImageCacheEntry::ContinueGetCachedBitmap( @@ -105,20 +117,6 @@ void CPDF_ImageCacheEntry::ContinueGetCachedBitmap( CalcSize(); } -int CPDF_ImageCacheEntry::Continue(IFX_PauseIndicator* pPause, - CPDF_RenderStatus* pRenderStatus) { - int ret = m_pCurBitmap.As<CPDF_DIBSource>()->ContinueLoadDIBSource(pPause); - if (!ret) { - m_pCurBitmap.Reset(); - return 0; - } - if (ret == 2) - return ret; - - ContinueGetCachedBitmap(pRenderStatus); - return 0; -} - void CPDF_ImageCacheEntry::CalcSize() { m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + FPDF_ImageCache_EstimateImageSize(m_pCachedMask); diff --git a/core/fpdfapi/render/cpdf_imagecacheentry.h b/core/fpdfapi/render/cpdf_imagecacheentry.h index 2bede23e62..dfeeddf408 100644 --- a/core/fpdfapi/render/cpdf_imagecacheentry.h +++ b/core/fpdfapi/render/cpdf_imagecacheentry.h @@ -9,11 +9,11 @@ #include <memory> +#include "core/fpdfapi/render/cpdf_dibsource.h" #include "core/fxcrt/fx_system.h" #include "core/fxcrt/retain_ptr.h" #include "core/fxcrt/unowned_ptr.h" -class CFX_DIBSource; class CFX_DIBitmap; class CPDF_Dictionary; class CPDF_Document; @@ -31,13 +31,18 @@ class CPDF_ImageCacheEntry { uint32_t EstimateSize() const { return m_dwCacheSize; } uint32_t GetTimeCount() const { return m_dwTimeCount; } CPDF_Image* GetImage() const { return m_pImage.Get(); } - int StartGetCachedBitmap(CPDF_Dictionary* pFormResources, - CPDF_Dictionary* pPageResources, - bool bStdCS, - uint32_t GroupFamily, - bool bLoadMask, - CPDF_RenderStatus* pRenderStatus); - int Continue(IFX_PauseIndicator* pPause, CPDF_RenderStatus* pRenderStatus); + + CPDF_DIBSource::LoadState StartGetCachedBitmap( + CPDF_Dictionary* pFormResources, + CPDF_Dictionary* pPageResources, + bool bStdCS, + uint32_t GroupFamily, + bool bLoadMask, + CPDF_RenderStatus* pRenderStatus); + + // Returns whether to Continue() or not. + bool Continue(IFX_PauseIndicator* pPause, CPDF_RenderStatus* pRenderStatus); + RetainPtr<CFX_DIBSource> DetachBitmap(); RetainPtr<CFX_DIBSource> DetachMask(); diff --git a/core/fpdfapi/render/cpdf_pagerendercache.cpp b/core/fpdfapi/render/cpdf_pagerendercache.cpp index 0d01589af3..781f18f0e0 100644 --- a/core/fpdfapi/render/cpdf_pagerendercache.cpp +++ b/core/fpdfapi/render/cpdf_pagerendercache.cpp @@ -94,17 +94,17 @@ bool CPDF_PageRenderCache::StartGetCachedBitmap( m_pCurImageCacheEntry = new CPDF_ImageCacheEntry(m_pPage->m_pDocument.Get(), pImage); } - int ret = m_pCurImageCacheEntry->StartGetCachedBitmap( + CPDF_DIBSource::LoadState ret = m_pCurImageCacheEntry->StartGetCachedBitmap( pRenderStatus->GetFormResource(), m_pPage->m_pPageResources.Get(), bStdCS, GroupFamily, bLoadMask, pRenderStatus); - if (ret == 2) + if (ret == CPDF_DIBSource::LoadState::kContinue) return true; m_nTimeCount++; if (!m_bCurFindCache) m_ImageCache[pStream] = m_pCurImageCacheEntry; - if (!ret) + if (ret == CPDF_DIBSource::LoadState::kFail) m_nCacheSize += m_pCurImageCacheEntry->EstimateSize(); return false; @@ -112,8 +112,8 @@ bool CPDF_PageRenderCache::StartGetCachedBitmap( bool CPDF_PageRenderCache::Continue(IFX_PauseIndicator* pPause, CPDF_RenderStatus* pRenderStatus) { - int ret = m_pCurImageCacheEntry->Continue(pPause, pRenderStatus); - if (ret == 2) + bool ret = m_pCurImageCacheEntry->Continue(pPause, pRenderStatus); + if (ret) return true; m_nTimeCount++; @@ -121,8 +121,7 @@ bool CPDF_PageRenderCache::Continue(IFX_PauseIndicator* pPause, m_ImageCache[m_pCurImageCacheEntry->GetImage()->GetStream()] = m_pCurImageCacheEntry; } - if (!ret) - m_nCacheSize += m_pCurImageCacheEntry->EstimateSize(); + m_nCacheSize += m_pCurImageCacheEntry->EstimateSize(); return false; } |