【问题标题】:How to add method to Cairo.Context?如何向 Cairo.Context 添加方法?
【发布时间】:2011-03-13 17:08:42
【问题描述】:

我创建了以下函数,用于在开罗绘制圆角矩形框

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 的方法一样。

【问题讨论】:

    标签: cairo vala


    【解决方案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);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-03
      • 2019-11-06
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多