Fixed cosmetic line drawing where begin and end points are equal.
authorSamuel Rødal <samuel.rodal@digia.com>
Wed, 10 Oct 2012 14:14:32 +0000 (16:14 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 11 Oct 2012 11:11:48 +0000 (13:11 +0200)
This case has typically required specific work-arounds in other
rendering paths as well.

Task-number: QTBUG-25153
Change-Id: I217e710a30222792ebca3bf297e438d944c32992
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/gui/painting/qcosmeticstroker.cpp
tests/auto/gui/painting/qpainter/tst_qpainter.cpp

index 6c1be87..f99edc6 100644 (file)
@@ -356,6 +356,11 @@ bool QCosmeticStroker::clipLine(qreal &x1, qreal &y1, qreal &x2, qreal &y2)
 
 void QCosmeticStroker::drawLine(const QPointF &p1, const QPointF &p2)
 {
+    if (p1 == p2) {
+        drawPoints(&p1, 1);
+        return;
+    }
+
     QPointF start = p1 * state->matrix;
     QPointF end = p2 * state->matrix;
 
index 9354f9f..1371694 100644 (file)
@@ -279,6 +279,7 @@ private slots:
 
     void drawTextWithComplexBrush();
     void QTBUG26013_squareCapStroke();
+    void QTBUG25153_drawLine();
 
 private:
     void fillData();
@@ -4388,6 +4389,26 @@ void tst_QPainter::QTBUG26013_squareCapStroke()
     }
 }
 
+void tst_QPainter::QTBUG25153_drawLine()
+{
+    QImage image(2, 2, QImage::Format_RGB32);
+
+    QVector<Qt::PenCapStyle> styles;
+    styles << Qt::FlatCap << Qt::SquareCap << Qt::RoundCap;
+
+    foreach (Qt::PenCapStyle style, styles) {
+        image.fill(0xffffffff);
+        QPainter p(&image);
+        p.setPen(QPen(Qt::black, 0, Qt::SolidLine, style));
+        p.drawLine(QLineF(0, 0, 0, 0));
+        p.end();
+
+        QCOMPARE(image.pixel(0, 0), 0xff000000);
+        QCOMPARE(image.pixel(0, 1), 0xffffffff);
+        QCOMPARE(image.pixel(1, 0), 0xffffffff);
+    }
+}
+
 QTEST_MAIN(tst_QPainter)
 
 #include "tst_qpainter.moc"