2010-11-09  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Andreas Kling.

        [Qt] image borders do not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=49191

        Test: fast/borders/border-image-01.html

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71611 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/platform/graphics/qt/ImageQt.cpp b/WebCore/platform/graphics/qt/ImageQt.cpp
index c0cfae4..7b46b71 100644
--- a/WebCore/platform/graphics/qt/ImageQt.cpp
+++ b/WebCore/platform/graphics/qt/ImageQt.cpp
@@ -102,20 +102,31 @@
     if (!framePixmap) // If it's too early we won't have an image yet.
         return;
 
+    QRectF dr = QRectF(destRect).normalized();
+    if (!dr.width() || !dr.height()) // Qt interprets 0 width/height as full width/height so just short circuit.
+        return;
+
     QPixmap pixmap = *framePixmap;
-    QRect tr = QRectF(tileRect).toRect();
+    QRect tr = QRectF(tileRect).toRect().normalized();
     if (tr.x() || tr.y() || tr.width() != pixmap.width() || tr.height() != pixmap.height())
         pixmap = pixmap.copy(tr);
 
-    QBrush b(pixmap);
-    b.setTransform(patternTransform);
     ctxt->save();
+
     ctxt->setCompositeOperation(op);
     QPainter* p = ctxt->platformContext();
     if (!pixmap.hasAlpha() && p->compositionMode() == QPainter::CompositionMode_SourceOver)
         p->setCompositionMode(QPainter::CompositionMode_Source);
-    p->setBrushOrigin(phase);
-    p->fillRect(destRect, b);
+
+    /* Translate the coordinates as phase is not in world matrix coordinate space but the tile rect origin is. */
+    QTransform transform(patternTransform);
+    transform *= QTransform().translate(phase.x(), phase.y());
+    transform.translate(tr.x(), tr.y());
+
+    QBrush b(pixmap);
+    b.setTransform(transform);
+    p->fillRect(dr, b);
+
     ctxt->restore();
 
     if (imageObserver())