[poppler] qt5/src

Albert Astals Cid aacid at kemper.freedesktop.org
Sat Sep 30 21:13:14 UTC 2017


 qt5/src/ArthurOutputDev.cc |   21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

New commits:
commit f871b82edfd632f79ec7bdd0b4d560cd348d8b1a
Author: Oliver Sander <oliver.sander at tu-dresden.de>
Date:   Fri Sep 8 23:27:45 2017 +0200

    qt5: ArthurOutputDev: Fix several small bugs related to dash pattern handling

diff --git a/qt5/src/ArthurOutputDev.cc b/qt5/src/ArthurOutputDev.cc
index 9810de97..14c79813 100644
--- a/qt5/src/ArthurOutputDev.cc
+++ b/qt5/src/ArthurOutputDev.cc
@@ -185,9 +185,23 @@ void ArthurOutputDev::updateLineDash(GfxState *state)
   int dashLength;
   double dashStart;
   state->getLineDash(&dashPattern, &dashLength, &dashStart);
+
+  // Special handling for zero-length patterns, i.e., solid lines.
+  // Simply calling QPen::setDashPattern with an empty pattern does *not*
+  // result in a solid line.  Rather, the current pattern is unchanged.
+  // See the implementation of the setDashPattern method in the file qpen.cpp.
+  if (dashLength==0)
+  {
+    m_currentPen.setStyle(Qt::SolidLine);
+    m_painter->setPen(m_currentPen);
+    return;
+  }
+
   QVector<qreal> pattern(dashLength);
   for (int i = 0; i < dashLength; ++i) {
-    pattern[i] = dashPattern[i];
+    // pdf measures the dash pattern in dots, but Qt uses the
+    // line width as the unit.
+    pattern[i] = dashPattern[i] / state->getLineWidth();
   }
   m_currentPen.setDashPattern(pattern);
   m_currentPen.setDashOffset(dashStart);
@@ -244,6 +258,11 @@ void ArthurOutputDev::updateLineWidth(GfxState *state)
 {
   m_currentPen.setWidthF(state->getLineWidth());
   m_painter->setPen(m_currentPen);
+  // The updateLineDash method needs to know the line width, but it is sometimes
+  // called before the updateLineWidth method.  To make sure that the last call
+  // to updateLineDash before a drawing operation is always with the correct line
+  // width, we call it here, right after a change to the line width.
+  updateLineDash(state);
 }
 
 void ArthurOutputDev::updateFillColor(GfxState *state)


More information about the poppler mailing list