Fixed outline / fill inconsistencies in raster paint engine.
authorSamuel Rødal <samuel.rodal@digia.com>
Thu, 20 Sep 2012 14:01:03 +0000 (16:01 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 20 Sep 2012 21:08:55 +0000 (23:08 +0200)
We did coordinate rounding of the fill in the raster paint engine to
match how drawLine_midpoint_i rendered lines. With the new cosmetic
stroker in 4.8 this rounding is not needed anymore.

Task-number: QTBUG-26013
Change-Id: Ibe86fa809276c8e7988d393a67e772d57b9a4799
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/gui/painting/qoutlinemapper.cpp
src/gui/painting/qoutlinemapper_p.h
src/gui/painting/qpaintengine_raster.cpp

index 08ed08a..12a1e32 100644 (file)
@@ -226,13 +226,6 @@ void QOutlineMapper::endOutline()
         return;
     }
 
-    if (m_round_coords) {
-        // round coordinates to match outlines drawn with drawLine_midpoint_i
-        for (int i = 0; i < m_elements.size(); ++i)
-            elements[i] = QPointF(qFloor(elements[i].x() + aliasedCoordinateDelta),
-                                  qFloor(elements[i].y() + aliasedCoordinateDelta));
-    }
-
     controlPointRect = boundingRect(elements, m_elements.size());
 
 #ifdef QT_DEBUG_CONVERT
index 12ffb7c..70ab498 100644 (file)
@@ -95,8 +95,7 @@ public:
         m_points(0),
         m_tags(0),
         m_contours(0),
-        m_in_clip_elements(false),
-        m_round_coords(false)
+        m_in_clip_elements(false)
     {
     }
 
@@ -197,8 +196,6 @@ public:
     QT_FT_Outline *convertPath(const QPainterPath &path);
     QT_FT_Outline *convertPath(const QVectorPath &path);
 
-    void setCoordinateRounding(bool coordinateRounding) { m_round_coords = coordinateRounding; }
-
     inline QPainterPath::ElementType *elementTypes() const { return m_element_types.size() == 0 ? 0 : m_element_types.data(); }
 
 public:
@@ -231,9 +228,6 @@ public:
 
     bool m_valid;
     bool m_in_clip_elements;
-
-private:
-    bool m_round_coords;
 };
 
 QT_END_NAMESPACE
index d93b127..da6648b 100644 (file)
@@ -1932,11 +1932,8 @@ void QRasterPaintEngine::drawPolygon(const QPointF *points, int pointCount, Poly
     if (mode != PolylineMode) {
         // Do the fill...
         ensureBrush();
-        if (s->brushData.blend) {
-            d->outlineMapper->setCoordinateRounding(s->penData.blend && s->flags.fast_pen && s->lastPen.brush().isOpaque());
+        if (s->brushData.blend)
             fillPolygon(points, pointCount, mode);
-            d->outlineMapper->setCoordinateRounding(false);
-        }
     }
 
     // Do the outline...
@@ -1982,7 +1979,6 @@ void QRasterPaintEngine::drawPolygon(const QPoint *points, int pointCount, Polyg
         if (s->brushData.blend) {
             // Compose polygon fill..,
             ensureOutlineMapper();
-            d->outlineMapper->setCoordinateRounding(s->penData.blend != 0);
             d->outlineMapper->beginOutline(mode == WindingMode ? Qt::WindingFill : Qt::OddEvenFill);
             d->outlineMapper->moveTo(*points);
             const QPoint *p = points;
@@ -1996,7 +1992,6 @@ void QRasterPaintEngine::drawPolygon(const QPoint *points, int pointCount, Polyg
             ProcessSpans brushBlend = d->getBrushFunc(d->outlineMapper->controlPointRect,
                                                       &s->brushData);
             d->rasterize(d->outlineMapper->outline(), brushBlend, &s->brushData, d->rasterBuffer.data());
-            d->outlineMapper->setCoordinateRounding(false);
         }
     }