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 5222d69fde33fb992c6b43e43b4ceef833d7100f..583b19f7ab94b4c3e407fe13d706c845114f9c92 100644 |
--- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp |
@@ -212,7 +212,7 @@ FX_BOOL CPDF_RenderStatus::Initialize(CPDF_RenderContext* pContext, |
m_GroupFamily = GroupFamily; |
m_bLoadMask = bLoadMask; |
m_pFormResource = pFormResource; |
- m_pPageResource = m_pContext->m_pPageResources; |
+ m_pPageResource = m_pContext->GetPageResources(); |
if (pInitialStates && !m_pType3Char) { |
m_InitialStates.CopyStates(*pInitialStates); |
if (pParentState) { |
@@ -538,7 +538,7 @@ FX_BOOL CPDF_RenderStatus::ProcessPath(CPDF_PathObject* pPathObj, |
} |
CPDF_TransferFunc* CPDF_RenderStatus::GetTransferFunc(CPDF_Object* pObj) const { |
ASSERT(pObj); |
- CPDF_DocRenderData* pDocCache = m_pContext->m_pDocument->GetRenderData(); |
+ CPDF_DocRenderData* pDocCache = m_pContext->GetDocument()->GetRenderData(); |
return pDocCache ? pDocCache->GetTransferFunc(pObj) : nullptr; |
} |
FX_ARGB CPDF_RenderStatus::GetFillArgb(const CPDF_PageObject* pObj, |
@@ -758,8 +758,8 @@ FX_BOOL CPDF_RenderStatus::ProcessTransparency(const CPDF_PageObject* pPageObj, |
pGeneralState->m_FillOP && pGeneralState->m_StrokeOP) { |
CPDF_Document* pDocument = NULL; |
CPDF_Page* pPage = NULL; |
- if (m_pContext->m_pPageCache) { |
- pPage = m_pContext->m_pPageCache->GetPage(); |
+ if (m_pContext->GetPageCache()) { |
+ pPage = m_pContext->GetPageCache()->GetPage(); |
pDocument = pPage->m_pDocument; |
} else { |
pDocument = ((CPDF_ImageObject*)pPageObj)->m_pImage->GetDocument(); |
@@ -956,26 +956,30 @@ CPDF_GraphicStates* CPDF_RenderStatus::CloneObjStates( |
} |
return pStates; |
} |
+ |
CPDF_RenderContext::CPDF_RenderContext(CPDF_Page* pPage) |
: m_pDocument(pPage->m_pDocument), |
m_pPageResources(pPage->m_pPageResources), |
m_pPageCache(pPage->GetRenderCache()), |
m_bFirstLayer(TRUE) {} |
+ |
CPDF_RenderContext::CPDF_RenderContext(CPDF_Document* pDoc, |
CPDF_PageRenderCache* pPageCache) |
: m_pDocument(pDoc), |
m_pPageResources(nullptr), |
m_pPageCache(pPageCache), |
m_bFirstLayer(TRUE) {} |
+ |
CPDF_RenderContext::~CPDF_RenderContext() {} |
-void CPDF_RenderContext::AppendObjectList(CPDF_PageObjectList* pObjs, |
- const CFX_Matrix* pObject2Device) { |
- _PDF_RenderItem* pItem = m_ContentList.AddSpace(); |
- pItem->m_pObjectList = pObjs; |
+ |
+void CPDF_RenderContext::AppendLayer(CPDF_PageObjectList* pObjs, |
+ const CFX_Matrix* pObject2Device) { |
+ Layer* pLayer = m_Layers.AddSpace(); |
+ pLayer->m_pObjectList = pObjs; |
if (pObject2Device) { |
- pItem->m_Matrix = *pObject2Device; |
+ pLayer->m_Matrix = *pObject2Device; |
} else { |
- pItem->m_Matrix.SetIdentity(); |
+ pLayer->m_Matrix.SetIdentity(); |
} |
} |
void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, |
@@ -987,18 +991,18 @@ void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, |
const CPDF_PageObject* pStopObj, |
const CPDF_RenderOptions* pOptions, |
const CFX_Matrix* pLastMatrix) { |
- int count = m_ContentList.GetSize(); |
+ int count = m_Layers.GetSize(); |
for (int j = 0; j < count; j++) { |
pDevice->SaveState(); |
- _PDF_RenderItem* pItem = m_ContentList.GetDataPtr(j); |
+ Layer* pLayer = m_Layers.GetDataPtr(j); |
if (pLastMatrix) { |
- CFX_Matrix FinalMatrix = pItem->m_Matrix; |
+ CFX_Matrix FinalMatrix = pLayer->m_Matrix; |
FinalMatrix.Concat(*pLastMatrix); |
CPDF_RenderStatus status; |
status.Initialize(this, pDevice, pLastMatrix, pStopObj, NULL, NULL, |
- pOptions, pItem->m_pObjectList->m_Transparency, FALSE, |
+ pOptions, pLayer->m_pObjectList->m_Transparency, FALSE, |
NULL); |
- status.RenderObjectList(pItem->m_pObjectList, &FinalMatrix); |
+ status.RenderObjectList(pLayer->m_pObjectList, &FinalMatrix); |
if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) { |
m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); |
} |
@@ -1009,8 +1013,8 @@ void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, |
} else { |
CPDF_RenderStatus status; |
status.Initialize(this, pDevice, NULL, pStopObj, NULL, NULL, pOptions, |
- pItem->m_pObjectList->m_Transparency, FALSE, NULL); |
- status.RenderObjectList(pItem->m_pObjectList, &pItem->m_Matrix); |
+ pLayer->m_pObjectList->m_Transparency, FALSE, NULL); |
+ status.RenderObjectList(pLayer->m_pObjectList, &pLayer->m_Matrix); |
if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) { |
m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize); |
} |
@@ -1022,13 +1026,6 @@ void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, |
pDevice->RestoreState(); |
} |
} |
-void CPDF_RenderContext::DrawObjectList(CFX_RenderDevice* pDevice, |
- CPDF_PageObjectList* pObjs, |
- const CFX_Matrix* pObject2Device, |
- const CPDF_RenderOptions* pOptions) { |
- AppendObjectList(pObjs, pObject2Device); |
- Render(pDevice, pOptions); |
-} |
CPDF_ProgressiveRenderer::CPDF_ProgressiveRenderer( |
CPDF_RenderContext* pContext, |
@@ -1058,23 +1055,22 @@ void CPDF_ProgressiveRenderer::Start(IFX_Pause* pPause) { |
Continue(pPause); |
} |
-#define RENDER_STEP_LIMIT 100 |
void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
if (m_Status != ToBeContinued) { |
return; |
} |
- FX_DWORD nLayers = m_pContext->m_ContentList.GetSize(); |
+ FX_DWORD nLayers = m_pContext->CountLayers(); |
for (; m_LayerIndex < nLayers; m_LayerIndex++) { |
- _PDF_RenderItem* pItem = m_pContext->m_ContentList.GetDataPtr(m_LayerIndex); |
- FX_POSITION LastPos = pItem->m_pObjectList->GetLastObjectPosition(); |
+ CPDF_RenderContext::Layer* pLayer = m_pContext->GetLayer(m_LayerIndex); |
+ FX_POSITION LastPos = pLayer->m_pObjectList->GetLastObjectPosition(); |
if (!m_ObjectPos) { |
if (LastPos == m_PrevLastPos) { |
- if (!pItem->m_pObjectList->IsParsed()) { |
- pItem->m_pObjectList->ContinueParse(pPause); |
- if (!pItem->m_pObjectList->IsParsed()) { |
+ if (!pLayer->m_pObjectList->IsParsed()) { |
+ pLayer->m_pObjectList->ContinueParse(pPause); |
+ if (!pLayer->m_pObjectList->IsParsed()) { |
return; |
} |
- LastPos = pItem->m_pObjectList->GetLastObjectPosition(); |
+ LastPos = pLayer->m_pObjectList->GetLastObjectPosition(); |
} |
} |
if (LastPos == m_PrevLastPos) { |
@@ -1088,23 +1084,23 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
} |
if (m_PrevLastPos) { |
m_ObjectPos = m_PrevLastPos; |
- pItem->m_pObjectList->GetNextObject(m_ObjectPos); |
+ pLayer->m_pObjectList->GetNextObject(m_ObjectPos); |
} else { |
- m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition(); |
+ m_ObjectPos = pLayer->m_pObjectList->GetFirstObjectPosition(); |
} |
m_PrevLastPos = LastPos; |
} |
if (!m_pRenderStatus) { |
- m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition(); |
+ m_ObjectPos = pLayer->m_pObjectList->GetFirstObjectPosition(); |
m_ObjectIndex = 0; |
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); |
+ pLayer->m_pObjectList->m_Transparency, FALSE, NULL); |
m_pDevice->SaveState(); |
m_ClipRect = m_pDevice->GetClipBox(); |
CFX_Matrix device2object; |
- device2object.SetReverse(pItem->m_Matrix); |
+ device2object.SetReverse(pLayer->m_Matrix); |
device2object.TransformRect(m_ClipRect); |
} |
int objs_to_go = CPDF_ModuleMgr::Get() |
@@ -1112,12 +1108,13 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
->GetConfig() |
->m_RenderStepLimit; |
while (m_ObjectPos) { |
- CPDF_PageObject* pCurObj = pItem->m_pObjectList->GetObjectAt(m_ObjectPos); |
+ CPDF_PageObject* pCurObj = |
+ pLayer->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_pRenderStatus->ContinueSingleObject(pCurObj, &pItem->m_Matrix, |
+ if (m_pRenderStatus->ContinueSingleObject(pCurObj, &pLayer->m_Matrix, |
pPause)) { |
return; |
} |
@@ -1134,7 +1131,7 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
} |
} |
m_ObjectIndex++; |
- pItem->m_pObjectList->GetNextObject(m_ObjectPos); |
+ pLayer->m_pObjectList->GetNextObject(m_ObjectPos); |
if (objs_to_go == 0) { |
if (pPause && pPause->NeedToPauseNow()) { |
return; |
@@ -1145,7 +1142,7 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) { |
->m_RenderStepLimit; |
} |
} |
- if (!pItem->m_pObjectList->IsParsed()) { |
+ if (!pLayer->m_pObjectList->IsParsed()) { |
return; |
} |
m_pRenderStatus.reset(); |
@@ -1163,11 +1160,12 @@ int CPDF_ProgressiveRenderer::EstimateProgress() { |
if (!m_pContext) { |
return 0; |
} |
- FX_DWORD nLayers = m_pContext->m_ContentList.GetSize(); |
- int nTotal = 0, nRendered = 0; |
+ FX_DWORD nLayers = m_pContext->CountLayers(); |
+ int nTotal = 0; |
+ int nRendered = 0; |
for (FX_DWORD layer = 0; layer < nLayers; layer++) { |
- _PDF_RenderItem* pItem = m_pContext->m_ContentList.GetDataPtr(layer); |
- int nObjs = pItem->m_pObjectList->CountObjects(); |
+ CPDF_RenderContext::Layer* pLayer = m_pContext->GetLayer(layer); |
+ int nObjs = pLayer->m_pObjectList->CountObjects(); |
if (layer == m_LayerIndex) { |
nRendered += m_ObjectIndex; |
} else if (layer < m_LayerIndex) { |