summaryrefslogtreecommitdiff
path: root/core/fpdfapi/render/cpdf_imagecacheentry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/render/cpdf_imagecacheentry.cpp')
-rw-r--r--core/fpdfapi/render/cpdf_imagecacheentry.cpp66
1 files changed, 37 insertions, 29 deletions
diff --git a/core/fpdfapi/render/cpdf_imagecacheentry.cpp b/core/fpdfapi/render/cpdf_imagecacheentry.cpp
index 751b3eb4b4..82b6117f86 100644
--- a/core/fpdfapi/render/cpdf_imagecacheentry.cpp
+++ b/core/fpdfapi/render/cpdf_imagecacheentry.cpp
@@ -31,27 +31,30 @@ CPDF_ImageCacheEntry::CPDF_ImageCacheEntry(CPDF_Document* pDoc,
CPDF_ImageCacheEntry::~CPDF_ImageCacheEntry() {}
-void CPDF_ImageCacheEntry::Reset(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap) {
- m_pCachedBitmap.Reset();
+void CPDF_ImageCacheEntry::Reset(const CFX_DIBitmap* pBitmap) {
+ m_pCachedBitmap.reset();
if (pBitmap)
m_pCachedBitmap = pBitmap->Clone();
CalcSize();
}
-static uint32_t FPDF_ImageCache_EstimateImageSize(
- const CFX_RetainPtr<CFX_DIBSource>& pDIB) {
+static uint32_t FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) {
return pDIB && pDIB->GetBuffer()
? (uint32_t)pDIB->GetHeight() * pDIB->GetPitch() +
(uint32_t)pDIB->GetPaletteSize() * 4
: 0;
}
-CFX_RetainPtr<CFX_DIBSource> CPDF_ImageCacheEntry::DetachBitmap() {
- return std::move(m_pCurBitmap);
+CFX_DIBSource* CPDF_ImageCacheEntry::DetachBitmap() {
+ CFX_DIBSource* pDIBSource = m_pCurBitmap;
+ m_pCurBitmap = nullptr;
+ return pDIBSource;
}
-CFX_RetainPtr<CFX_DIBSource> CPDF_ImageCacheEntry::DetachMask() {
- return std::move(m_pCurMask);
+CFX_DIBSource* CPDF_ImageCacheEntry::DetachMask() {
+ CFX_DIBSource* pDIBSource = m_pCurMask;
+ m_pCurMask = nullptr;
+ return pDIBSource;
}
int CPDF_ImageCacheEntry::StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
@@ -63,23 +66,25 @@ int CPDF_ImageCacheEntry::StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
int32_t downsampleWidth,
int32_t downsampleHeight) {
if (m_pCachedBitmap) {
- m_pCurBitmap = m_pCachedBitmap;
- m_pCurMask = m_pCachedMask;
+ m_pCurBitmap = m_pCachedBitmap.get();
+ m_pCurMask = m_pCachedMask.get();
return 1;
}
if (!pRenderStatus)
return 0;
m_pRenderStatus = pRenderStatus;
- m_pCurBitmap = pdfium::MakeRetain<CPDF_DIBSource>();
- int ret = m_pCurBitmap.As<CPDF_DIBSource>()->StartLoadDIBSource(
- m_pDocument, m_pStream, true, pFormResources, pPageResources, bStdCS,
- GroupFamily, bLoadMask);
+ 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) {
- m_pCurBitmap.Reset();
+ delete m_pCurBitmap;
+ m_pCurBitmap = nullptr;
return 0;
}
ContinueGetCachedBitmap();
@@ -87,41 +92,44 @@ int CPDF_ImageCacheEntry::StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
}
void CPDF_ImageCacheEntry::ContinueGetCachedBitmap() {
- m_MatteColor = m_pCurBitmap.As<CPDF_DIBSource>()->GetMatteColor();
- m_pCurMask = m_pCurBitmap.As<CPDF_DIBSource>()->DetachMask();
+ m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->GetMatteColor();
+ m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask();
CPDF_RenderContext* pContext = m_pRenderStatus->GetContext();
CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache();
m_dwTimeCount = pPageRenderCache->GetTimeCount();
if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() <
FPDF_HUGE_IMAGE_SIZE) {
m_pCachedBitmap = m_pCurBitmap->Clone();
- m_pCurBitmap.Reset();
+ delete m_pCurBitmap;
+ m_pCurBitmap = nullptr;
} else {
- m_pCachedBitmap = m_pCurBitmap;
+ m_pCachedBitmap = pdfium::WrapUnique<CFX_DIBSource>(m_pCurBitmap);
}
if (m_pCurMask) {
m_pCachedMask = m_pCurMask->Clone();
- m_pCurMask.Reset();
+ delete m_pCurMask;
+ m_pCurMask = nullptr;
}
- m_pCurBitmap = m_pCachedBitmap;
- m_pCurMask = m_pCachedMask;
+ m_pCurBitmap = m_pCachedBitmap.get();
+ m_pCurMask = m_pCachedMask.get();
CalcSize();
}
int CPDF_ImageCacheEntry::Continue(IFX_Pause* pPause) {
- int ret = m_pCurBitmap.As<CPDF_DIBSource>()->ContinueLoadDIBSource(pPause);
- if (!ret) {
- m_pCurBitmap.Reset();
- return 0;
- }
+ int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause);
if (ret == 2)
return ret;
+ if (!ret) {
+ delete m_pCurBitmap;
+ m_pCurBitmap = nullptr;
+ return 0;
+ }
ContinueGetCachedBitmap();
return 0;
}
void CPDF_ImageCacheEntry::CalcSize() {
- m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) +
- FPDF_ImageCache_EstimateImageSize(m_pCachedMask);
+ m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap.get()) +
+ FPDF_ImageCache_EstimateImageSize(m_pCachedMask.get());
}