Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(502)

Unified Diff: core/fpdfapi/fpdf_render/fpdf_render_image.cpp

Issue 1973913002: Clean up CFX_ImageTransformer. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: address comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/fpdfapi/fpdf_font/cpdf_type3font.cpp ('k') | core/fpdfapi/fpdf_render/fpdf_render_text.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « core/fpdfapi/fpdf_font/cpdf_type3font.cpp ('k') | core/fpdfapi/fpdf_render/fpdf_render_text.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698