Index: qgis/qgis_unstable/src/core/qgsvectorlayer.cpp
===================================================================
--- qgis.orig/qgis_unstable/src/core/qgsvectorlayer.cpp	2008-06-02 12:17:11.000000000 -0400
+++ qgis/qgis_unstable/src/core/qgsvectorlayer.cpp	2008-06-02 12:34:47.000000000 -0400
@@ -360,7 +360,8 @@
     QPainter* p,
     const QgsMapToPixel* mtp,
     const QgsCoordinateTransform* ct,
-    bool drawingToEditingCanvas)
+    bool drawingToEditingCanvas,
+    bool drawArrows)
 {
   unsigned char *ptr = feature + 5;
   unsigned int wkbType = *((int*)(feature+1));
@@ -432,6 +433,7 @@
   // 255 = opaque
   //
   QPen myTransparentPen = p->pen(); // store current pen
+  QBrush brush = p->brush(); //to be kept as original
   QColor myColor = myTransparentPen.color();
   //only set transparency from layer level if renderer does not provide
   //transparency on class level
@@ -459,8 +461,45 @@
       }
     }
 
+  // draw arrows
+  if (drawArrows) {
+#define PI 3.14159
+    p->setBrush(QBrush(myColor, Qt::SolidPattern));
+    
+    for (int i = 0; i < pa.size(); ++i)
+      {
+	if (i > 0) 
+	  {
+	    QPointF p1 = pa[i];
+	    QPointF p2 = pa[i-1];
+	    
+	    QLineF line = QLineF(p1, p2);
+	    double angle = ::acos(line.dx() / line.length());
+	    if (line.dy() >= 0)
+	      {
+		angle = (PI * 2) - angle;
+	      }
+	    
+	    float arrowSize = 5;
+	    QPointF arrowP1 = 
+	      line.p1() + QPointF(sin(angle + PI / 3) * arrowSize,
+				  cos(angle + PI / 3) * arrowSize);
+	    QPointF arrowP2 = 
+	      line.p1() + QPointF(sin(angle + PI - PI / 3) * arrowSize,
+				  cos(angle + PI - PI / 3) * arrowSize);
+	    QPolygonF arrowHead;
+	    arrowHead << line.p1() << arrowP1 << arrowP2;
+	    if (i % 2 == 0) {
+	      p->drawPolygon(arrowHead);
+	    }
+	    
+	    
+	  }
+      }
+  }
   //restore the pen
   p->setPen(pen);
+  p->setBrush(brush);
   
   return ptr;
 }
@@ -3057,7 +3096,7 @@
                        p,
                        theMapToPixelTransform,
                        ct,
-                       drawingToEditingCanvas);
+                       drawingToEditingCanvas, TRUE);
         break;
       }
     case QGis::WKBMultiLineString:
Index: qgis/qgis_unstable/src/core/qgsvectorlayer.h
===================================================================
--- qgis.orig/qgis_unstable/src/core/qgsvectorlayer.h	2008-06-02 12:17:11.000000000 -0400
+++ qgis/qgis_unstable/src/core/qgsvectorlayer.h	2008-06-02 12:35:13.000000000 -0400
@@ -451,7 +451,8 @@
                                 QPainter* p,
                                 const QgsMapToPixel* mtp,
                                 const QgsCoordinateTransform* ct,
-                                bool drawingToEditingCanvas);
+                                bool drawingToEditingCanvas,
+				bool drawArrows=FALSE);
 
   /** Draw the polygon as given in the WKB format. Returns a pointer to
    *  the byte after the end of the polygon binary data stream (WKB).
