I have found an issue about filling polygon in cairo driver.
Line 1427 of cairo.c:
        cairo_set_line_width( aStream->cairoContext, 1.0 );
It is a hard coded line width value. When the polygon size
is large enough, the problem is not obvious, but when the polygon size is small (comparable to 1), the edge of the polygon will be too thick and the polygon will not look like the shape you want. e.g. a rectangle looks like a round dot.

I believe that this line of code should be deleted. After the deletion
the result is correct again. I've tested it against revision 12304.