summaryrefslogtreecommitdiff
path: root/core/src/fpdfapi
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-10-19 16:20:03 -0700
committerTom Sepez <tsepez@chromium.org>2015-10-19 16:20:03 -0700
commitb3b67620b9db518558f2912357581b600645ce68 (patch)
treea54ffe1f3d15d492278fc53d7bd52e52af3a708b /core/src/fpdfapi
parentd831dc7147e9895185740f551fed7abe246e2adf (diff)
downloadpdfium-b3b67620b9db518558f2912357581b600645ce68.tar.xz
Merge to XFA: Refactor progressive renderer.
Hand-application of diffs from https://codereview.chromium.org/1233453014/. This was an oversight, and was too old (pre-reformat) to apply cleanly. Checked against origin/master, only diffs are xfa related. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1416793002 .
Diffstat (limited to 'core/src/fpdfapi')
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render.cpp76
1 files changed, 31 insertions, 45 deletions
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
index be6483fc31..9db35068f9 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
@@ -1061,47 +1061,35 @@ void CPDF_RenderContext::DrawObjectList(CFX_RenderDevice* pDevice,
AppendObjectList(pObjs, pObject2Device);
Render(pDevice, pOptions);
}
-CPDF_ProgressiveRenderer::CPDF_ProgressiveRenderer() {
- m_pRenderer = NULL;
- m_pContext = NULL;
- m_pDevice = NULL;
- m_Status = Ready;
+
+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) {
}
+
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) {
- 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) {
+
+void CPDF_ProgressiveRenderer::Start(IFX_Pause* pPause) {
+ 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) {
if (m_Status != ToBeContinued) {
@@ -1122,9 +1110,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;
@@ -1139,13 +1126,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;
@@ -1162,14 +1149,14 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) {
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_pRenderStatus->m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
m_pContext->GetPageCache()->CacheOptimization(
- m_pRenderer->m_Options.m_dwLimitCacheSize);
+ m_pRenderStatus->m_Options.m_dwLimitCacheSize);
}
if (pCurObj->m_Type == PDFPAGE_FORM ||
pCurObj->m_Type == PDFPAGE_SHADING) {
@@ -1193,8 +1180,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;