From 687fbde2e4ee13637cb3fd9b1fec39a436ef73d7 Mon Sep 17 00:00:00 2001 From: caryclark Date: Tue, 22 Nov 2016 12:44:25 -0800 Subject: handle antialiased rendering as premultiplied Transparencies and bitmap patterns need to be unpremultiplied after Skia renders them so that PDFium can use its own compositing. Also added some linear (i.e. axial) gradient support, although its unclear if any of the test corpus uses this feature. R=dsinclair@chromium.org Review-Url: https://codereview.chromium.org/2520073003 --- core/fpdfapi/render/cpdf_renderstatus.cpp | 15 ++++++--------- core/fpdfapi/render/cpdf_renderstatus.h | 4 ---- 2 files changed, 6 insertions(+), 13 deletions(-) (limited to 'core/fpdfapi/render') diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index d2a17d27fc..aad9af04e3 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -893,6 +893,9 @@ std::unique_ptr DrawPatternBitmap( CPDF_RenderContext context(pDoc, pCache); context.AppendLayer(pPattern->form(), &mtPattern2Bitmap); context.Render(&bitmap_device, &options, nullptr); +#if defined _SKIA_SUPPORT_PATHS_ + pBitmap->UnPreMultiply(); +#endif return pBitmap; } @@ -1136,9 +1139,6 @@ void CPDF_RenderStatus::ProcessObjectNoClip(CPDF_PageObject* pObj, #if defined _SKIA_SUPPORT_ DebugVerifyDeviceIsPreMultiplied(); #endif -#if defined _SKIA_SUPPORT_PATHS_ - UnPreMultiplyDevice(); -#endif } bool CPDF_RenderStatus::DrawObjWithBlend(CPDF_PageObject* pObj, @@ -1547,6 +1547,9 @@ bool CPDF_RenderStatus::ProcessTransparency(CPDF_PageObject* pPageObj, nullptr, nullptr, &m_Options, 0, m_bDropObjects, pFormResource, true); bitmap_render.ProcessObjectNoClip(pPageObj, &new_matrix); +#if defined _SKIA_SUPPORT_PATHS_ + bitmap->UnPreMultiply(); +#endif m_bStopped = bitmap_render.m_bStopped; if (pSMaskDict) { CFX_Matrix smask_matrix = *pPageObj->m_GeneralState.GetSMaskMatrix(); @@ -1650,12 +1653,6 @@ void CPDF_RenderStatus::DebugVerifyDeviceIsPreMultiplied() const { } #endif -#if defined _SKIA_SUPPORT_PATHS_ -void CPDF_RenderStatus::UnPreMultiplyDevice() { - m_pDevice->UnPreMultiplyDevice(); -} -#endif - bool CPDF_RenderStatus::ProcessText(CPDF_TextObject* textobj, const CFX_Matrix* pObj2Device, CFX_PathData* pClippingPath) { diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h index f74f0ce9ae..b7e9fa6d0a 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.h +++ b/core/fpdfapi/render/cpdf_renderstatus.h @@ -66,10 +66,6 @@ class CPDF_RenderStatus { void DebugVerifyDeviceIsPreMultiplied() const; #endif -#if defined _SKIA_SUPPORT_PATHS_ - void UnPreMultiplyDevice(); -#endif - CPDF_RenderOptions m_Options; CPDF_Dictionary* m_pFormResource; CPDF_Dictionary* m_pPageResource; -- cgit v1.2.3