diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2019-10-28 16:37:57 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-10-28 19:59:46 +0100 |
commit | 036d2653d1005b1c5a0b4ca323513557b1cc7d52 (patch) | |
tree | cc5e75fb8d02d59a8566523a03bbb1d30fe0ca08 /vcl | |
parent | b04109027abc76b56a33f471f4cc0a9420ee4f29 (diff) |
headless: optimize DrawWaveLine / drawPixel.
ImplDrawWaveLine - used to render colored lines under mis-spelled
and/or grammatically interesting sections uses (for better or worse)
'drawPixel' to draw the line.
Implementing drawPixel with a tiny B2DPolyPolygon is easy reading
but triggers the unbelievably expensive SystemDependentDataHolder
paths as well as some big chunks of logic for very large numbers
of pixels (if you have lots of mis-spelling this can make typing
visibly slower.).
Change-Id: Ie6ad513e27f820bcad5030579428374c8d22fb3d
Reviewed-on: https://gerrit.libreoffice.org/81622
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/headless/svpgdi.cxx | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index 7488a77b635d..5c1f0daab194 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -714,22 +714,14 @@ void SvpSalGraphics::drawPixel( long nX, long nY ) } } -void SvpSalGraphics::drawPixel( long nX, long nY, Color nColor ) +void SvpSalGraphics::drawPixel( long nX, long nY, Color aColor ) { - Color aOrigFillColor = m_aFillColor; - Color aOrigLineColor = m_aLineColor; - - basegfx::B2DPolygon aRect = basegfx::utils::createPolygonFromRect(basegfx::B2DRectangle(nX, nY, nX+1, nY+1)); - m_aLineColor = SALCOLOR_NONE; - m_aFillColor = nColor; - - drawPolyPolygon( - basegfx::B2DHomMatrix(), - basegfx::B2DPolyPolygon(aRect), - 0.0); + cairo_t* cr = getCairoContext(true); + clipRegion(cr); - m_aFillColor = aOrigFillColor; - m_aLineColor = aOrigLineColor; + cairo_rectangle(cr, nX, nY, 1, 1); + applyColor(cr, aColor, 0.0); + cairo_fill(cr); } void SvpSalGraphics::drawRect( long nX, long nY, long nWidth, long nHeight ) |