How can I draw image with rounded corners in Cairo/Gtk? In any language.
1 Answers
8
votes
Ok, it's realy simple. Here is vala code:
private void draw_rounded_path(Context ctx, double x, double y,
double width, double height, double radius) {
double degrees = M_PI / 180.0;
ctx.new_sub_path();
ctx.arc(x + width - radius, y + radius, radius, -90 * degrees, 0 * degrees);
ctx.arc(x + width - radius, y + height - radius, radius, 0 * degrees, 90 * degrees);
ctx.arc(x + radius, y + height - radius, radius, 90 * degrees, 180 * degrees);
ctx.arc(x + radius, y + radius, radius, 180 * degrees, 270 * degrees);
ctx.close_path();
}
and example of expose_event:
public override bool expose_event(Gdk.EventExpose event) {
//base.expose_event(event);
Context ctx = Gdk.cairo_create(this.window);
draw_rounded_path(ctx, allocation.x, allocation.y, allocation.width,
allocation.height, 5);
if(pixbuf != null) {
Gdk.cairo_set_source_pixbuf(ctx, pixbuf, allocation.x, allocation.y);
ctx.clip();
}
ctx.paint();
return false;
}