diff options
Diffstat (limited to 'examples/cairo_snippets/snippets/curve_rectangle.py')
-rwxr-xr-x | examples/cairo_snippets/snippets/curve_rectangle.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/cairo_snippets/snippets/curve_rectangle.py b/examples/cairo_snippets/snippets/curve_rectangle.py new file mode 100755 index 0000000..3fb3c4a --- /dev/null +++ b/examples/cairo_snippets/snippets/curve_rectangle.py @@ -0,0 +1,53 @@ +#/* a custom shape, that could be wrapped in a function */ +x0 = 0.1 #/*< parameters like cairo_rectangle */ +y0 = 0.1 +rect_width = 0.8 +rect_height = 0.8 +radius = 0.4 #/*< and an approximate curvature radius */ + +snippet_normalize (cr, width, height) + +x1=x0+rect_width +y1=y0+rect_height +#if (!rect_width || !rect_height) +# return +if rect_width/2<radius: + if rect_height/2<radius: + cr.move_to (x0, (y0 + y1)/2) + cr.curve_to (x0 ,y0, x0, y0, (x0 + x1)/2, y0) + cr.curve_to (x1, y0, x1, y0, x1, (y0 + y1)/2) + cr.curve_to (x1, y1, x1, y1, (x1 + x0)/2, y1) + cr.curve_to (x0, y1, x0, y1, x0, (y0 + y1)/2) + else: + cr.move_to (x0, y0 + radius) + cr.curve_to (x0 ,y0, x0, y0, (x0 + x1)/2, y0) + cr.curve_to (x1, y0, x1, y0, x1, y0 + radius) + cr.line_to (x1 , y1 - radius) + cr.curve_to (x1, y1, x1, y1, (x1 + x0)/2, y1) + cr.curve_to (x0, y1, x0, y1, x0, y1- radius) + +else: + if rect_height/2<radius: + cr.move_to (x0, (y0 + y1)/2) + cr.curve_to (x0 , y0, x0 , y0, x0 + radius, y0) + cr.line_to (x1 - radius, y0) + cr.curve_to (x1, y0, x1, y0, x1, (y0 + y1)/2) + cr.curve_to (x1, y1, x1, y1, x1 - radius, y1) + cr.line_to (x0 + radius, y1) + cr.curve_to (x0, y1, x0, y1, x0, (y0 + y1)/2) + else: + cr.move_to (x0, y0 + radius) + cr.curve_to (x0 , y0, x0 , y0, x0 + radius, y0) + cr.line_to (x1 - radius, y0) + cr.curve_to (x1, y0, x1, y0, x1, y0 + radius) + cr.line_to (x1 , y1 - radius) + cr.curve_to (x1, y1, x1, y1, x1 - radius, y1) + cr.line_to (x0 + radius, y1) + cr.curve_to (x0, y1, x0, y1, x0, y1- radius) + +cr.close_path () + +cr.set_source_rgb (0.5,0.5,1) +cr.fill_preserve () +cr.set_source_rgba (0.5,0,0,0.5) +cr.stroke () |