FX_BOOL CPDF_RenderStatus::ProcessPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device) { int FillType = pPathObj->m_FillType; FX_BOOL bStroke = pPathObj->m_bStroke; ProcessPathPattern(pPathObj, pObj2Device, FillType, bStroke); if (FillType == 0 && !bStroke) { return TRUE; } FX_DWORD fill_argb = 0; if (FillType) { fill_argb = GetFillArgb(pPathObj); } FX_DWORD stroke_argb = 0; if (bStroke) { stroke_argb = GetStrokeArgb(pPathObj); } CFX_AffineMatrix path_matrix = pPathObj->m_Matrix; path_matrix.Concat(*pObj2Device); if (!IsAvailableMatrix(path_matrix)) { return TRUE; } if (FillType && (m_Options.m_Flags & RENDER_RECT_AA)) { FillType |= FXFILL_RECT_AA; } if (m_Options.m_Flags & RENDER_FILL_FULLCOVER) { FillType |= FXFILL_FULLCOVER; } if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) { FillType |= FXFILL_NOPATHSMOOTH; } if (bStroke) { FillType |= FX_FILL_STROKE; } const CPDF_GeneralStateData* pGeneralData = ((CPDF_PageObject*)pPathObj)->m_GeneralState; if (pGeneralData && pGeneralData->m_StrokeAdjust) { FillType |= FX_STROKE_ADJUST; } if (m_pType3Char) { FillType |= FX_FILL_TEXT_MODE; } CFX_GraphStateData graphState(*pPathObj->m_GraphState); if (m_Options.m_Flags & RENDER_THINLINE) { graphState.m_LineWidth = 0; } return m_pDevice->DrawPath(pPathObj->m_Path, &path_matrix, &graphState, fill_argb, stroke_argb, FillType, 0, NULL, m_curBlend); }
FX_BOOL CPDF_RenderStatus::ProcessPath(CPDF_PathObject* pPathObj, const CFX_Matrix* pObj2Device) { int FillType = pPathObj->m_FillType; FX_BOOL bStroke = pPathObj->m_bStroke; ProcessPathPattern(pPathObj, pObj2Device, FillType, bStroke); if (FillType == 0 && !bStroke) return TRUE; uint32_t fill_argb = FillType ? GetFillArgb(pPathObj) : 0; uint32_t stroke_argb = bStroke ? GetStrokeArgb(pPathObj) : 0; CFX_Matrix path_matrix = pPathObj->m_Matrix; path_matrix.Concat(*pObj2Device); if (!IsAvailableMatrix(path_matrix)) return TRUE; if (FillType && (m_Options.m_Flags & RENDER_RECT_AA)) FillType |= FXFILL_RECT_AA; if (m_Options.m_Flags & RENDER_FILL_FULLCOVER) FillType |= FXFILL_FULLCOVER; if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) FillType |= FXFILL_NOPATHSMOOTH; if (bStroke) FillType |= FX_FILL_STROKE; 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; CPDF_GraphState graphState = pPathObj->m_GraphState; if (m_Options.m_Flags & RENDER_THINLINE) graphState.SetLineWidth(0); return m_pDevice->DrawPathWithBlend( pPathObj->m_Path.GetObject(), &path_matrix, graphState.GetObject(), fill_argb, stroke_argb, FillType, m_curBlend); }