[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