Как добавить метод в Cairo.Context? - PullRequest
1 голос
/ 13 марта 2011

Я создал следующую функцию для рисования прямоугольников в Каире с закругленными прямоугольниками

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 Ответ

1 голос
/ 08 апреля 2011

Вы не можете добавлять методы к существующим классам без изменения определения этого класса (в данном случае 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);
  }
}
...