def gen_rounded_rect_ccw(obj, x, y, w, h, r):
obj.move_to(x + w/2, y)
obj.arc_to(x + w, y, x + w, y + h/2, r)
obj.arc_to(x + w, y + h, x + w / 2, y + h, r)
obj.arc_to(x, y + h, x, y + h/2, r)
obj.arc_to(x, y, x + w / 2, y, r)
def gen_rounded_rect_cw(obj, x, y, w, h, r):
obj.move_to(x + w/2, y)
obj.arc_to(x, y, x, y + h / 2, r)
obj.arc_to(x, y + h, x + w / 2, y + h, r)
obj.arc_to(x + w, y + h, x + w, y + h / 2, r)
obj.arc_to(x + w, y, x + w / 2, y, r)
sometimes Kiva draws the entire boundary (eg. celiagg, qpainter, pdf backends):

and sometimes it does not (eg. agg, opengl, quartz backends):

I think given that the end point of the paths is the same as the start point, I think the first case is the correct one.
When drawing a rounded rect using methods like the following:
sometimes Kiva draws the entire boundary (eg. celiagg, qpainter, pdf backends):

and sometimes it does not (eg. agg, opengl, quartz backends):

I think given that the end point of the paths is the same as the start point, I think the first case is the correct one.
Also the PS and SVG backends fail completely to render (because
basecore2d.GraphicsContextdoesn't implementarc_to).