- cairo_move_to (cr, x + r, y);
- cairo_line_to (cr, x + w - r, y);
- cairo_curve_to (cr, x + w, y,
- x + w, y,
- x + w, y + r);
- cairo_line_to (cr, x + w, y + h - r);
- cairo_curve_to (cr, x + w, y + h,
- x + w, y + h,
- x + w - r, y + h);
- cairo_line_to (cr, x + r, y + h);
- cairo_curve_to (cr, x, y + h,
- x, y + h,
- x, y + h - r);
- cairo_line_to (cr, x, y + r);
- cairo_curve_to (cr, x, y,
- x, y,
- x + r, y);
+ if (round_corners & ROUND_CORNER_TL)
+ cairo_move_to (cr, x + r, y);
+ else
+ cairo_move_to (cr, x, y);
+
+ if (round_corners & ROUND_CORNER_TR) {
+ cairo_line_to (cr, x + w - r, y);
+ cairo_rel_curve_to (cr,
+ r, 0,
+ r, 0,
+ r, r);
+ }
+ else
+ cairo_line_to (cr, x + w, y);
+
+ if (round_corners & ROUND_CORNER_BR) {
+ cairo_line_to (cr, x + w, y + h - r);
+ cairo_rel_curve_to (cr,
+ 0, r,
+ 0, r,
+ -r, r);
+ }
+ else
+ cairo_line_to (cr, x + w, y + h);
+
+ if (round_corners & ROUND_CORNER_BL) {
+ cairo_line_to (cr, x + r, y + h);
+ cairo_rel_curve_to (cr,
+ -r, 0,
+ -r, 0,
+ -r, -r);
+ }
+ else
+ cairo_line_to (cr, x, y + h);
+
+ if (round_corners & ROUND_CORNER_TL) {
+ cairo_line_to (cr, x, y + r);
+ cairo_rel_curve_to (cr,
+ 0, -r,
+ 0, -r,
+ r, -r);
+ }
+ else
+ cairo_line_to (cr, x, y);