2010-11-15 2 views

Répondre

7

Ok, c'est vraiment simple. Voici le code vala:

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(); 
} 

et exemple de 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; 
}