Index: src/cairo-path-stroke.c
===================================================================
--- src/cairo-path-stroke.c	(revision 113075)
+++ src/cairo-path-stroke.c	(working copy)
@@ -552,6 +552,39 @@
 
 	return status;
     }
+    case CAIRO_LINE_CAP_TRIANGLE: {
+	double dx, dy;
+	cairo_slope_t	fvector;
+	cairo_point_t	mid;
+	cairo_polygon_t	polygon;
+
+	dx = f->usr_vector.x;
+	dy = f->usr_vector.y;
+	dx *= stroker->style->line_width / 2.0;
+	dy *= stroker->style->line_width / 2.0;
+	cairo_matrix_transform_distance (stroker->ctm, &dx, &dy);
+	fvector.dx = _cairo_fixed_from_double (dx);
+	fvector.dy = _cairo_fixed_from_double (dy);
+	mid.x = ((f->ccw.x + f->cw.x) / 2.0) + fvector.dx;
+	mid.y = ((f->ccw.y + f->cw.y) / 2.0) + fvector.dy;
+
+	_cairo_polygon_init (&polygon);
+	_cairo_polygon_move_to (&polygon, &f->cw);
+	_cairo_polygon_line_to (&polygon, &mid);
+	_cairo_polygon_line_to (&polygon, &f->ccw);
+	_cairo_polygon_close (&polygon);
+	status = _cairo_polygon_status (&polygon);
+
+	if (status == CAIRO_STATUS_SUCCESS) {
+	    status = _cairo_bentley_ottmann_tessellate_polygon (stroker->traps,
+								&polygon,
+								CAIRO_FILL_RULE_WINDING);
+	}
+
+	_cairo_polygon_fini (&polygon);
+
+	return status;
+    }
     case CAIRO_LINE_CAP_BUTT:
     default:
 	return CAIRO_STATUS_SUCCESS;
Index: src/cairo.h
===================================================================
--- src/cairo.h	(revision 113075)
+++ src/cairo.h	(working copy)
@@ -497,6 +497,7 @@
  * @CAIRO_LINE_CAP_BUTT: start(stop) the line exactly at the start(end) point
  * @CAIRO_LINE_CAP_ROUND: use a round ending, the center of the circle is the end point
  * @CAIRO_LINE_CAP_SQUARE: use squared ending, the center of the square is the end point
+ * @CAIRO_LINE_CAP_TRIANGLE: use triangle ending, the center of the triangle is the end point (used in Silverlight)
  *
  * Specifies how to render the endpoints of the path when stroking.
  *
@@ -505,7 +506,8 @@
 typedef enum _cairo_line_cap {
     CAIRO_LINE_CAP_BUTT,
     CAIRO_LINE_CAP_ROUND,
-    CAIRO_LINE_CAP_SQUARE
+    CAIRO_LINE_CAP_SQUARE,
+    CAIRO_LINE_CAP_TRIANGLE
 } cairo_line_cap_t;
 
 cairo_public void
