2011-03-13 81 views
1

我創建了下面的函數在開羅畫框與圓角矩形如何將方法添加到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); 
} 

這是一個非常喜歡ç做這件事的方式。我寧願以更加面向對象的方式來做到這一點。就像實現作爲Cairo.Context方法的函數一樣。

回答

1

如果不修改該類的定義(本例中爲cairo.vapi),則無法向現有類添加方法。然而,你可以做的是Cairo.Context的子類,並且只是使用它而不是Cairo.Context。像這樣的事情應該做的伎倆:

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