2011-03-13 4 views
1

J'ai créé la fonction suivante pour dessiner des boîtes au Caire avec des rectangles arrondisComment ajouter une méthode à Cairo.Context?

void square (Context cr, int x, int y, int sizex, int sizey, int radius) 
{ 
    cr.move_to (x + radius, y); 
    cr.arc (x + sizex - radius, y + radius, radius, 1.5 * PI, 0); 
    cr.arc (x + sizex - radius, y + sizey - radius, radius, 0, 0.5 * PI); 
    cr.arc (x + radius, y + sizey - radius, radius, 0.5 * PI, PI); 
    cr.arc (x + radius, y + radius, radius, PI, 1.5 * PI); 
} 

C'est un très C comme façon de le faire. Je préférerais faire cela de manière plus orientée objet. Comme l'implémentation de la fonction en tant que méthode de Cairo.Context.

Répondre

1

Vous ne pouvez pas ajouter de méthodes à des classes existantes sans modifier la définition de cette classe (cairo.vapi dans ce cas). Ce que vous pouvez faire, cependant, c'est la sous-classe Cairo.Context et utilisez-la simplement à la place de Cairo.Context. Quelque chose comme ça devrait faire l'affaire:

[Compact] 
public class Context : Cairo.Context { 
    public void square (int x, int y, int sizex, int sizey, int radius) { 
    this.move_to (x + radius, y); 
    this.arc (x + sizex - radius, y + radius, radius, 1.5 * Math.PI, 0); 
    this.arc (x + sizex - radius, y + sizey - radius, radius, 0, 0.5 * Math.PI); 
    this.arc (x + radius, y + sizey - radius, radius, 0.5 * Math.PI, Math.PI); 
    this.arc (x + radius, y + radius, radius, Math.PI, 1.5 * Math.PI); 
    } 

    public Context (Cairo.Surface target) { 
    base (target); 
    } 
} 
Questions connexes