From 3f4befb2622487f3fe915ead4f78c7e3b940dec3 Mon Sep 17 00:00:00 2001 From: Henrique Nakashima Date: Tue, 6 Mar 2018 22:25:03 +0000 Subject: Remove axial gradients from XFA widgets. Most of the CPU time when moving around XFA forms is spent rendering these gradients. Bug: chromium:592748 Change-Id: I08c68c60996755a2be25243dfd2143b6cbb13af9 Reviewed-on: https://pdfium-review.googlesource.com/28090 Commit-Queue: Henrique Nakashima Reviewed-by: dsinclair --- xfa/fwl/theme/cfwl_pushbuttontp.cpp | 7 ++--- xfa/fwl/theme/cfwl_scrollbartp.cpp | 52 ++++++++++++------------------------- xfa/fwl/theme/cfwl_widgettp.cpp | 32 ++--------------------- xfa/fwl/theme/cfwl_widgettp.h | 10 ------- 4 files changed, 21 insertions(+), 80 deletions(-) (limited to 'xfa/fwl/theme') diff --git a/xfa/fwl/theme/cfwl_pushbuttontp.cpp b/xfa/fwl/theme/cfwl_pushbuttontp.cpp index 3d3b1aabf7..c3eef0f11f 100644 --- a/xfa/fwl/theme/cfwl_pushbuttontp.cpp +++ b/xfa/fwl/theme/cfwl_pushbuttontp.cpp @@ -61,11 +61,8 @@ void CFWL_PushButtonTP::DrawBackground(CFWL_ThemeBackground* pParams) { rtInner.height); int32_t iColor = GetColorID(pParams->m_dwStates); - DrawAxialShading(pGraphics, rect.left + PUSHBUTTON_SIZE_Corner, rect.top, - rect.left + PUSHBUTTON_SIZE_Corner, rect.bottom(), - m_pThemeData->clrStart[iColor], - m_pThemeData->clrEnd[iColor], &fillPath, - FXFILL_ALTERNATE, &pParams->m_matrix); + FillSolidRect(pGraphics, m_pThemeData->clrEnd[iColor], &rect, + &pParams->m_matrix); pGraphics->SetStrokeColor(CXFA_GEColor(m_pThemeData->clrBorder[iColor])); pGraphics->StrokePath(&strokePath, &pParams->m_matrix); diff --git a/xfa/fwl/theme/cfwl_scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp index d94eed0ebf..1e9ade8c76 100644 --- a/xfa/fwl/theme/cfwl_scrollbartp.cpp +++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp @@ -80,39 +80,26 @@ void CFWL_ScrollBarTP::DrawThumbBtn(CXFA_Graphics* pGraphics, if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disable) return; - CXFA_GEPath path; CFX_RectF rect(*pRect); - if (bVert) { + if (bVert) rect.Deflate(1, 0); - if (rect.IsEmpty(0.1f)) - return; - - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - DrawAxialShading(pGraphics, rect.left, rect.top, rect.right(), rect.top, - m_pThemeData->clrBtnBK[eState - 1][0], - m_pThemeData->clrBtnBK[eState - 1][1], &path, - FXFILL_WINDING, pMatrix); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor( - CXFA_GEColor(m_pThemeData->clrBtnBorder[eState - 1])); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } else { + else rect.Deflate(0, 1); - if (rect.IsEmpty(0.1f)) - return; - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - DrawAxialShading(pGraphics, rect.left, rect.top, rect.left, rect.bottom(), - m_pThemeData->clrBtnBK[eState - 1][0], - m_pThemeData->clrBtnBK[eState - 1][1], &path, - FXFILL_WINDING, pMatrix); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor( - CXFA_GEColor(m_pThemeData->clrBtnBorder[eState - 1])); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } + if (rect.IsEmpty(0.1f)) + return; + + FillSolidRect(pGraphics, m_pThemeData->clrBtnBK[eState - 1][1], &rect, + pMatrix); + + pGraphics->SaveGraphState(); + + CXFA_GEPath path; + path.AddRectangle(rect.left, rect.top, rect.width, rect.height); + pGraphics->SetStrokeColor( + CXFA_GEColor(m_pThemeData->clrBtnBorder[eState - 1])); + pGraphics->StrokePath(&path, pMatrix); + pGraphics->RestoreGraphState(); } void CFWL_ScrollBarTP::DrawPaw(CXFA_Graphics* pGraphics, @@ -223,13 +210,8 @@ void CFWL_ScrollBarTP::DrawTrack(CXFA_Graphics* pGraphics, path.Clear(); path.AddRectangle(pRect->left + 1, pRect->top, pRect->width - 2, pRect->height); - float x1 = bVert ? pRect->left + 1 : pRect->left; - float y1 = bVert ? pRect->top : pRect->top + 1; - float x2 = bVert ? fRight - 1 : pRect->left; - float y2 = bVert ? pRect->top : fBottom - 1; pGraphics->RestoreGraphState(); - DrawAxialShading(pGraphics, x1, y1, x2, y2, m_pThemeData->clrTrackBKStart, - m_pThemeData->clrTrackBKEnd, &path, FXFILL_WINDING, pMatrix); + FillSolidRect(pGraphics, m_pThemeData->clrTrackBKEnd, pRect, pMatrix); } void CFWL_ScrollBarTP::DrawMaxMinBtn(CXFA_Graphics* pGraphics, diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp index 9cbed0cfc7..0f67b89715 100644 --- a/xfa/fwl/theme/cfwl_widgettp.cpp +++ b/xfa/fwl/theme/cfwl_widgettp.cpp @@ -137,29 +137,6 @@ void CFWL_WidgetTP::FillSolidRect(CXFA_Graphics* pGraphics, pGraphics->RestoreGraphState(); } -void CFWL_WidgetTP::DrawAxialShading(CXFA_Graphics* pGraphics, - float fx1, - float fy1, - float fx2, - float fy2, - FX_ARGB beginColor, - FX_ARGB endColor, - CXFA_GEPath* path, - int32_t fillMode, - CFX_Matrix* pMatrix) { - if (!pGraphics || !path) - return; - - CFX_PointF begPoint(fx1, fy1); - CFX_PointF endPoint(fx2, fy2); - CXFA_GEShading shading(begPoint, endPoint, false, false, beginColor, - endColor); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(CXFA_GEColor(&shading)); - pGraphics->FillPath(path, fillMode, pMatrix); - pGraphics->RestoreGraphState(); -} - void CFWL_WidgetTP::DrawFocus(CXFA_Graphics* pGraphics, const CFX_RectF* pRect, CFX_Matrix* pMatrix) { @@ -236,15 +213,10 @@ void CFWL_WidgetTP::DrawBtn(CXFA_Graphics* pGraphics, CFX_Matrix* pMatrix) { InitializeArrowColorData(); + FillSolidRect(pGraphics, m_pColorData->clrEnd[eState - 1], pRect, pMatrix); + CXFA_GEPath path; - float fRight = pRect->right(); - float fBottom = pRect->bottom(); path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - DrawAxialShading(pGraphics, pRect->left, pRect->top, fRight, fBottom, - m_pColorData->clrStart[eState - 1], - m_pColorData->clrEnd[eState - 1], &path, FXFILL_WINDING, - pMatrix); - pGraphics->SetStrokeColor(CXFA_GEColor(m_pColorData->clrBorder[eState - 1])); pGraphics->StrokePath(&path, pMatrix); } diff --git a/xfa/fwl/theme/cfwl_widgettp.h b/xfa/fwl/theme/cfwl_widgettp.h index 503c85eaf2..f62098d4ef 100644 --- a/xfa/fwl/theme/cfwl_widgettp.h +++ b/xfa/fwl/theme/cfwl_widgettp.h @@ -64,16 +64,6 @@ class CFWL_WidgetTP { FX_ARGB fillColor, const CFX_RectF* pRect, CFX_Matrix* pMatrix = nullptr); - void DrawAxialShading(CXFA_Graphics* pGraphics, - float fx1, - float fy1, - float fx2, - float fy2, - FX_ARGB beginColor, - FX_ARGB endColor, - CXFA_GEPath* path, - int32_t fillMode = FXFILL_WINDING, - CFX_Matrix* pMatrix = nullptr); void DrawFocus(CXFA_Graphics* pGraphics, const CFX_RectF* pRect, CFX_Matrix* pMatrix = nullptr); -- cgit v1.2.3