[Libreoffice-commits] core.git: vcl/opengl

Tomaž Vajngerl tomaz.vajngerl at collabora.co.uk
Thu Apr 14 05:21:02 UTC 2016


 vcl/opengl/gdiimpl.cxx |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

New commits:
commit ea6196f0a51d1bf4cd722468406dcc8c64c7435c
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Fri Apr 8 17:03:48 2016 +0900

    tdf#99244 opengl: miter limit for poly lines
    
    Change-Id: I1c363a8f1d21bbacab0c5785544aa8becfe39363

diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 32e085f..8b8046f 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -39,6 +39,7 @@
 
 #include <glm/gtc/type_ptr.hpp>
 #include <glm/gtx/norm.hpp>
+#include <glm/gtx/compatibility.hpp>
 
 #include <stdlib.h>
 
@@ -684,6 +685,8 @@ inline glm::vec2 normalize(const glm::vec2& vector)
     return vector;
 }
 
+SAL_CONSTEXPR float constMiterMinimumAngle = 15.0f;
+
 } // end anonymous namespace
 
 void OpenGLSalGraphicsImpl::DrawLineCap(float x1, float y1, float x2, float y2, css::drawing::LineCap eLineCap, float fLineWidth)
@@ -866,6 +869,17 @@ void OpenGLSalGraphicsImpl::DrawPolyLine(const basegfx::B2DPolygon& rPolygon, fl
 
             if (eLineJoin == basegfx::B2DLineJoin::Miter)
             {
+                float angle = glm::atan2(previousLineVector.x * nextLineVector.y - previousLineVector.y * nextLineVector.x,
+                                         previousLineVector.x * nextLineVector.x + previousLineVector.y * nextLineVector.y);
+
+                angle = (F_PI - std::fabs(angle)) / F_PI180;
+
+                if (angle < constMiterMinimumAngle)
+                    eLineJoin = basegfx::B2DLineJoin::Bevel;
+            }
+
+            if (eLineJoin == basegfx::B2DLineJoin::Miter)
+            {
                 // With miter join we calculate the extrusion vector by adding normals of
                 // previous and next line segment. The vector shows the way but we also
                 // need the length (otherwise the line will be deformed). Length factor is


More information about the Libreoffice-commits mailing list