2013-03-13 76 views
1

我正在尝试修改Avant Window Navigator的“Lucido模式”代码以便用对角线替换分隔符的曲线。使用Cairo将曲线转换为对角线

的(开罗)代码支配的弯曲度的部分是从下列文件中的行330至334目前在GitHub上:link

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

为了使目标更容易理解,这里是的图像什么芒LUCIDO看起来像现在,我希望它是什么样子:

Example

我会很感激,如果有人可以帮助我得到正确的代码,使分离器直,对角线。

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

回答

3

信息与开罗绘制曲线可以发现here

的四点贝塞尔曲线看起来像这样:

enter image description here

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)

另外,如果您想对cairo_curve_to更多信息更改代码_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; 
} 

,看到this example

+1

非常感谢您的回复!不幸的是,你提供的代码块在编译时会出错,而且由于我没有使用开罗的经验,所以我找不到修复程序。当我尝试在awn-background-lucido.c文件中使用此代码编译AWN时,出现以下错误:http://pastebin.com/rFpL9DjU – AZorin 2013-03-13 14:44:56

+0

它缺少一个开头{,抱歉。将编辑答案。 – 2013-03-13 14:49:57

+0

太棒了!这次它像魅力一样工作!非常感谢您的帮助:) – AZorin 2013-03-13 14:53:05