Index: fpdfsdk/fpdfview.cpp |
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp |
index c5b13f850d42e343342c1de9ae495de1af523122..c33086d603c19bfd0dc0079e8162390101ac4431 100644 |
--- a/fpdfsdk/fpdfview.cpp |
+++ b/fpdfsdk/fpdfview.cpp |
@@ -576,9 +576,9 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, |
pPage->SetRenderContext(WrapUnique(pContext)); |
CFX_DIBitmap* pBitmap = nullptr; |
Tom Sepez
2016/09/27 21:25:32
Can this be an unique_ptr? It looks like it only
Lei Zhang
2016/09/27 21:49:46
Done.
|
- FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); |
- FX_BOOL bHasImageMask = pPage->HasImageMask(); |
- if (bBackgroundAlphaNeeded || bHasImageMask) { |
+ const bool bNewBitmap = |
+ pPage->BackgroundAlphaNeeded() || pPage->HasImageMask(); |
+ if (bNewBitmap) { |
pBitmap = new CFX_DIBitmap; |
pBitmap->Create(size_x, size_y, FXDIB_Argb); |
pBitmap->Clear(0x00ffffff); |
@@ -592,26 +592,23 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, |
FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, |
rotate, flags, TRUE, nullptr); |
- if (bBackgroundAlphaNeeded || bHasImageMask) { |
- if (pBitmap) { |
- CFX_WindowsDevice WinDC(dc); |
- |
- if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) { |
- CFX_DIBitmap* pDst = new CFX_DIBitmap; |
- int pitch = pBitmap->GetPitch(); |
- pDst->Create(size_x, size_y, FXDIB_Rgb32); |
- FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y); |
- pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, |
- FXDIB_BLEND_NORMAL, nullptr, FALSE, nullptr); |
- WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y); |
- delete pDst; |
- } else { |
- WinDC.SetDIBits(pBitmap, 0, 0); |
- } |
+ if (bNewBitmap) { |
+ ASSERT(pBitmap); |
+ |
+ CFX_WindowsDevice WinDC(dc); |
+ if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) { |
+ std::unique_ptr<CFX_DIBitmap> pDst = WrapUnique(new CFX_DIBitmap); |
+ int pitch = pBitmap->GetPitch(); |
+ pDst->Create(size_x, size_y, FXDIB_Rgb32); |
+ FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y); |
+ pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, |
+ FXDIB_BLEND_NORMAL, nullptr, FALSE, nullptr); |
+ WinDC.StretchDIBits(pDst.get(), 0, 0, size_x, size_y); |
+ } else { |
+ WinDC.SetDIBits(pBitmap, 0, 0); |
} |
- } |
- if (bBackgroundAlphaNeeded || bHasImageMask) |
delete pBitmap; |
+ } |
pPage->SetRenderContext(std::unique_ptr<CPDF_PageRenderContext>()); |
} |