[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/khtml/misc
From:       Fredrik Höglund <fredrik () kde ! org>
Date:       2010-06-24 22:25:22
Message-ID: 20100624222522.478CDAC8DF () svn ! kde ! org
[Download RAW message or body]

SVN commit 1142426 by fredrik:

Fix an infinite loop when drawing a dashed or dotted border arc that
begins or ends at a zero-width border.

FIXED-IN: 4.5
BUG: 233610


 M  +2 -2      borderarcstroker.cpp  
 M  +14 -2     borderarcstroker.h  


--- trunk/KDE/kdelibs/khtml/misc/borderarcstroker.cpp #1142425:1142426
@@ -168,7 +168,7 @@
 qreal KCubicBezier::slopeAt(qreal t) const
 {
     const QPointF delta = deltaAt(t);
-    return qFuzzyCompare(delta.x() + 1.0, 1.0) ?
+    return qFuzzyIsNull(delta.x()) ?
                 (delta.y() < 0 ? -1 : 1) : delta.y() / delta.x();
 }
 
@@ -362,7 +362,7 @@
     else
         initialWidth = sweepLength > 0 ? vlw : hlw;
 
-    const qreal finalWidth = QLineF(outer.p3(), inner.p3()).length();
+    const qreal finalWidth = qMax(.1, QLineF(outer.p3(), inner.p3()).length());
     const qreal dashAspect  = (pattern[0] / initialWidth);
     const qreal spaceAspect = (pattern[1] / initialWidth);
     const qreal length = inner.length();
--- trunk/KDE/kdelibs/khtml/misc/borderarcstroker.h #1142425:1142426
@@ -32,8 +32,8 @@
     ~BorderArcStroker();
 
     void setArc(const QRectF &r, qreal startAngle, qreal _sweepLength) { rect = r; \
                angle = startAngle; sweepLength = _sweepLength; }
-    void setPenWidth(qreal leftRight, qreal topBottom) { hlw = leftRight; vlw = \
                topBottom; }
-    void setDashPattern(qreal dashLength, qreal spaceLength) { pattern[0] = \
dashLength; pattern[1] = spaceLength; } +    void setPenWidth(qreal leftRight, qreal \
topBottom); +    void setDashPattern(qreal dashLength, qreal spaceLength);
     void setDashOffset(qreal offset) { patternOffset = offset; }
 
     QPainterPath createStroke(qreal *nextOffset = 0) const;
@@ -48,6 +48,18 @@
     qreal pattern[2];
 };
 
+inline void BorderArcStroker::setPenWidth(qreal leftRight, qreal topBottom)
+{
+    hlw = qMax(.1, leftRight);
+    vlw = qMax(.1, topBottom);
+}
+
+inline void BorderArcStroker::setDashPattern(qreal dashLength, qreal spaceLength)
+{
+    pattern[0] = qMax(.1, dashLength);
+    pattern[1] = qMax(.1, spaceLength);
+}
+
 } // namespace khtml
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic