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 0023ee92dea26231f811d7731448329a30bef0d2..147de51f4df1a709c5d9cd21d68f7cf919c46de1 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
@@ -244,29 +244,24 @@ void CPDF_RenderStatus::RenderObjectList( |
CFX_Matrix device2object; |
device2object.SetReverse(*pObj2Device); |
device2object.TransformRect(clip_rect); |
- int index = 0; |
- FX_POSITION pos = pObjectHolder->GetPageObjectList()->GetHeadPosition(); |
- while (pos) { |
- index++; |
- CPDF_PageObject* pCurObj = |
- pObjectHolder->GetPageObjectList()->GetNextObject(pos); |
- if (pCurObj == m_pStopObj) { |
+ |
+ for (const auto& pCurObj : *pObjectHolder->GetPageObjectList()) { |
+ if (pCurObj.get() == m_pStopObj) { |
m_bStopped = TRUE; |
return; |
} |
- if (!pCurObj) { |
+ if (!pCurObj) |
continue; |
- } |
- if (!pCurObj || pCurObj->m_Left > clip_rect.right || |
+ |
+ if (pCurObj->m_Left > clip_rect.right || |
pCurObj->m_Right < clip_rect.left || |
pCurObj->m_Bottom > clip_rect.top || |
pCurObj->m_Top < clip_rect.bottom) { |
continue; |
} |
- RenderSingleObject(pCurObj, pObj2Device); |
- if (m_bStopped) { |
+ RenderSingleObject(pCurObj.get(), pObj2Device); |
+ if (m_bStopped) |
return; |
- } |
} |
} |
void CPDF_RenderStatus::RenderSingleObject(const CPDF_PageObject* pObj, |
@@ -1037,8 +1032,7 @@ CPDF_ProgressiveRenderer::CPDF_ProgressiveRenderer( |
m_pDevice(pDevice), |
m_pOptions(pOptions), |
m_LayerIndex(0), |
- m_pCurrentLayer(nullptr), |
- m_LastObjectRendered(nullptr) {} |
+ m_pCurrentLayer(nullptr) {} |
CPDF_ProgressiveRenderer::~CPDF_ProgressiveRenderer() { |
if (m_pRenderStatus) |
@@ -1062,7 +1056,8 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
return; |
} |
m_pCurrentLayer = m_pContext->GetLayer(m_LayerIndex); |
- m_LastObjectRendered = nullptr; |
+ m_LastObjectRendered = |
+ m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->end(); |
m_pRenderStatus.reset(new CPDF_RenderStatus()); |
m_pRenderStatus->Initialize( |
m_pContext, m_pDevice, NULL, NULL, NULL, NULL, m_pOptions, |
@@ -1073,19 +1068,18 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
device2object.SetReverse(m_pCurrentLayer->m_Matrix); |
device2object.TransformRect(m_ClipRect); |
} |
- FX_POSITION pos; |
- if (m_LastObjectRendered) { |
- pos = m_LastObjectRendered; |
- m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->GetNextObject(pos); |
+ CPDF_PageObjectList::iterator iter; |
+ CPDF_PageObjectList::iterator iterEnd = |
+ m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->end(); |
+ if (m_LastObjectRendered != iterEnd) { |
+ iter = m_LastObjectRendered; |
+ ++iter; |
} else { |
- pos = m_pCurrentLayer->m_pObjectHolder->GetPageObjectList() |
- ->GetHeadPosition(); |
+ iter = m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->begin(); |
} |
int nObjsToGo = kStepLimit; |
- while (pos) { |
- CPDF_PageObject* pCurObj = |
- m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->GetObjectAt( |
- pos); |
+ while (iter != iterEnd) { |
+ CPDF_PageObject* pCurObj = iter->get(); |
if (pCurObj && pCurObj->m_Left <= m_ClipRect.right && |
pCurObj->m_Right >= m_ClipRect.left && |
pCurObj->m_Bottom <= m_ClipRect.top && |
@@ -1106,19 +1100,18 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
--nObjsToGo; |
} |
} |
- m_LastObjectRendered = pos; |
+ m_LastObjectRendered = iter; |
if (nObjsToGo == 0) { |
if (pPause && pPause->NeedToPauseNow()) |
return; |
nObjsToGo = kStepLimit; |
} |
- m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->GetNextObject(pos); |
+ ++iter; |
} |
if (m_pCurrentLayer->m_pObjectHolder->IsParsed()) { |
m_pRenderStatus.reset(); |
m_pDevice->RestoreState(); |
m_pCurrentLayer = nullptr; |
- m_LastObjectRendered = nullptr; |
m_LayerIndex++; |
if (pPause && pPause->NeedToPauseNow()) { |
return; |