1

我目前正在尝试修改 Avant Window Navigator 的“Lucido 模式”代码,以便用对角线替换分隔符/s' 曲线。

控制曲线的 (Cairo) 代码部分位于 GitHub 上以下文件的第 330 到 334 行:link

{ /* Oblique */
  gfloat xm = ( *xs + xf ) / 2.0;
  cairo_curve_to (cr, xm, *ys, xm, yf, xf, yf);
}

为了使目标更容易理解,这里是 AWN Lucido 现在的样子以及我希望它看起来的样子:

例子

如果有人能帮助我正确地编写代码以使分隔符成为一条直线,我将不胜感激。

非常感谢您的宝贵时间 :)

4

1 回答 1

3

可以在此处找到有关使用 Cairo 绘制曲线的信息。

四点贝塞尔曲线如下所示:

在此处输入图像描述

cairo_curve_to采用当前笔位置p0,其参数是接下来的 3 个点。

因此,您可以cairo_curve_to通过为每个参数传递相同的点来绘制一条直线。这有点浪费,但对你来说可能不是一个严重的问题。

看起来如果你传递它的两个参数的结束位置,_line_from_to它将退化为绘制一条直线,如你所愿。例如,如果对该函数的调用将其_line_from_to(cr, &x, &y, x2, y2)更改为_line_from_to(cr, &x2, &y2, x2, y2).

或者,将代码更改_line_from_to

static void 
_line_from_to ( cairo_t *cr,
                gfloat *xs,
                gfloat *ys,
                gfloat xf,
                gfloat yf)
{
  cairo_line_to (cr, xf, yf);
  *xs = xf;
  *ys = yf;
}

如果您想了解更多信息cairo_curve_to,请参阅此示例

于 2013-03-13T00:55:33.247 回答