2013-03-13 1 views
1

저는 분리 자의/s '커브를 대각선으로 대체하기 위해 Avant Window Navigator의 "Lucido 모드"코드를 수정하려고합니다.Cairo를 사용하여 커브를 대각선으로 변환 (Linux의 Avant Window Navigator에서)

curviness을 지배하는 (카이로) 코드의 부분은 GitHub의에서 다음 파일의 334 라인 (330)에서 존재 : link

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

이해하는 목표를 용이하게하기 위해, 여기에 의 이미지 무엇 AWN 루시도 지금처럼 보이는 무엇을 나는 그것을 같이 할 : 사람이 구분 a를 만들 수있는 코드 권리를 얻기를 도와 줄 수 있다면

Example

나는 매우 감사하게 될 것입니다 직선, 대각선.

카이로와 곡선을 그리기에 시간을 당신에게 :)

답변

3

정보를 주셔서 감사 here를 찾을 수 있습니다.

네 점 베 지어 곡선은 다음과 같습니다

enter image description here

cairo_curve_top0의 현재 펜 위치를 받아 인수는 다음 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에 대한 추가 정보를 원하는 경우

또는

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; 
} 

을 할 _line_from_to에 대한 코드를 변경, this example를 참조하십시오.

+1

답변 해 주셔서 감사합니다. 불행히도 여러분이 제공 한 코드 블록은 컴파일하는 동안 오류를 일으키고, 카이로 사용 경험이 없기 때문에 픽스를 찾을 수 없었습니다. awn-background-lucido.c 파일에서이 코드를 사용하여 AWN을 컴파일하려고하면이 오류가 발생합니다. http://pastebin.com/rFpL9DjU – AZorin

+0

개구부가 누락되었습니다., 죄송합니다. 답변을 수정할 것입니다. –

+0

환상적! 이번에는 매력적이었습니다! 도와 주셔서 대단히 감사합니다 :) – AZorin

관련 문제