diff -rup canvas-orig-1/source/cairo/cairo_canvashelper.cxx canvas/source/cairo/cairo_canvashelper.cxx
--- canvas-orig-1/source/cairo/cairo_canvashelper.cxx	2007-11-15 11:23:44.000000000 +0100
+++ canvas/source/cairo/cairo_canvashelper.cxx	2007-11-15 12:10:57.000000000 +0100
@@ -55,6 +55,7 @@
 #include <basegfx/point/b2dpoint.hxx>
 #include <basegfx/polygon/b2dpolygon.hxx>
 #include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
 #include <basegfx/tools/canvastools.hxx>
 
 #include <comphelper/sequence.hxx>
@@ -928,6 +929,7 @@ namespace cairocanvas
 
 	    if( nPointCount > 1) {
 		bool bIsBezier = aPolygon.areControlPointsUsed();
+        bool bIsRectangle = ::basegfx::tools::isRectangle( aPolygon );
 		::basegfx::B2DPoint aA, aB, aP;
 
 		aP = aPolygon.getB2DPoint( 0 );
@@ -936,7 +938,7 @@ namespace cairocanvas
 
 		cairo_matrix_transform_point( &aOrigMatrix, &nX, &nY );
 
-		if( ! bIsBezier ) {
+		if( ! bIsBezier && bIsRectangle ) {
 		    nX = ::rtl::math::round( nX );
 		    nY = ::rtl::math::round( nY );
 		}
@@ -961,7 +963,7 @@ namespace cairocanvas
 		    nY = aP.getY();
 		    cairo_matrix_transform_point( &aOrigMatrix, &nX, &nY );
 
-		    if( ! bIsBezier ) {
+		    if( ! bIsBezier && bIsRectangle ) {
 			nX = ::rtl::math::round( nX );
 			nY = ::rtl::math::round( nY );
 		    }
