summaryrefslogtreecommitdiff
path: root/fpdfsdk
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2017-04-21 14:11:26 -0700
committerChromium commit bot <commit-bot@chromium.org>2017-04-21 21:42:11 +0000
commit1629f609d3722f25491bbbb53b2cce97a03a5867 (patch)
tree20aad3c57a05c85d378a04e6e89897e35819c3a0 /fpdfsdk
parent0748d3cb67926bfd38d3d67901fdda87109c6895 (diff)
downloadpdfium-1629f609d3722f25491bbbb53b2cce97a03a5867.tar.xz
Add CFX_RenderDevice::AutoRestorer()chromium/3078
Avoid cleanup on every return path. Change-Id: I6978adb6f31020d812ac88c5d46c703d1461d373 Reviewed-on: https://pdfium-review.googlesource.com/4435 Reviewed-by: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'fpdfsdk')
-rw-r--r--fpdfsdk/fpdfformfill.cpp54
-rw-r--r--fpdfsdk/fxedit/fxet_edit.cpp4
2 files changed, 28 insertions, 30 deletions
diff --git a/fpdfsdk/fpdfformfill.cpp b/fpdfsdk/fpdfformfill.cpp
index 6610f81c65..a050dc0161 100644
--- a/fpdfsdk/fpdfformfill.cpp
+++ b/fpdfsdk/fpdfformfill.cpp
@@ -115,37 +115,37 @@ void FFLCommon(FPDF_FORMHANDLE hHandle,
#endif
CFX_RetainPtr<CFX_DIBitmap> holder(CFXBitmapFromFPDFBitmap(bitmap));
pDevice->Attach(holder, false, nullptr, false);
- pDevice->SaveState();
- pDevice->SetClip_Rect(clip);
-
- CPDF_RenderOptions options;
- if (flags & FPDF_LCD_TEXT)
- options.m_Flags |= RENDER_CLEARTYPE;
- else
- options.m_Flags &= ~RENDER_CLEARTYPE;
-
- // Grayscale output
- if (flags & FPDF_GRAYSCALE) {
- options.m_ColorMode = RENDER_COLOR_GRAY;
- options.m_ForeColor = 0;
- options.m_BackColor = 0xffffff;
- }
- options.m_AddFlags = flags >> 8;
- options.m_bDrawAnnots = flags & FPDF_ANNOT;
+ {
+ CFX_RenderDevice::StateRestorer restorer(pDevice.get());
+ pDevice->SetClip_Rect(clip);
+
+ CPDF_RenderOptions options;
+ if (flags & FPDF_LCD_TEXT)
+ options.m_Flags |= RENDER_CLEARTYPE;
+ else
+ options.m_Flags &= ~RENDER_CLEARTYPE;
+
+ // Grayscale output
+ if (flags & FPDF_GRAYSCALE) {
+ options.m_ColorMode = RENDER_COLOR_GRAY;
+ options.m_ForeColor = 0;
+ options.m_BackColor = 0xffffff;
+ }
+ options.m_AddFlags = flags >> 8;
+ options.m_bDrawAnnots = flags & FPDF_ANNOT;
#ifdef PDF_ENABLE_XFA
- options.m_pOCContext =
- pdfium::MakeRetain<CPDF_OCContext>(pPDFDoc, CPDF_OCContext::View);
- if (CPDFSDK_PageView* pPageView = pFormFillEnv->GetPageView(pPage, true))
- pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options, clip);
+ options.m_pOCContext =
+ pdfium::MakeRetain<CPDF_OCContext>(pPDFDoc, CPDF_OCContext::View);
+ if (CPDFSDK_PageView* pPageView = pFormFillEnv->GetPageView(pPage, true))
+ pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options, clip);
#else // PDF_ENABLE_XFA
- options.m_pOCContext = pdfium::MakeRetain<CPDF_OCContext>(
- pPage->m_pDocument, CPDF_OCContext::View);
- if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, pPage))
- pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options);
+ options.m_pOCContext = pdfium::MakeRetain<CPDF_OCContext>(
+ pPage->m_pDocument, CPDF_OCContext::View);
+ if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, pPage))
+ pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options);
#endif // PDF_ENABLE_XFA
-
- pDevice->RestoreState(false);
+ }
#ifdef _SKIA_SUPPORT_PATHS_
pDevice->Flush();
holder->UnPreMultiply();
diff --git a/fpdfsdk/fxedit/fxet_edit.cpp b/fpdfsdk/fxedit/fxet_edit.cpp
index 5b84c9b95e..cf4fdc3d91 100644
--- a/fpdfsdk/fxedit/fxet_edit.cpp
+++ b/fpdfsdk/fxedit/fxet_edit.cpp
@@ -681,7 +681,7 @@ void CFX_Edit::DrawEdit(CFX_RenderDevice* pDevice,
CFX_ByteTextBuf sTextBuf;
int32_t nFontIndex = -1;
CFX_PointF ptBT;
- pDevice->SaveState();
+ CFX_RenderDevice::StateRestorer restorer(pDevice);
if (!rcClip.IsEmpty()) {
CFX_FloatRect rcTemp = rcClip;
pUser2Device->TransformRect(rcTemp);
@@ -770,8 +770,6 @@ void CFX_Edit::DrawEdit(CFX_RenderDevice* pDevice,
sTextBuf.MakeString(), crOldFill, nHorzScale);
}
}
-
- pDevice->RestoreState(false);
}
CFX_Edit::CFX_Edit()