summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorLouai Al-Khanji <louai.al-khanji@digia.com>2014-05-23 14:53:03 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-26 15:06:12 +0200
commit8701c20f0dcae0d6647675dbd2181610543b7926 (patch)
tree40462ffc1d565cf3877447fbba7ff57737433e29 /src/plugins
parent1b19f66037bd4942b7e699628f9bd8bde89a69bb (diff)
Direct2D QPA: Match raster engine line output
For whatever reason direct2d and the raster engine disagree by one pixel about the positioning of positively sloping aliased lines. To get the same output, we shift such lines by one pixel. Change-Id: I4b20319770c02e3fdd212b3535ccae3c27ca9f2f Reviewed-by: Risto Avila <risto.avila@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
index a1c405067c..4c39560cbe 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
@@ -1160,6 +1160,25 @@ void QWindowsDirect2DPaintEngine::drawRects(const QRectF *rects, int rectCount)
}
}
+static bool isLinePositivelySloped(const QPointF &p1, const QPointF &p2)
+{
+ if (p2.x() > p1.x())
+ return p2.y() < p1.y();
+
+ if (p1.x() > p2.x())
+ return p1.y() < p2.y();
+
+ return false;
+}
+
+static void adjustLine(QPointF *p1, QPointF *p2)
+{
+ if (isLinePositivelySloped(*p1, *p2)) {
+ p1->ry() -= qreal(1.0);
+ p2->ry() -= qreal(1.0);
+ }
+}
+
void QWindowsDirect2DPaintEngine::drawLines(const QLine *lines, int lineCount)
{
Q_D(QWindowsDirect2DPaintEngine);
@@ -1181,6 +1200,10 @@ void QWindowsDirect2DPaintEngine::drawLines(const QLine *lines, int lineCount)
continue;
}
+ // Match raster engine output
+ if (!antiAliasingEnabled())
+ adjustLine(&p1, &p2);
+
adjustForAliasing(&p1);
adjustForAliasing(&p2);
@@ -1213,6 +1236,10 @@ void QWindowsDirect2DPaintEngine::drawLines(const QLineF *lines, int lineCount)
continue;
}
+ // Match raster engine output
+ if (!antiAliasingEnabled())
+ adjustLine(&p1, &p2);
+
adjustForAliasing(&p1);
adjustForAliasing(&p2);