2011-03-13 83 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); 
    } 
}