Chromium Code Reviews| Index: core/fpdfapi/fpdf_render/fpdf_render.cpp |
| diff --git a/core/fpdfapi/fpdf_render/fpdf_render.cpp b/core/fpdfapi/fpdf_render/fpdf_render.cpp |
| index 7df6b9a4b23423e2f057f06b415dc822998a83da..8d55926284e8ee24b82a7f027f2c8621a39d4082 100644 |
| --- a/core/fpdfapi/fpdf_render/fpdf_render.cpp |
| +++ b/core/fpdfapi/fpdf_render/fpdf_render.cpp |
| @@ -249,7 +249,7 @@ void CPDF_RenderStatus::RenderObjectList( |
| #endif |
| } |
| -void CPDF_RenderStatus::RenderSingleObject(const CPDF_PageObject* pObj, |
| +void CPDF_RenderStatus::RenderSingleObject(CPDF_PageObject* pObj, |
| const CFX_Matrix* pObj2Device) { |
| #if defined _SKIA_SUPPORT_ |
| DebugVerifyDeviceIsPreMultiplied(); |
| @@ -274,7 +274,7 @@ void CPDF_RenderStatus::RenderSingleObject(const CPDF_PageObject* pObj, |
| #endif |
| } |
| -FX_BOOL CPDF_RenderStatus::ContinueSingleObject(const CPDF_PageObject* pObj, |
| +FX_BOOL CPDF_RenderStatus::ContinueSingleObject(CPDF_PageObject* pObj, |
| const CFX_Matrix* pObj2Device, |
| IFX_Pause* pPause) { |
| if (m_pImageRenderer) { |
| @@ -335,7 +335,7 @@ FX_BOOL CPDF_RenderStatus::GetObjectClippedRect(const CPDF_PageObject* pObj, |
| return rect.IsEmpty(); |
| } |
| -void CPDF_RenderStatus::ProcessObjectNoClip(const CPDF_PageObject* pObj, |
| +void CPDF_RenderStatus::ProcessObjectNoClip(CPDF_PageObject* pObj, |
| const CFX_Matrix* pObj2Device) { |
| #if defined _SKIA_SUPPORT_ |
| DebugVerifyDeviceIsPreMultiplied(); |
| @@ -365,7 +365,7 @@ void CPDF_RenderStatus::ProcessObjectNoClip(const CPDF_PageObject* pObj, |
| #endif |
| } |
| -FX_BOOL CPDF_RenderStatus::DrawObjWithBlend(const CPDF_PageObject* pObj, |
| +FX_BOOL CPDF_RenderStatus::DrawObjWithBlend(CPDF_PageObject* pObj, |
| const CFX_Matrix* pObj2Device) { |
| FX_BOOL bRet = FALSE; |
| switch (pObj->GetType()) { |
| @@ -388,7 +388,8 @@ void CPDF_RenderStatus::GetScaledMatrix(CFX_Matrix& matrix) const { |
| matrix.a *= FXSYS_fabs(dCTM.a); |
| matrix.d *= FXSYS_fabs(dCTM.d); |
| } |
| -void CPDF_RenderStatus::DrawObjWithBackground(const CPDF_PageObject* pObj, |
| + |
| +void CPDF_RenderStatus::DrawObjWithBackground(CPDF_PageObject* pObj, |
| const CFX_Matrix* pObj2Device) { |
| FX_RECT rect; |
| if (GetObjectClippedRect(pObj, pObj2Device, FALSE, rect)) { |
| @@ -462,7 +463,7 @@ FX_BOOL IsAvailableMatrix(const CFX_Matrix& matrix) { |
| return TRUE; |
| } |
| -FX_BOOL CPDF_RenderStatus::ProcessPath(const CPDF_PathObject* pPathObj, |
| +FX_BOOL CPDF_RenderStatus::ProcessPath(CPDF_PathObject* pPathObj, |
| const CFX_Matrix* pObj2Device) { |
| int FillType = pPathObj->m_FillType; |
| FX_BOOL bStroke = pPathObj->m_bStroke; |
| @@ -485,9 +486,10 @@ FX_BOOL CPDF_RenderStatus::ProcessPath(const CPDF_PathObject* pPathObj, |
| FillType |= FXFILL_NOPATHSMOOTH; |
| if (bStroke) |
| FillType |= FX_FILL_STROKE; |
| - const CPDF_GeneralStateData* pGeneralData = |
| - static_cast<const CPDF_PageObject*>(pPathObj)->m_GeneralState.GetObject(); |
| - if (pGeneralData && pGeneralData->m_StrokeAdjust) |
| + |
| + const CPDF_PageObject* pPageObj = |
| + static_cast<const CPDF_PageObject*>(pPathObj); |
| + if (pPageObj->m_GeneralState.GetStrokeAdjust()) |
| FillType |= FX_STROKE_ADJUST; |
| if (m_pType3Char) |
| FillType |= FX_FILL_TEXT_MODE; |
| @@ -505,7 +507,8 @@ CPDF_TransferFunc* CPDF_RenderStatus::GetTransferFunc(CPDF_Object* pObj) const { |
| CPDF_DocRenderData* pDocCache = m_pContext->GetDocument()->GetRenderData(); |
| return pDocCache ? pDocCache->GetTransferFunc(pObj) : nullptr; |
| } |
| -FX_ARGB CPDF_RenderStatus::GetFillArgb(const CPDF_PageObject* pObj, |
| + |
| +FX_ARGB CPDF_RenderStatus::GetFillArgb(CPDF_PageObject* pObj, |
| FX_BOOL bType3) const { |
| const CPDF_ColorStateData* pColorData = pObj->m_ColorState.GetObject(); |
| if (m_pType3Char && !bType3 && |
| @@ -521,25 +524,19 @@ FX_ARGB CPDF_RenderStatus::GetFillArgb(const CPDF_PageObject* pObj, |
| if (rgb == (uint32_t)-1) { |
| return 0; |
| } |
| - const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState.GetObject(); |
| - int alpha; |
| - if (pGeneralData) { |
| - alpha = (int32_t)(pGeneralData->m_FillAlpha * 255); |
| - if (pGeneralData->m_pTR) { |
| - if (!pGeneralData->m_pTransferFunc) { |
| - ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = |
| - GetTransferFunc(pGeneralData->m_pTR); |
| - } |
| - if (pGeneralData->m_pTransferFunc) { |
| - rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb); |
| - } |
| + int32_t alpha = (int32_t)(pObj->m_GeneralState.GetFillAlpha() * 255); |
|
Lei Zhang
2016/09/02 22:00:43
Get rid of C-style casts here and below.
Tom Sepez
2016/09/02 22:09:57
Done.
|
| + if (pObj->m_GeneralState.GetTR()) { |
| + if (!pObj->m_GeneralState.GetTransferFunc()) { |
| + pObj->m_GeneralState.SetTransferFunc( |
| + GetTransferFunc(pObj->m_GeneralState.GetTR())); |
| } |
| - } else { |
| - alpha = 255; |
| + if (pObj->m_GeneralState.GetTransferFunc()) |
| + rgb = pObj->m_GeneralState.GetTransferFunc()->TranslateColor(rgb); |
| } |
| return m_Options.TranslateColor(ArgbEncode(alpha, rgb)); |
| } |
| -FX_ARGB CPDF_RenderStatus::GetStrokeArgb(const CPDF_PageObject* pObj) const { |
| + |
| +FX_ARGB CPDF_RenderStatus::GetStrokeArgb(CPDF_PageObject* pObj) const { |
| const CPDF_ColorStateData* pColorData = pObj->m_ColorState.GetObject(); |
| if (m_pType3Char && (!m_pType3Char->m_bColored || |
| (m_pType3Char->m_bColored && |
| @@ -553,21 +550,15 @@ FX_ARGB CPDF_RenderStatus::GetStrokeArgb(const CPDF_PageObject* pObj) const { |
| if (rgb == (uint32_t)-1) { |
| return 0; |
| } |
| - const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState.GetObject(); |
| - int alpha; |
| - if (pGeneralData) { |
| - alpha = (int32_t)(pGeneralData->m_StrokeAlpha * 255); |
| - if (pGeneralData->m_pTR) { |
| - if (!pGeneralData->m_pTransferFunc) { |
| - ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = |
| - GetTransferFunc(pGeneralData->m_pTR); |
| - } |
| - if (pGeneralData->m_pTransferFunc) { |
| - rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb); |
| - } |
| + int32_t alpha = |
| + (int32_t)(pObj->m_GeneralState.GetStrokeAlpha() * 255); // not rounded. |
| + if (pObj->m_GeneralState.GetTR()) { |
| + if (!pObj->m_GeneralState.GetTransferFunc()) { |
| + pObj->m_GeneralState.SetTransferFunc( |
| + GetTransferFunc(pObj->m_GeneralState.GetTR())); |
| } |
| - } else { |
| - alpha = 255; |
| + if (pObj->m_GeneralState.GetTransferFunc()) |
| + rgb = pObj->m_GeneralState.GetTransferFunc()->TranslateColor(rgb); |
| } |
| return m_Options.TranslateColor(ArgbEncode(alpha, rgb)); |
| } |
| @@ -675,20 +666,17 @@ FX_BOOL CPDF_RenderStatus::SelectClipPath(const CPDF_PathObject* pPathObj, |
| return m_pDevice->SetClip_PathFill(pPathObj->m_Path.GetObject(), &path_matrix, |
| fill_mode); |
| } |
| -FX_BOOL CPDF_RenderStatus::ProcessTransparency(const CPDF_PageObject* pPageObj, |
| +FX_BOOL CPDF_RenderStatus::ProcessTransparency(CPDF_PageObject* pPageObj, |
| const CFX_Matrix* pObj2Device) { |
| #if defined _SKIA_SUPPORT_ |
| DebugVerifyDeviceIsPreMultiplied(); |
| #endif |
| - const CPDF_GeneralStateData* pGeneralState = |
| - pPageObj->m_GeneralState.GetObject(); |
| - int blend_type = |
| - pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL; |
| - if (blend_type == FXDIB_BLEND_UNSUPPORTED) { |
| + int blend_type = pPageObj->m_GeneralState.GetBlendType(); |
| + if (blend_type == FXDIB_BLEND_UNSUPPORTED) |
| return TRUE; |
| - } |
| + |
| CPDF_Dictionary* pSMaskDict = |
| - pGeneralState ? ToDictionary(pGeneralState->m_pSoftMask) : nullptr; |
| + ToDictionary(pPageObj->m_GeneralState.GetSoftMask()); |
| if (pSMaskDict) { |
| if (pPageObj->IsImage() && |
| pPageObj->AsImage()->GetImage()->GetDict()->KeyExist("SMask")) { |
| @@ -701,11 +689,7 @@ FX_BOOL CPDF_RenderStatus::ProcessTransparency(const CPDF_PageObject* pPageObj, |
| FX_BOOL bGroupTransparent = FALSE; |
| if (pPageObj->IsForm()) { |
| const CPDF_FormObject* pFormObj = pPageObj->AsForm(); |
| - const CPDF_GeneralStateData* pStateData = |
| - pFormObj->m_GeneralState.GetObject(); |
| - if (pStateData) { |
| - group_alpha = pStateData->m_FillAlpha; |
| - } |
| + group_alpha = pFormObj->m_GeneralState.GetFillAlpha(); |
| Transparency = pFormObj->m_pForm->m_Transparency; |
| bGroupTransparent = !!(Transparency & PDFTRANS_ISOLATED); |
| if (pFormObj->m_pForm->m_pFormDict) { |
| @@ -717,7 +701,8 @@ FX_BOOL CPDF_RenderStatus::ProcessTransparency(const CPDF_PageObject* pPageObj, |
| m_pDevice->GetDeviceClass() == FXDC_DISPLAY && |
| !(m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)); |
| if ((m_Options.m_Flags & RENDER_OVERPRINT) && pPageObj->IsImage() && |
| - pGeneralState && pGeneralState->m_FillOP && pGeneralState->m_StrokeOP) { |
| + pPageObj->m_GeneralState.GetFillOP() && |
| + pPageObj->m_GeneralState.GetStrokeOP()) { |
| CPDF_Document* pDocument = nullptr; |
| CPDF_Page* pPage = nullptr; |
| if (m_pContext->GetPageCache()) { |
| @@ -819,7 +804,7 @@ FX_BOOL CPDF_RenderStatus::ProcessTransparency(const CPDF_PageObject* pPageObj, |
| m_bStopped = bitmap_render.m_bStopped; |
| if (pSMaskDict) { |
| CFX_Matrix smask_matrix; |
| - FXSYS_memcpy(&smask_matrix, pGeneralState->m_SMaskMatrix, |
| + FXSYS_memcpy(&smask_matrix, pPageObj->m_GeneralState.GetSMaskMatrix(), |
|
Lei Zhang
2016/09/02 22:00:43
The only other |m_SMaskMatrix| usage.
Tom Sepez
2016/09/02 22:09:57
Ok, I've got a follow-up started already where I'v
|
| sizeof smask_matrix); |
| smask_matrix.Concat(*pObj2Device); |
| std::unique_ptr<CFX_DIBSource> pSMaskSource( |