Add a helper function to generate fill rendering options. Create a helper GetFillOptionsForDrawTextPath() to generate the fill options for CPDF_TextRenderer::DrawTextPath(). Meanwhile, rename GetFillRenderOptionsHelper() to GetFillOptionsForDrawPathWithBlend() to distinguish these two helper functions. Change-Id: I4937479ff6f3cded594b472cca13cef935d08c07 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/70934 Commit-Queue: Hui Yingst <nigi@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 136e93e..676fa03 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -73,11 +73,12 @@ constexpr int kRenderMaxRecursionDepth = 64; int g_CurrentRecursionDepth = 0; -int GetFillRenderOptionsHelper(const CPDF_RenderOptions::Options& options, - const CPDF_PathObject* path_obj, - int fill_type, - bool is_stroke, - bool is_type3_char) { +int GetFillOptionsForDrawPathWithBlend( + const CPDF_RenderOptions::Options& options, + const CPDF_PathObject* path_obj, + int fill_type, + bool is_stroke, + bool is_type3_char) { int fill_options = fill_type; if (fill_type && options.bRectAA) fill_options |= FXFILL_RECT_AA; @@ -93,6 +94,23 @@ return fill_options; } +int GetFillOptionsForDrawTextPath(const CPDF_RenderOptions::Options& options, + const CPDF_TextObject* text_obj, + bool is_stroke, + bool is_fill) { + int fill_options = 0; + if (is_stroke && is_fill) { + fill_options |= FX_FILL_STROKE; + fill_options |= FX_STROKE_TEXT_MODE; + } + if (text_obj->m_GeneralState.GetStrokeAdjust()) + fill_options |= FX_STROKE_ADJUST; + if (options.bNoTextSmooth) + fill_options |= FXFILL_NOPATHSMOOTH; + + return fill_options; +} + bool IsAvailableMatrix(const CFX_Matrix& matrix) { if (matrix.a == 0 || matrix.d == 0) return matrix.b != 0 && matrix.c != 0; @@ -400,11 +418,11 @@ if (!IsAvailableMatrix(path_matrix)) return true; - int fill_options = GetFillRenderOptionsHelper(options, pPathObj, FillType, - bStroke, m_pType3Char); return m_pDevice->DrawPathWithBlend( pPathObj->path().GetObject(), &path_matrix, - pPathObj->m_GraphState.GetObject(), fill_argb, stroke_argb, fill_options, + pPathObj->m_GraphState.GetObject(), fill_argb, stroke_argb, + GetFillOptionsForDrawPathWithBlend(options, pPathObj, FillType, bStroke, + m_pType3Char), m_curBlend); } @@ -859,20 +877,13 @@ pDeviceMatrix = &device_matrix; } } - int flag = 0; - if (bStroke && bFill) { - flag |= FX_FILL_STROKE; - flag |= FX_STROKE_TEXT_MODE; - } - if (textobj->m_GeneralState.GetStrokeAdjust()) - flag |= FX_STROKE_ADJUST; - if (m_Options.GetOptions().bNoTextSmooth) - flag |= FXFILL_NOPATHSMOOTH; return CPDF_TextRenderer::DrawTextPath( m_pDevice, textobj->GetCharCodes(), textobj->GetCharPositions(), pFont.Get(), font_size, text_matrix, pDeviceMatrix, textobj->m_GraphState.GetObject(), fill_argb, stroke_argb, - pClippingPath, flag); + pClippingPath, + GetFillOptionsForDrawTextPath(m_Options.GetOptions(), textobj, bStroke, + bFill)); } text_matrix.Concat(mtObj2Device); return CPDF_TextRenderer::DrawNormalText(