summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@digia.com>2012-10-10 14:14:32 (GMT)
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-17 11:06:53 (GMT)
commit54e53d3ca97a30acfcb50eee9d28c93d684753b7 (patch)
tree2387dfaa1e5d97ec52c65a0b56528273e76bb675
parent429e80f10aaa3b710b03960c9169b4c296d9df0f (diff)
downloadQt-54e53d3ca97a30acfcb50eee9d28c93d684753b7.zip
Qt-54e53d3ca97a30acfcb50eee9d28c93d684753b7.tar.gz
Qt-54e53d3ca97a30acfcb50eee9d28c93d684753b7.tar.bz2
Fixed cosmetic line drawing where begin and end points are equal.
This case has typically required specific work-arounds in other rendering paths as well. (cherry picked from commit dfb55f8a6c8d3ec4da840191c331ace3c2aa2bf3) Task-number: QTBUG-25153 Change-Id: I217e710a30222792ebca3bf297e438d944c32992 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r--src/gui/painting/qcosmeticstroker.cpp5
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp21
2 files changed, 26 insertions, 0 deletions
diff --git a/src/gui/painting/qcosmeticstroker.cpp b/src/gui/painting/qcosmeticstroker.cpp
index 6c1be87..f99edc6 100644
--- a/src/gui/painting/qcosmeticstroker.cpp
+++ b/src/gui/painting/qcosmeticstroker.cpp
@@ -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;
diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp
index c21f3b5..fc2d045 100644
--- a/tests/auto/qpainter/tst_qpainter.cpp
+++ b/tests/auto/qpainter/tst_qpainter.cpp
@@ -270,6 +270,7 @@ private slots:
void drawTextOutsideGuiThread();
void QTBUG26013_squareCapStroke();
+ void QTBUG25153_drawLine();
private:
void fillData();
@@ -4810,6 +4811,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"