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

이 그것을하는 방법과 같은 매우 C입니다 카이로에서 상자를 그리기 위해 다음과 같은 기능을 만들었습니다. 나는 더 많은 객체 지향적 인 방식으로이를 수행하는 것을 선호한다. 이 함수를 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); 
    } 
} 
관련 문제