Index: fpdfsdk/fpdfview.cpp |
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp |
index c5b13f850d42e343342c1de9ae495de1af523122..62cafa0781cea2e59ffbcc404142df503cac9a30 100644 |
--- a/fpdfsdk/fpdfview.cpp |
+++ b/fpdfsdk/fpdfview.cpp |
@@ -575,43 +575,37 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, |
CPDF_PageRenderContext* pContext = new CPDF_PageRenderContext; |
pPage->SetRenderContext(WrapUnique(pContext)); |
- CFX_DIBitmap* pBitmap = nullptr; |
- FX_BOOL bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); |
- FX_BOOL bHasImageMask = pPage->HasImageMask(); |
- if (bBackgroundAlphaNeeded || bHasImageMask) { |
- pBitmap = new CFX_DIBitmap; |
+ std::unique_ptr<CFX_DIBitmap> pBitmap; |
+ const bool bNewBitmap = |
+ pPage->BackgroundAlphaNeeded() || pPage->HasImageMask(); |
+ if (bNewBitmap) { |
+ pBitmap = WrapUnique(new CFX_DIBitmap); |
pBitmap->Create(size_x, size_y, FXDIB_Argb); |
pBitmap->Clear(0x00ffffff); |
CFX_FxgeDevice* pDevice = new CFX_FxgeDevice; |
- pContext->m_pDevice.reset(pDevice); |
- pDevice->Attach(pBitmap, false, nullptr, false); |
+ pContext->m_pDevice = WrapUnique(pDevice); |
+ pDevice->Attach(pBitmap.get(), false, nullptr, false); |
} else { |
- pContext->m_pDevice.reset(new CFX_WindowsDevice(dc)); |
+ pContext->m_pDevice = WrapUnique(new CFX_WindowsDevice(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) { |
+ 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.get(), 0, 0, |
+ FXDIB_BLEND_NORMAL, nullptr, FALSE, nullptr); |
+ WinDC.StretchDIBits(pDst.get(), 0, 0, size_x, size_y); |
+ } else { |
+ WinDC.SetDIBits(pBitmap.get(), 0, 0); |
} |
} |
- if (bBackgroundAlphaNeeded || bHasImageMask) |
- delete pBitmap; |
pPage->SetRenderContext(std::unique_ptr<CPDF_PageRenderContext>()); |
} |