Index: core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
index 17851b8b4b53e99f8831263ce6e28ac879485735..53c40b66eec535d22c8cc0e5f612f89225d7db98 100644 |
--- a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
+++ b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
@@ -699,6 +699,7 @@ FX_BOOL CPDF_ImageRenderer::DrawMaskedImage() { |
rect.top, m_BlendType); |
return FALSE; |
} |
+ |
FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
if (!(m_Flags & RENDER_FORCE_DOWNSAMPLE) && m_pDIBSource->GetBPP() > 1) { |
int image_size = m_pDIBSource->GetBPP() / 8 * m_pDIBSource->GetWidth() * |
@@ -710,7 +711,7 @@ FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
} |
if (m_pRenderStatus->m_pDevice->StartDIBits( |
m_pDIBSource, m_BitmapAlpha, m_FillArgb, &m_ImageMatrix, m_Flags, |
- m_DeviceHandle, 0, NULL, m_BlendType)) { |
+ m_DeviceHandle, 0, nullptr, m_BlendType)) { |
if (m_DeviceHandle) { |
m_Status = 3; |
return TRUE; |
@@ -731,30 +732,29 @@ FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox(); |
clip_box.Intersect(image_rect); |
m_Status = 2; |
- m_pTransformer = new CFX_ImageTransformer; |
- m_pTransformer->Start(m_pDIBSource, &m_ImageMatrix, m_Flags, &clip_box); |
+ m_pTransformer = new CFX_ImageTransformer(m_pDIBSource, &m_ImageMatrix, |
+ m_Flags, &clip_box); |
+ m_pTransformer->Start(); |
return TRUE; |
} |
- if (m_ImageMatrix.a < 0) { |
+ if (m_ImageMatrix.a < 0) |
dest_width = -dest_width; |
- } |
- if (m_ImageMatrix.d > 0) { |
+ |
+ if (m_ImageMatrix.d > 0) |
dest_height = -dest_height; |
- } |
- int dest_left, dest_top; |
- dest_left = dest_width > 0 ? image_rect.left : image_rect.right; |
- dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom; |
+ |
+ int dest_left = dest_width > 0 ? image_rect.left : image_rect.right; |
+ int dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom; |
if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) { |
if (m_pRenderStatus->m_pDevice->StretchDIBits( |
m_pDIBSource, dest_left, dest_top, dest_width, dest_height, m_Flags, |
- NULL, m_BlendType)) { |
+ nullptr, m_BlendType)) { |
return FALSE; |
} |
} |
if (m_pDIBSource->IsAlphaMask()) { |
- if (m_BitmapAlpha != 255) { |
+ if (m_BitmapAlpha != 255) |
m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); |
- } |
if (m_pRenderStatus->m_pDevice->StretchBitMask( |
m_pDIBSource, dest_left, dest_top, dest_width, dest_height, |
m_FillArgb, m_Flags)) { |
@@ -766,6 +766,7 @@ FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
m_Result = FALSE; |
return TRUE; |
} |
+ |
FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox(); |
FX_RECT dest_rect = clip_box; |
dest_rect.Intersect(image_rect); |
@@ -781,6 +782,7 @@ FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
} |
return FALSE; |
} |
+ |
FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() { |
if (m_pDIBSource->IsOpaqueImage()) { |
CFX_PathData path; |
@@ -824,46 +826,44 @@ FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() { |
} |
return FALSE; |
} |
+ |
FX_BOOL CPDF_ImageRenderer::Continue(IFX_Pause* pPause) { |
if (m_Status == 2) { |
- if (m_pTransformer->Continue(pPause)) { |
+ if (m_pTransformer->Continue(pPause)) |
return TRUE; |
- } |
- CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach(); |
- if (!pBitmap) { |
+ |
+ std::unique_ptr<CFX_DIBitmap> pBitmap(m_pTransformer->DetachBitmap()); |
+ if (!pBitmap) |
return FALSE; |
- } |
+ |
if (pBitmap->IsAlphaMask()) { |
- if (m_BitmapAlpha != 255) { |
+ if (m_BitmapAlpha != 255) |
m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); |
- } |
m_Result = m_pRenderStatus->m_pDevice->SetBitMask( |
- pBitmap, m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, |
- m_FillArgb); |
+ pBitmap.get(), m_pTransformer->result().left, |
+ m_pTransformer->result().top, m_FillArgb); |
} else { |
- if (m_BitmapAlpha != 255) { |
+ if (m_BitmapAlpha != 255) |
pBitmap->MultiplyAlpha(m_BitmapAlpha); |
- } |
m_Result = m_pRenderStatus->m_pDevice->SetDIBits( |
- pBitmap, m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, |
- m_BlendType); |
+ pBitmap.get(), m_pTransformer->result().left, |
+ m_pTransformer->result().top, m_BlendType); |
} |
- delete pBitmap; |
return FALSE; |
} |
- if (m_Status == 3) { |
+ if (m_Status == 3) |
return m_pRenderStatus->m_pDevice->ContinueDIBits(m_DeviceHandle, pPause); |
- } |
+ |
if (m_Status == 4) { |
- if (m_Loader.Continue(m_LoadHandle, pPause)) { |
+ if (m_Loader.Continue(m_LoadHandle, pPause)) |
return TRUE; |
- } |
- if (StartRenderDIBSource()) { |
+ |
+ if (StartRenderDIBSource()) |
return Continue(pPause); |
- } |
} |
return FALSE; |
} |
+ |
CCodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder( |
const uint8_t* src_buf, |
uint32_t src_size, |