Remove out parameters from CPDF_RenderStatus::GetBackdrop(). Add another method to get these values independent of the backdrop. Change-Id: Ie251ab38c77a5b02e982209dc8612b9e4e29fbd1 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/82254 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index dd7b67c..ea817a2 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -733,16 +733,16 @@ return true; } -RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::GetBackdrop( - const CPDF_PageObject* pObj, - const FX_RECT& rect, - bool bBackAlphaRequired, - int* left, - int* top) { +FX_RECT CPDF_RenderStatus::GetClippedBBox(const FX_RECT& rect) const { FX_RECT bbox = rect; bbox.Intersect(m_pDevice->GetClipBox()); - *left = bbox.left; - *top = bbox.top; + return bbox; +} + +RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::GetBackdrop( + const CPDF_PageObject* pObj, + const FX_RECT& bbox, + bool bBackAlphaRequired) { int width = bbox.Width(); int height = bbox.Height(); auto pBackdrop = pdfium::MakeRetain<CFX_DIBitmap>(); @@ -761,11 +761,11 @@ bNeedDraw = !(m_pDevice->GetRenderCaps() & FXRC_GET_BITS); if (!bNeedDraw) { - m_pDevice->GetDIBits(pBackdrop, *left, *top); + m_pDevice->GetDIBits(pBackdrop, bbox.left, bbox.top); return pBackdrop; } CFX_Matrix FinalMatrix = m_DeviceMatrix; - FinalMatrix.Translate(-*left, -*top); + FinalMatrix.Translate(-bbox.left, -bbox.top); pBackdrop->Clear(pBackdrop->IsAlphaFormat() ? 0 : 0xffffffff); CFX_DefaultRenderDevice device; @@ -1341,23 +1341,20 @@ } return; } - int back_left; - int back_top; - FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), - top + pDIBitmap->GetHeight()); + FX_RECT bbox = GetClippedBBox(FX_RECT(left, top, left + pDIBitmap->GetWidth(), + top + pDIBitmap->GetHeight())); RetainPtr<CFX_DIBitmap> pBackdrop = GetBackdrop( - m_pCurObj.Get(), rect, blend_mode != BlendMode::kNormal && bIsolated, - &back_left, &back_top); + m_pCurObj.Get(), bbox, blend_mode != BlendMode::kNormal && bIsolated); if (!pBackdrop) return; if (pDIBitmap->IsMaskFormat()) { - pBackdrop->CompositeMask(left - back_left, top - back_top, + pBackdrop->CompositeMask(left - bbox.left, top - bbox.top, pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), pDIBitmap, mask_argb, 0, 0, blend_mode, nullptr, false); } else { - pBackdrop->CompositeBitmap(left - back_left, top - back_top, + pBackdrop->CompositeBitmap(left - bbox.left, top - bbox.top, pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), pDIBitmap, 0, 0, blend_mode, nullptr, false); } @@ -1370,7 +1367,7 @@ pBackdrop->GetHeight(), pBackdrop, 0, 0, BlendMode::kNormal, nullptr, false); pBackdrop = std::move(pBackdrop1); - m_pDevice->SetDIBits(pBackdrop, back_left, back_top); + m_pDevice->SetDIBits(pBackdrop, bbox.left, bbox.top); } RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask(
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h index f8b31d4..e42cda9 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.h +++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -165,11 +165,10 @@ bool stroke); bool ProcessForm(const CPDF_FormObject* pFormObj, const CFX_Matrix& mtObj2Device); + FX_RECT GetClippedBBox(const FX_RECT& rect) const; RetainPtr<CFX_DIBitmap> GetBackdrop(const CPDF_PageObject* pObj, const FX_RECT& rect, - bool bBackAlphaRequired, - int* left, - int* top); + bool bBackAlphaRequired); RetainPtr<CFX_DIBitmap> LoadSMask(CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_Matrix& mtMatrix);