vcl/opengl/gdiimpl.cxx | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-)
New commits: commit 09fe869bf8ef14a6011317c8c494067c09951820 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Sat Aug 6 14:27:55 2016 +0900 tdf#100915 draw antialiased line just for polygon outline To get the anti-aliased polygon we draw a anti-aliased line around every trapezoid. This works fine until we draw a transparent polygon where the lines become visible because of blending. A much better and faster way is to just draw the polygon outline with anti-aliased lines. This is done with this commit. Same fix as aeb0c407a620ea8c28903f61d9d53e6d9ae7c53a in master, but the code differs in 5.2 from master so much that it is generally a separate implementation. Change-Id: I95f98cc930caa7138a59048af68d4015046334d4 Reviewed-on: https://gerrit.libreoffice.org/27923 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index b96ee67..4f1da07 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -1142,14 +1142,13 @@ void OpenGLSalGraphicsImpl::DrawPolygon( sal_uInt32 nPoints, const SalPoint* pPt void OpenGLSalGraphicsImpl::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon, bool blockAA ) { - const basegfx::B2DPolyPolygon& aSimplePolyPolygon = ::basegfx::tools::solveCrossovers( rPolyPolygon ); basegfx::B2DTrapezoidVector aB2DTrapVector; - basegfx::tools::trapezoidSubdivide( aB2DTrapVector, aSimplePolyPolygon ); + basegfx::tools::trapezoidSubdivide(aB2DTrapVector, rPolyPolygon); // draw tesselation result - if( aB2DTrapVector.size()) + if (aB2DTrapVector.size()) { - for(basegfx::B2DTrapezoid & i : aB2DTrapVector) - DrawTrapezoid( i, blockAA ); + for(basegfx::B2DTrapezoid & rTrapezoid : aB2DTrapVector) + DrawTrapezoid(rTrapezoid, blockAA); } } @@ -1838,20 +1837,32 @@ void OpenGLSalGraphicsImpl::drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* bool OpenGLSalGraphicsImpl::drawPolyPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon, double fTransparency ) { VCL_GL_INFO( "::drawPolyPolygon trans " << fTransparency ); + if( rPolyPolygon.count() <= 0 ) return true; - PreDraw( XOROption::IMPLEMENT_XOR ); + bool bUseAA = mrParent.getAntiAliasB2DDraw(); - if( UseSolid( mnFillColor, fTransparency ) ) - DrawPolyPolygon( rPolyPolygon ); + PreDraw(XOROption::IMPLEMENT_XOR); + + if (mnFillColor != SALCOLOR_NONE && UseSolid(mnFillColor, fTransparency)) + { + DrawPolyPolygon(rPolyPolygon, true); + } - if( mnLineColor != mnFillColor && UseSolid( mnLineColor, fTransparency )) + if (mnLineColor != SALCOLOR_NONE || bUseAA) { - basegfx::B2DTrapezoidVector aB2DTrapVector; - basegfx::tools::createLineTrapezoidFromB2DPolyPolygon( aB2DTrapVector, rPolyPolygon ); - for(basegfx::B2DTrapezoid & i : aB2DTrapVector) - DrawTrapezoid( i ); + SalColor nColor = (mnLineColor == SALCOLOR_NONE) ? mnFillColor : mnLineColor; + if (UseLine(nColor, fTransparency, 1.0, bUseAA)) + { + for (const basegfx::B2DPolygon& rPolygon : rPolyPolygon) + { + basegfx::B2DPolygon aPolygon(rPolygon); + if (rPolygon.areControlPointsUsed()) + aPolygon = rPolygon.getDefaultAdaptiveSubdivision(); + DrawPolyLine(aPolygon, 1.0f, basegfx::B2DLineJoin::NONE, css::drawing::LineCap_BUTT, float(15.0 * F_PI180)); + } + } } PostDraw();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits