Index: core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
index a894e846ee130a397367c1855ef5da69c9ba9869..12f60632fce465984fade58ccb09d326b6ffc0c4 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
@@ -1013,48 +1013,38 @@ void CPDF_RenderContext::DrawObjectList(CFX_RenderDevice* pDevice, CPDF_PageObje |
AppendObjectList(pObjs, pObject2Device); |
Render(pDevice, pOptions); |
} |
-CPDF_ProgressiveRenderer::CPDF_ProgressiveRenderer() |
+ |
+CPDF_ProgressiveRenderer::CPDF_ProgressiveRenderer( |
+ CPDF_RenderContext* pContext, |
+ CFX_RenderDevice* pDevice, |
+ const CPDF_RenderOptions* pOptions) : |
+ m_Status(Ready), |
+ m_pContext(pContext), |
+ m_pDevice(pDevice), |
+ m_pOptions(pOptions), |
+ m_LayerIndex(0), |
+ m_ObjectIndex(0), |
+ m_ObjectPos(nullptr), |
+ m_PrevLastPos(nullptr) |
{ |
- m_pRenderer = NULL; |
- m_pContext = NULL; |
- m_pDevice = NULL; |
- m_Status = Ready; |
} |
+ |
CPDF_ProgressiveRenderer::~CPDF_ProgressiveRenderer() |
{ |
- Clear(); |
-} |
-void CPDF_ProgressiveRenderer::Clear() |
-{ |
- if (m_pRenderer) { |
- delete m_pRenderer; |
+ if (m_pRenderStatus) |
m_pDevice->RestoreState(); |
- m_pRenderer = NULL; |
- } |
- m_Status = Ready; |
} |
-void CPDF_ProgressiveRenderer::Start(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, |
- const CPDF_RenderOptions* pOptions, IFX_Pause* pPause, FX_BOOL bDropObjects) |
+ |
+void CPDF_ProgressiveRenderer::Start(IFX_Pause* pPause) |
{ |
- if (m_Status != Ready) { |
- m_Status = Failed; |
- return; |
- } |
- m_pContext = pContext; |
- m_pDevice = pDevice; |
- m_pOptions = pOptions; |
- m_bDropObjects = bDropObjects; |
- if (pContext == NULL || pDevice == NULL) { |
+ if (!m_pContext || !m_pDevice || m_Status != Ready) { |
m_Status = Failed; |
return; |
} |
m_Status = ToBeContinued; |
- m_ObjectPos = NULL; |
- m_LayerIndex = 0; |
- m_ObjectIndex = 0; |
- m_PrevLastPos = NULL; |
Continue(pPause); |
} |
+ |
#define RENDER_STEP_LIMIT 100 |
void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) |
{ |
@@ -1076,9 +1066,8 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) |
} |
} |
if (LastPos == m_PrevLastPos) { |
- if (m_pRenderer) { |
- delete m_pRenderer; |
- m_pRenderer = NULL; |
+ if (m_pRenderStatus) { |
+ m_pRenderStatus.reset(); |
m_pDevice->RestoreState(); |
m_ObjectPos = NULL; |
m_PrevLastPos = NULL; |
@@ -1093,12 +1082,13 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) |
} |
m_PrevLastPos = LastPos; |
} |
- if (m_pRenderer == NULL) { |
+ if (!m_pRenderStatus) { |
m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition(); |
m_ObjectIndex = 0; |
- m_pRenderer = new CPDF_RenderStatus(); |
- m_pRenderer->Initialize(m_pContext, m_pDevice, NULL, NULL, NULL, NULL, |
- m_pOptions, pItem->m_pObjectList->m_Transparency, m_bDropObjects, NULL); |
+ m_pRenderStatus.reset(new CPDF_RenderStatus()); |
+ m_pRenderStatus->Initialize( |
+ m_pContext, m_pDevice, NULL, NULL, NULL, NULL, m_pOptions, |
+ pItem->m_pObjectList->m_Transparency, FALSE, NULL); |
m_pDevice->SaveState(); |
m_ClipRect = m_pDevice->GetClipBox(); |
CFX_AffineMatrix device2object; |
@@ -1110,11 +1100,11 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) |
CPDF_PageObject* pCurObj = pItem->m_pObjectList->GetObjectAt(m_ObjectPos); |
if (pCurObj && pCurObj->m_Left <= m_ClipRect.right && pCurObj->m_Right >= m_ClipRect.left && |
pCurObj->m_Bottom <= m_ClipRect.top && pCurObj->m_Top >= m_ClipRect.bottom) { |
- if (m_pRenderer->ContinueSingleObject(pCurObj, &pItem->m_Matrix, pPause)) { |
+ if (m_pRenderStatus->ContinueSingleObject(pCurObj, &pItem->m_Matrix, pPause)) { |
return; |
} |
- if (pCurObj->m_Type == PDFPAGE_IMAGE && m_pRenderer->m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) { |
- m_pContext->GetPageCache()->CacheOptimization(m_pRenderer->m_Options.m_dwLimitCacheSize); |
+ if (pCurObj->m_Type == PDFPAGE_IMAGE && m_pRenderStatus->m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) { |
+ m_pContext->GetPageCache()->CacheOptimization(m_pRenderStatus->m_Options.m_dwLimitCacheSize); |
} |
if (pCurObj->m_Type == PDFPAGE_FORM || pCurObj->m_Type == PDFPAGE_SHADING) { |
objs_to_go = 0; |
@@ -1134,8 +1124,7 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) |
if (!pItem->m_pObjectList->IsParsed()) { |
return; |
} |
- delete m_pRenderer; |
- m_pRenderer = NULL; |
+ m_pRenderStatus.reset(); |
m_pDevice->RestoreState(); |
m_ObjectPos = NULL; |
m_PrevLastPos = NULL; |