diff options
author | caryclark <caryclark@google.com> | 2016-11-22 12:44:25 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-11-22 12:44:25 -0800 |
commit | 687fbde2e4ee13637cb3fd9b1fec39a436ef73d7 (patch) | |
tree | 9c0d588a6494957b1bfeb12944c6f41e07a01711 /core/fpdfapi/render | |
parent | 89a2d92549d25df6786d53de5671eb141e1fd3e2 (diff) | |
download | pdfium-687fbde2e4ee13637cb3fd9b1fec39a436ef73d7.tar.xz |
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
Diffstat (limited to 'core/fpdfapi/render')
-rw-r--r-- | core/fpdfapi/render/cpdf_renderstatus.cpp | 15 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_renderstatus.h | 4 |
2 files changed, 6 insertions, 13 deletions
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<CFX_DIBitmap> 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; |